System/SystemEvent: Merge with Input/InputEvent into just Event.
This commit is contained in:
parent
858e721451
commit
10198484e7
12 changed files with 152 additions and 80 deletions
|
|
@ -27,7 +27,7 @@ local system_module = Module("source/System", {
|
||||||
"Path.cpp",
|
"Path.cpp",
|
||||||
"MessageHandler.cpp",
|
"MessageHandler.cpp",
|
||||||
"MessageQueue.cpp",
|
"MessageQueue.cpp",
|
||||||
"SystemEvent.cpp",
|
"Event.cpp",
|
||||||
"Log.cpp"
|
"Log.cpp"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
74
include/Spectre/System/Event.h
Normal file
74
include/Spectre/System/Event.h
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
|
||||||
|
#ifndef SPECTRE_SYSTEM_EVENT_H
|
||||||
|
#define SPECTRE_SYSTEM_EVENT_H
|
||||||
|
|
||||||
|
#include <Spectre/Input/Mouse.h>
|
||||||
|
#include <Spectre/Input/Keyboard.h>
|
||||||
|
|
||||||
|
namespace sp {
|
||||||
|
|
||||||
|
class Display;
|
||||||
|
|
||||||
|
struct Event
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
|
||||||
|
enum Type {
|
||||||
|
None,
|
||||||
|
Quit,
|
||||||
|
Size,
|
||||||
|
Key,
|
||||||
|
MouseButton,
|
||||||
|
MouseMove
|
||||||
|
};
|
||||||
|
|
||||||
|
struct KeyEvent {
|
||||||
|
Keyboard::Key code;
|
||||||
|
bool pressed; /* true if pressed, false if released. */
|
||||||
|
|
||||||
|
std::string getKeyName() const; /* Get the key name */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MouseButtonEvent {
|
||||||
|
Mouse::Button button;
|
||||||
|
bool pressed; /* true if pressed, false if released. */
|
||||||
|
|
||||||
|
std::string getName() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MouseMoveEvent {
|
||||||
|
unsigned int x;
|
||||||
|
unsigned int y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SizeEvent
|
||||||
|
{
|
||||||
|
Display *display;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
};
|
||||||
|
|
||||||
|
Type type;
|
||||||
|
union {
|
||||||
|
struct SizeEvent size;
|
||||||
|
struct KeyEvent key;
|
||||||
|
struct MouseMoveEvent mouseMove;
|
||||||
|
struct MouseButtonEvent mouseButton;
|
||||||
|
};
|
||||||
|
|
||||||
|
Event(Type type = None);
|
||||||
|
|
||||||
|
// Helper methods
|
||||||
|
|
||||||
|
static Event createSize(Display *display, int width, int height);
|
||||||
|
|
||||||
|
static Event createKey(Keyboard::Key code, bool pressed);
|
||||||
|
|
||||||
|
static Event createMouseButton(Mouse::Button button, bool pressed);
|
||||||
|
|
||||||
|
static Event createMouseMove(unsigned int x, unsigned int y);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace sp
|
||||||
|
|
||||||
|
#endif /* SPECTRE_SYSTEM_EVENT_H */
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
#ifndef SPECTRE_SYSTEM_MESSAGEHANDLER_H
|
#ifndef SPECTRE_SYSTEM_MESSAGEHANDLER_H
|
||||||
#define SPECTRE_SYSTEM_MESSAGEHANDLER_H
|
#define SPECTRE_SYSTEM_MESSAGEHANDLER_H
|
||||||
|
|
||||||
#include "SystemEvent.h"
|
#include <Spectre/System/Event.h>
|
||||||
|
|
||||||
namespace sp {
|
namespace sp {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
#ifndef SPECTRE_MESSAGE_QUEUE_H
|
#ifndef SPECTRE_MESSAGE_QUEUE_H
|
||||||
#define SPECTRE_MESSAGE_QUEUE_H
|
#define SPECTRE_MESSAGE_QUEUE_H
|
||||||
|
|
||||||
#include <Spectre/System/SystemEvent.h>
|
#include <Spectre/System/Event.h>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
namespace sp {
|
namespace sp {
|
||||||
|
|
@ -15,14 +15,14 @@ public :
|
||||||
MessageQueue();
|
MessageQueue();
|
||||||
~MessageQueue();
|
~MessageQueue();
|
||||||
|
|
||||||
void postEvent(SysEvent event);
|
void postEvent(Event event);
|
||||||
|
|
||||||
bool pollEvent(SysEvent& event);
|
bool pollEvent(Event& event);
|
||||||
|
|
||||||
bool isEmpty() const;
|
bool isEmpty() const;
|
||||||
|
|
||||||
protected :
|
protected :
|
||||||
std::deque<SysEvent> m_queue;
|
std::deque<Event> m_queue;
|
||||||
|
|
||||||
PlatformEventQueue* m_impl;
|
PlatformEventQueue* m_impl;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
|
|
||||||
#ifndef SYSTEM_EVENT_H
|
|
||||||
#define SYSTEM_EVENT_H
|
|
||||||
|
|
||||||
namespace sp {
|
|
||||||
|
|
||||||
class Display;
|
|
||||||
|
|
||||||
struct SysEvent
|
|
||||||
{
|
|
||||||
public :
|
|
||||||
|
|
||||||
enum Type {
|
|
||||||
None,
|
|
||||||
Quit,
|
|
||||||
Size,
|
|
||||||
};
|
|
||||||
|
|
||||||
Type type;
|
|
||||||
|
|
||||||
struct Size
|
|
||||||
{
|
|
||||||
Display *display;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
};
|
|
||||||
|
|
||||||
union {
|
|
||||||
struct Size size;
|
|
||||||
};
|
|
||||||
|
|
||||||
SysEvent(Type type = None);
|
|
||||||
|
|
||||||
// Helper methods
|
|
||||||
|
|
||||||
static SysEvent sizeEvent(Display *display, int width, int height);
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace sp
|
|
||||||
|
|
||||||
#endif /* SYSTEM_EVENT_H */
|
|
||||||
|
|
@ -56,6 +56,9 @@ void Game::gameLoop()
|
||||||
|
|
||||||
processEvents();
|
processEvents();
|
||||||
|
|
||||||
|
// Update input.
|
||||||
|
getInput()->update();
|
||||||
|
|
||||||
if (time.beginFrame()) {
|
if (time.beginFrame()) {
|
||||||
|
|
||||||
while(time.tick()) {
|
while(time.tick()) {
|
||||||
|
|
@ -71,18 +74,18 @@ void Game::gameLoop()
|
||||||
void Game::processEvents()
|
void Game::processEvents()
|
||||||
{
|
{
|
||||||
MessageQueue& queue = m_platform->getMessageQueue();
|
MessageQueue& queue = m_platform->getMessageQueue();
|
||||||
SysEvent event;
|
Event event;
|
||||||
|
|
||||||
while(queue.pollEvent(event)) {
|
while(queue.pollEvent(event)) {
|
||||||
|
|
||||||
if (event.type == SysEvent::Quit) {
|
if (event.type == Event::Quit) {
|
||||||
exit();
|
exit();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call message handler.
|
// Call message handler.
|
||||||
|
|
||||||
if (event.type == SysEvent::Size) {
|
if (event.type == Event::Size) {
|
||||||
m_messageHandler->onSizeChanged(event.size.display, event.size.width, event.size.height);
|
m_messageHandler->onSizeChanged(event.size.display, event.size.width, event.size.height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
namespace sp {
|
namespace sp {
|
||||||
|
|
||||||
struct SysEvent;
|
struct Event;
|
||||||
|
|
||||||
// Interface for platform specific event queue.
|
// Interface for platform specific event queue.
|
||||||
class PlatformEventQueue
|
class PlatformEventQueue
|
||||||
|
|
@ -13,7 +13,7 @@ public :
|
||||||
// Poll one event from the platform's event queue.
|
// Poll one event from the platform's event queue.
|
||||||
// Returns false if there was no events.
|
// Returns false if there was no events.
|
||||||
// NOTE: This method is guaranteed to be non-blocking.
|
// NOTE: This method is guaranteed to be non-blocking.
|
||||||
virtual bool poll(SysEvent& event) = 0;
|
virtual bool poll(Event& event) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace sp
|
} // namespace sp
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
namespace sp {
|
namespace sp {
|
||||||
|
|
||||||
bool Win32EventQueue::poll(SysEvent& event)
|
bool Win32EventQueue::poll(Event& event)
|
||||||
{
|
{
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
|
|
@ -19,11 +19,11 @@ bool Win32EventQueue::poll(SysEvent& event)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT Win32EventQueue::processMessage(MSG msg, SysEvent& event)
|
LRESULT Win32EventQueue::processMessage(MSG msg, Event& event)
|
||||||
{
|
{
|
||||||
switch(msg.message) {
|
switch(msg.message) {
|
||||||
case WM_QUIT :
|
case WM_QUIT :
|
||||||
event.type = SysEvent::Quit;
|
event.type = Event::Quit;
|
||||||
return 0;
|
return 0;
|
||||||
// Input, Forward to devices.
|
// Input, Forward to devices.
|
||||||
case WM_KEYDOWN :
|
case WM_KEYDOWN :
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
#define PLATFORM_WIN32_EVENT_QUEUE_H
|
#define PLATFORM_WIN32_EVENT_QUEUE_H
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <Spectre/System/SystemEvent.h>
|
#include <Spectre/System/Event.h>
|
||||||
#include <Platform/PlatformEventQueue.h>
|
#include <Platform/PlatformEventQueue.h>
|
||||||
|
|
||||||
namespace sp {
|
namespace sp {
|
||||||
|
|
@ -10,11 +10,11 @@ namespace sp {
|
||||||
class Win32EventQueue : public PlatformEventQueue
|
class Win32EventQueue : public PlatformEventQueue
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
virtual bool poll(SysEvent& event);
|
virtual bool poll(Event& event);
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
LRESULT processMessage(MSG msg, SysEvent& event);
|
LRESULT processMessage(MSG msg, Event& event);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace sp
|
} // namespace sp
|
||||||
|
|
|
||||||
56
source/System/Event.cpp
Normal file
56
source/System/Event.cpp
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
|
||||||
|
#include <Spectre/System/Event.h>
|
||||||
|
|
||||||
|
namespace sp {
|
||||||
|
|
||||||
|
Event::Event(Type type) :
|
||||||
|
type (type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Event::KeyEvent::getKeyName() const
|
||||||
|
{
|
||||||
|
return Keyboard::getKeyName(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Event::MouseButtonEvent::getName() const
|
||||||
|
{
|
||||||
|
return Mouse::getButtonName(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper methods
|
||||||
|
|
||||||
|
Event Event::createSize(Display *display, int width, int height)
|
||||||
|
{
|
||||||
|
Event event(Size);
|
||||||
|
event.size.display = display;
|
||||||
|
event.size.width = width;
|
||||||
|
event.size.height = height;
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
Event Event::createKey(Keyboard::Key code, bool pressed)
|
||||||
|
{
|
||||||
|
Event event(Key);
|
||||||
|
event.key.code = code;
|
||||||
|
event.key.pressed = pressed;
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
Event Event::createMouseButton(Mouse::Button button, bool pressed)
|
||||||
|
{
|
||||||
|
Event event(MouseButton);
|
||||||
|
event.mouseButton.button = button;
|
||||||
|
event.mouseButton.pressed = pressed;
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
Event Event::createMouseMove(unsigned int x, unsigned int y)
|
||||||
|
{
|
||||||
|
Event event(MouseMove);
|
||||||
|
event.mouseMove.x = x;
|
||||||
|
event.mouseMove.y = y;
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace sp
|
||||||
|
|
@ -21,12 +21,12 @@ MessageQueue::~MessageQueue()
|
||||||
delete m_impl;
|
delete m_impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageQueue::postEvent(SysEvent event)
|
void MessageQueue::postEvent(Event event)
|
||||||
{
|
{
|
||||||
m_queue.push_back(event);
|
m_queue.push_back(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MessageQueue::pollEvent(SysEvent& event)
|
bool MessageQueue::pollEvent(Event& event)
|
||||||
{
|
{
|
||||||
// Process platform events first.
|
// Process platform events first.
|
||||||
if (m_impl->poll(event)) {
|
if (m_impl->poll(event)) {
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
#include <Spectre/System/SystemEvent.h>
|
|
||||||
|
|
||||||
namespace sp {
|
|
||||||
|
|
||||||
SysEvent::SysEvent(Type type) :
|
|
||||||
type (type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SysEvent SysEvent::sizeEvent(Display *display, int width, int height)
|
|
||||||
{
|
|
||||||
SysEvent event(Size);
|
|
||||||
event.size.display = display;
|
|
||||||
event.size.width = width;
|
|
||||||
event.size.height = height;
|
|
||||||
return event;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace sp
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue