#pragma once #include #include #include #include "scene_context.hpp" class Scene; class SDLManager; namespace System { class DebugOverlay; } class Director { public: explicit Director(std::vector const& args); ~Director(); auto run() -> int; // Main game loop private: std::string executable_path_; std::string system_folder_; static auto checkProgramArguments(std::vector const& args) -> std::string; void createSystemFolder(const std::string& folder); // Construye la escena correspondiente al tipo solicitado. Retorna // nullptr para EXIT u otros valores no constructibles. static auto buildScene(SceneManager::SceneContext::SceneType type, SDLManager& sdl, SceneManager::SceneContext& context) -> std::unique_ptr; // Ejecuta el bucle de frames de UNA escena hasta que scene.isFinished() // sea true. Maneja delta_time, eventos (globales + escena), update y draw. // El debug_overlay es global a todas las escenas; el Director lo posee. static void runFrameLoop(Scene& scene, SDLManager& sdl, SceneManager::SceneContext& context, System::DebugOverlay& debug_overlay); };