diff --git a/Aeon/Aeon.cpp b/Aeon/Aeon.cpp index a21aa26..8a71b39 100644 --- a/Aeon/Aeon.cpp +++ b/Aeon/Aeon.cpp @@ -1,5 +1,7 @@ #include "Aeon/Aeon.hpp" +#include + using Aeon::Core::App; using Aeon::Core::Display; using Aeon::Core::DisplayProperties; @@ -10,7 +12,7 @@ App::App( const DisplayProperties& props ) : mDisplay() , mInput() { - RegisterAsSink( "ENGINE_SYSTEM_CORE", 0 ); + RegisterAsSink( "ENGINE_DISPLAY_CORE", 0 ); mDisplay.Create( props ); @@ -31,5 +33,7 @@ const Display& App::GetDisplay() bool App::EventRecieved( GenericEvent& e ) { + std::cout << e.Type << std::endl; + return false; } diff --git a/Aeon/Core/Events.cpp b/Aeon/Core/Events.cpp index 2b61bc5..c53e488 100644 --- a/Aeon/Core/Events.cpp +++ b/Aeon/Core/Events.cpp @@ -65,10 +65,10 @@ void EventDispatcher::Dispatch( GenericEvent e ) EventManager::GetInstance().Dispatch( mDispatcherID, e ); } -void EventDispatcher::Dispatch( std::string data ) +void EventDispatcher::Dispatch( std::string type ) { GenericEvent e; - e.Data = data; + e.Type = type; EventManager::GetInstance().Dispatch( mDispatcherID, e ); } diff --git a/Aeon/Core/Events.hpp b/Aeon/Core/Events.hpp index 579c849..00fa050 100644 --- a/Aeon/Core/Events.hpp +++ b/Aeon/Core/Events.hpp @@ -45,12 +45,14 @@ struct GenericEvent { std::string System; std::string Type; - // can be empty + + // the rest can be empty std::string Data; - bool Handled = false; + // DISPLAY_RESIZE DISPLAY_MOVE + int x, y; - GenericEvent() { } + bool Handled = false; }; class EventListener @@ -84,7 +86,8 @@ public: void DeRegisterAsSource( std::string system ); void Dispatch( GenericEvent e ); - void Dispatch( std::string data ); + // no data needed + void Dispatch( std::string type ); private: int mDispatcherID = -1; diff --git a/Aeon/Input/Input.cpp b/Aeon/Input/Input.cpp index 190110d..cd8c409 100644 --- a/Aeon/Input/Input.cpp +++ b/Aeon/Input/Input.cpp @@ -8,8 +8,11 @@ using Aeon::Input::Input; Input::Input() : mEvent() + , mDisplayEventDispatcher() + , mKeyboardEventDispatcher() + , mMouseEventDispatcher() { - + mDisplayEventDispatcher.RegisterAsSource( "ENGINE_DISPLAY_CORE" ); } Input::~Input() @@ -24,57 +27,74 @@ void Input::PollInput() switch ( mEvent.type ) { case SDL_WINDOWEVENT: + { switch ( mEvent.window.event ) { case SDL_WINDOWEVENT_SHOWN: - SDL_Log( "Window %d shown", mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_HIDDEN: - SDL_Log( "Window %d hidden", mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_MOVED: - SDL_Log( "Window %d moved to %d,%d", - mEvent.window.windowID, mEvent.window.data1, - mEvent.window.data2 ); - break; - case SDL_WINDOWEVENT_RESIZED: - SDL_Log( "Window %d resized to %dx%d", - mEvent.window.windowID, mEvent.window.data1, - mEvent.window.data2 ); - break; - case SDL_WINDOWEVENT_SIZE_CHANGED: - SDL_Log( "Window %d size changed to %dx%d", - mEvent.window.windowID, mEvent.window.data1, - mEvent.window.data2 ); - break; - case SDL_WINDOWEVENT_MINIMIZED: - SDL_Log( "Window %d minimized", mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_MAXIMIZED: - SDL_Log( "Window %d maximized", mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_RESTORED: - SDL_Log( "Window %d restored", mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_ENTER: - SDL_Log( "Mouse entered window %d", - mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_LEAVE: - SDL_Log( "Mouse left window %d", mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_FOCUS_GAINED: - SDL_Log( "Window %d gained keyboard focus", - mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_FOCUS_LOST: - SDL_Log( "Window %d lost keyboard focus", - mEvent.window.windowID ); - break; - case SDL_WINDOWEVENT_CLOSE: - SDL_Log( "Window %d closed", mEvent.window.windowID ); + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_SHOW" ); break; } + case SDL_WINDOWEVENT_HIDDEN: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_HIDE" ); + break; + } + case SDL_WINDOWEVENT_MOVED: + { + Aeon::Core::GenericEvent e; + e.x = mEvent.window.data1; + e.y = mEvent.window.data2; + e.Type = "DISPLAY_MOVE"; + mDisplayEventDispatcher.Dispatch( e ); + break; + } + case SDL_WINDOWEVENT_RESIZED: + { + Aeon::Core::GenericEvent e; + e.x = mEvent.window.data1; + e.y = mEvent.window.data2; + e.Type = "DISPLAY_RESIZE"; + mDisplayEventDispatcher.Dispatch( e ); + break; + } + case SDL_WINDOWEVENT_MINIMIZED: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_MINIMISED" ); + break; + } + case SDL_WINDOWEVENT_MAXIMIZED: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_MAXIMISED" ); + break; + } + case SDL_WINDOWEVENT_ENTER: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_MOUSE_ENTER" ); + break; + } + case SDL_WINDOWEVENT_LEAVE: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_MOUSE_LEAVE" ); + break; + } + case SDL_WINDOWEVENT_FOCUS_GAINED: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_FOCUS" ); + break; + } + case SDL_WINDOWEVENT_FOCUS_LOST: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_OUT_OF_FOCUS" ); + break; + } + case SDL_WINDOWEVENT_CLOSE: + { + mDisplayEventDispatcher.Dispatch( "DISPLAY_CLOSED" ); + break; + } + } + } } } diff --git a/Aeon/Input/Input.hpp b/Aeon/Input/Input.hpp index a4578be..85efc9c 100644 --- a/Aeon/Input/Input.hpp +++ b/Aeon/Input/Input.hpp @@ -4,11 +4,10 @@ #include #include "Aeon/Singleton.hpp" +#include "Aeon/Core/Events.hpp" namespace Aeon::Input { - - class Input { public: @@ -18,6 +17,10 @@ public: void PollInput(); private: SDL_Event mEvent; + + Aeon::Core::EventDispatcher mDisplayEventDispatcher; + Aeon::Core::EventDispatcher mKeyboardEventDispatcher; + Aeon::Core::EventDispatcher mMouseEventDispatcher; }; }