#pragma once #include "Common.h" #include "Scene.h" #include "McRFPy_API.h" #include "IndexTexture.h" #include "Timer.h" #include "PyCallable.h" #include "McRogueFaceConfig.h" #include "HeadlessRenderer.h" #include class GameEngine { std::unique_ptr window; std::unique_ptr headless_renderer; sf::RenderTarget* render_target; sf::Font font; std::map scenes; bool running = true; bool paused = false; int currentFrame = 0; sf::View visible; sf::Clock clock; float frameTime; std::string window_title; bool headless = false; McRogueFaceConfig config; sf::Clock runtime; //std::map timers; std::map> timers; void testTimers(); public: std::string scene; GameEngine(); GameEngine(const McRogueFaceConfig& cfg); ~GameEngine(); Scene* currentScene(); void changeScene(std::string); void createScene(std::string); void quit(); void setPause(bool); sf::Font & getFont(); sf::RenderWindow & getWindow(); sf::RenderTarget & getRenderTarget(); void run(); void sUserInput(); int getFrame() { return currentFrame; } float getFrameTime() { return frameTime; } sf::View getView() { return visible; } void manageTimer(std::string, PyObject*, int); void setWindowScale(float); bool isHeadless() const { return headless; } // global textures for scripts to access std::vector textures; // global audio storage std::vector sfxbuffers; sf::Music music; sf::Sound sfx; std::shared_ptr>> scene_ui(std::string scene); };