Files
Aeon/Aeon/Aeon.hpp
2022-06-08 15:56:36 +00:00

63 lines
1.3 KiB
C++

#ifndef AEON_AEON_H_
#define AEON_AEON_H_
#include <Aeon/Includes.hpp>
#include <Aeon/Core/Display.hpp>
#include <Aeon/Core/Events.hpp>
#include <Aeon/Core/GameLayer.hpp>
#include <Aeon/Input/Input.hpp>
#include <Aeon/Entity/EntityController.hpp>
namespace Core
{
// NOTE: Derivations / children of "App" cannot attatch
// event listeners to themselves, the programmer must
// first add a gamelayer to handle events
// App stores the GLOBAL gamestate
// It is OK to store this globally
// every component needs to use state
class App : public EventListener
{
public:
App( const AppProperties& props, const DisplayProperties& dispProps );
void Run();
const Display& GetDisplay();
// Layers, once assigned, until poped are assumed to
// never change their spot in the layer hierarchy
void PushLayer( GameLayer* layer );
void PushTopLayer( GameLayer* layer );
void PushDebugLayer( GameLayer* layer );
bool EventRecieved( GenericEvent& e ) override;
public:
void PopLayer();
void PopTopLayer();
void PopDebugLayer();
private:
Display mDisplay;
EC::EntityRegistry mEntityController;
Input::InputController& mInput;
// Game layers from z order
std::vector<GameLayer*> mGameLayers;
std::vector<GameLayer*> mTopLayers;
std::vector<GameLayer*> mDebugLayers;
private:
bool mSIGTERM = false;
};
}
#endif