#ifndef __ENGINE_H__ #define __ENGINE_H__ #include #include #include #include #include #include #include "EngineConfig.h" #include "states/StateManager.h" #include namespace py = pybind11; class Engine { public: Engine(); ~Engine(); void Run(); // Getters / Setters SDL_Renderer* GetRenderer() const { return renderer; } SDL_Window* GetWindow() const { return window; } bool IsRunning() const { return isRunning; } void StopRunning() { isRunning = false; } // StateManager StateManager stateManager; // Safe State transition void RequestStateChange(std::unique_ptr newState); void RequestPopState(); private: SDL_Window* window = nullptr; SDL_Renderer* renderer = nullptr; bool isRunning = true; SDL_Rect camera = { 0, 0, EngineConfig::DEFAULT_WINDOW_WIDTH, EngineConfig::DEFAULT_WINDOW_HEIGHT }; // General functions void InitSDL(); void InitImGui(); void InitAudio(); void HandleEvents(); void Update(float dt); void Render(); // Python support void InitPython(); void ShutdownPython(); void RunPythonScript(const std::string& filename); std::unique_ptr pythonInterpreter; // StateManager std::unique_ptr pendingNewState = nullptr; bool pendingPop = false; }; #endif