events coming together
This commit is contained in:
@@ -4,18 +4,23 @@ using Aeon::Core::App;
|
||||
using Aeon::Core::Display;
|
||||
using Aeon::Core::DisplayProperties;
|
||||
|
||||
using Aeon::Input::Input;
|
||||
|
||||
App::App( const DisplayProperties& props )
|
||||
: mDisplay()
|
||||
, mInput()
|
||||
{
|
||||
RegisterAsSink( "ENGINE_SYSTEM_CORE", 0 );
|
||||
|
||||
mDisplay.Create( props );
|
||||
|
||||
}
|
||||
|
||||
void App::Run()
|
||||
{
|
||||
// while ( !mSIGTERM )
|
||||
while ( !mSIGTERM )
|
||||
{
|
||||
|
||||
mInput.PollInput();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,3 +28,8 @@ const Display& App::GetDisplay()
|
||||
{
|
||||
return mDisplay;
|
||||
}
|
||||
|
||||
bool App::EventRecieved( GenericEvent& e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4,10 +4,13 @@
|
||||
#include <string>
|
||||
|
||||
#include "Aeon/Core/Display.hpp"
|
||||
#include "Aeon/Core/Events.hpp"
|
||||
#include "Aeon/Input/Input.hpp"
|
||||
|
||||
namespace Aeon::Core {
|
||||
|
||||
class App {
|
||||
class App : public EventListener
|
||||
{
|
||||
public:
|
||||
App( const DisplayProperties& props );
|
||||
|
||||
@@ -17,10 +20,17 @@ public:
|
||||
void PopLayer();
|
||||
|
||||
const Display& GetDisplay();
|
||||
|
||||
bool EventRecieved( GenericEvent& e ) override;
|
||||
|
||||
private:
|
||||
|
||||
Display mDisplay;
|
||||
|
||||
Aeon::Input::Input mInput;
|
||||
|
||||
private:
|
||||
|
||||
bool mSIGTERM = false;
|
||||
|
||||
};
|
||||
|
||||
@@ -10,7 +10,7 @@ Display::Display()
|
||||
: mWindow( nullptr )
|
||||
, mContext( NULL )
|
||||
{
|
||||
|
||||
RegisterAsSink( "ENGINE_DISPLAY_CORE", 0 );
|
||||
}
|
||||
|
||||
Display::~Display()
|
||||
@@ -77,3 +77,8 @@ void Display::Destroy()
|
||||
mWidth = 0;
|
||||
mHeight = 0;
|
||||
}
|
||||
|
||||
bool Display::EventRecieved( GenericEvent& e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ extern "C" {
|
||||
#include <ThirdParty/glad.h>
|
||||
}
|
||||
|
||||
#include "Aeon/Core/Events.hpp"
|
||||
|
||||
namespace Aeon::Core {
|
||||
|
||||
struct DisplayProperties
|
||||
@@ -23,7 +25,7 @@ struct DisplayProperties
|
||||
VSync( vSync ) { }
|
||||
};
|
||||
|
||||
class Display
|
||||
class Display : public EventListener
|
||||
{
|
||||
public:
|
||||
Display();
|
||||
@@ -36,6 +38,8 @@ public:
|
||||
|
||||
void Destroy();
|
||||
|
||||
bool EventRecieved( GenericEvent& e ) override;
|
||||
|
||||
private:
|
||||
SDL_Window* mWindow;
|
||||
SDL_GLContext mContext;
|
||||
|
||||
@@ -41,7 +41,7 @@ EventDispatcher::EventDispatcher()
|
||||
|
||||
EventDispatcher::EventDispatcher( std::string system )
|
||||
{
|
||||
|
||||
RegisterAsSource( system );
|
||||
}
|
||||
|
||||
EventDispatcher::~EventDispatcher()
|
||||
|
||||
@@ -22,28 +22,37 @@
|
||||
|
||||
namespace Aeon::Core {
|
||||
|
||||
/*
|
||||
* Engine event systems / type
|
||||
* ENGINE_SYSTEM_CORE - start, stop, pause, etc
|
||||
* ENGINE_DISPLAY_CORE - window open, window close, etc
|
||||
* DISPLAY_RESIZE (x, y) - rezise to x, y being new w, h
|
||||
* DISPLAY_MOVE (x, y) - move to x, y
|
||||
* DISPLAY_SHOW - no data
|
||||
* DISPLAY_HIDE - no data
|
||||
* DISPLAY_MINIMISED - no data
|
||||
* DISPLAY_MAXIMISED - no data
|
||||
* DISPLAY_CLOSED - no data
|
||||
* DISPLAY_MOUSE_ENTER - no data
|
||||
* DISPLAY_MOUSE_LEAVE - no data
|
||||
* DISPLAY_FOCUS - no data
|
||||
* DISPLAY_OUT_OF_FOCUS - no data
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
struct GenericEvent
|
||||
{
|
||||
std::string Source;
|
||||
std::string Sink;
|
||||
std::string System;
|
||||
std::string Type;
|
||||
// can be empty
|
||||
std::string Data;
|
||||
|
||||
bool Handled = false;
|
||||
|
||||
GenericEvent() { }
|
||||
};
|
||||
|
||||
struct KeyboardEvent : public GenericEvent
|
||||
{
|
||||
int KeyCode;
|
||||
int KeyStatus;
|
||||
|
||||
KeyboardEvent( int keyCode, int keyStatus )
|
||||
: GenericEvent()
|
||||
, KeyCode(keyCode)
|
||||
, KeyStatus(keyStatus) { }
|
||||
};
|
||||
|
||||
class EventListener
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#include "Aeon/Input/Input.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "Aeon/Core/Events.hpp"
|
||||
|
||||
using Aeon::Input::Input;
|
||||
|
||||
Input::Input()
|
||||
: mEvent()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -15,6 +19,67 @@ Input::~Input()
|
||||
|
||||
void Input::PollInput()
|
||||
{
|
||||
while ( SDL_PollEvent( &mEvent ) )
|
||||
{
|
||||
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 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Uint8* state = (Uint8*)SDL_GetKeyboardState( NULL );
|
||||
//std::cout << state << std::endl;
|
||||
//std::cout << std::endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,23 @@
|
||||
#ifndef AEON_INPUT_INPUT_H_
|
||||
#define AEON_INPUT_INPUT_H_
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
#include "Aeon/Singleton.hpp"
|
||||
|
||||
namespace Aeon::Input {
|
||||
|
||||
class Input : public Aeon::Helpers::Singleton<Input>
|
||||
|
||||
|
||||
class Input
|
||||
{
|
||||
public:
|
||||
Input();
|
||||
~Input();
|
||||
|
||||
void PollInput();
|
||||
private:
|
||||
SDL_Event mEvent;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <Aeon/Aeon.hpp>
|
||||
#include <Aeon/Core/Events.hpp>
|
||||
|
||||
class ExampleGame : public Aeon::Core::App
|
||||
class ExampleGame : public Aeon::Core::App
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -24,58 +24,10 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class SomeSystem : public Aeon::Core::EventListener
|
||||
{
|
||||
public:
|
||||
SomeSystem()
|
||||
{
|
||||
RegisterAsSink( "System1", 0 );
|
||||
}
|
||||
|
||||
~SomeSystem() override
|
||||
{
|
||||
DeRegisterAsSink( "System1" );
|
||||
}
|
||||
|
||||
bool EventRecieved( Aeon::Core::GenericEvent& e ) override
|
||||
{
|
||||
std::cout << e.Source << ":" << e.Type << ":" << e.Sink << ":" << e.Data << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class SomeOtherSystem : public Aeon::Core::EventListener
|
||||
{
|
||||
public:
|
||||
SomeOtherSystem()
|
||||
{
|
||||
RegisterAsSink( "System1", 0 );
|
||||
}
|
||||
|
||||
~SomeOtherSystem() override
|
||||
{
|
||||
DeRegisterAsSink( "System1" );
|
||||
}
|
||||
|
||||
bool EventRecieved( Aeon::Core::GenericEvent& e ) override
|
||||
{
|
||||
std::cout << e.Source << ":" << e.Type << ":" << e.Sink << ":" << e.Data << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
ExampleGame game;
|
||||
|
||||
SomeSystem system1;
|
||||
SomeOtherSystem system2;
|
||||
|
||||
Aeon::Core::EventDispatcher eventDispatcher;
|
||||
eventDispatcher.RegisterAsSource( "System1" );
|
||||
eventDispatcher.Dispatch( "bro" );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user