51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <cstdint>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#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<Scene> 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<Text> placeholder_text_;
|
|
std::shared_ptr<Text> copyright_text_;
|
|
std::shared_ptr<Surface> title_bg_surface_;
|
|
std::shared_ptr<Surface> game_logo_surface_;
|
|
std::shared_ptr<Surface> mini_logo_surface_;
|
|
std::shared_ptr<Surface> 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<Scene>;
|
|
};
|