#pragma once #include #include #include #include #include "game/scenes/scene_flow.hpp" class Scene; class Surface; class Text; class Director { public: Director(); ~Director(); auto iterate() -> SDL_AppResult; private: std::string system_folder_; std::unique_ptr current_scene_; std::uint64_t last_ticks_ms_{0}; // Recursos compartits per la fabricació d'escenes. S'instancien una // vegada al ctor (parsejant fnt's, retenint shared_ptrs del // Resource::Cache) i `buildScene` els passa pel valor a cada nova // escena. No són `static`/Meyers perquè depenen de l'inici d'SDL i // de Resource::Cache. std::shared_ptr placeholder_text_; std::shared_ptr copyright_text_; std::shared_ptr title_bg_surface_; std::shared_ptr game_logo_surface_; std::shared_ptr mini_logo_surface_; std::shared_ptr logo_full_surface_; void createSystemFolder(); void processEvents(); static void processGamepadEvents(); static void processMenuInput(); void switchSceneIfRequested(); // Fabrica una escena nova a partir d'un identificador i els seus // paràmetres. És l'únic punt del codi que coneix com construir cada // tipus concret d'escena, així les escenes només declaren `ExitRequest` // i no s'enllacen entre si. [[nodiscard]] auto buildScene(SceneId id, const SceneParams& params) -> std::unique_ptr; };