Daniele Bartolini 13 лет назад
Родитель
Сommit
020b99512c
3 измененных файлов с 94 добавлено и 0 удалено
  1. 28 0
      src/EventLoop.cpp
  2. 17 0
      src/EventLoop.h
  3. 49 0
      src/os/OS.cpp

+ 28 - 0
src/EventLoop.cpp

@@ -0,0 +1,28 @@
+#include "EventLoop.h"
+#include "OS.h"
+
+namespace Crown
+{
+
+void EventLoop::consume_events()
+{
+	while (1)
+	{
+		OS::OSEvent event;
+
+		event = OS::pop_event();
+
+		if (event.type == OS::OSET_NONE)
+		{
+			break;
+		}
+
+		if (event.type == OS::OSET_KEYBOARD)
+		{
+
+		}
+	}
+}
+
+} // namespace Crown
+

+ 17 - 0
src/EventLoop.h

@@ -0,0 +1,17 @@
+#pragma once
+
+namespace Crown
+{
+
+/**
+	Manages OS events. (Keyboard, mouse ecc.)
+*/
+class EventLoop
+{
+public:
+
+	void	consume_events();
+};
+
+} // namespace Crown
+

+ 49 - 0
src/os/OS.cpp

@@ -0,0 +1,49 @@
+#include "OS.h"
+
+namespace Crown
+{
+
+namespace OS
+{
+
+#define				MAX_OS_EVENTS 256
+static int			event_queue_count = 0;
+static OSEvent		event_queue[MAX_OS_EVENTS];
+
+//-----------------------------------------------------------------------------
+void push_event(OSEventType type, int data_a, int data_b, int data_c, int data_d)
+{
+	// The queue wraps silently when MAX_OS_EVENTS reached
+	OSEvent* event = &event_queue[event_queue_count % MAX_OS_EVENTS];
+
+	event_queue_count++;
+
+	event->type = type;
+	event->data_a = data_a;
+	event->data_b = data_b;
+	event->data_c = data_c;
+	event->data_d = data_d;
+}
+
+//-----------------------------------------------------------------------------
+OSEvent& pop_event()
+{
+	OSEvent event;
+
+	if (event_queue_count > 0)
+	{
+		event = event_queue[event_queue_count - 1 % MAX_OS_EVENTS];
+		event_queue_count--;
+
+		return event;
+	}
+
+	event.type = OSET_NONE;
+
+	return event;
+}
+
+} // namespace OS
+
+} // namespace Crown
+