#ifndef ENGINE_HPP_ #define ENGINE_HPP_ #include <entityx/entityx.h> #include <events.hpp> class Engine : public entityx::Receiver<Engine> { private: bool gameRunning; public: entityx::SystemManager systems; explicit Engine(void); void init(void); void render(entityx::TimeDelta dt); void update(entityx::TimeDelta dt); template<typename T> inline T* getSystem(void) { return dynamic_cast<T*>(systems.system<T>().get()); } /*void configure(entityx::EventManager &ev) { (void)ev; }*/ inline void receive(const GameEndEvent &gee) { gameRunning = !(gee.really); } inline bool shouldRun(void) const { return gameRunning; } }; namespace game { extern entityx::EventManager events; extern entityx::EntityManager entities; extern Engine engine; inline void endGame(void) { events.emit<GameEndEvent>(); } } #endif // ENGINE_HPP_