c32a880b6a
Substitueix el bucle blocant main() → Director::run() → escena::run() per SDL_AppInit/Iterate/Event/Quit. Cada escena implementa ara iterate() (un frame) i handleEvent() (un event) sota una interfície base Scene. - Director gestiona l'escena activa i les transicions via switchToActiveScene() - Setup/cleanup que estava al voltant del while de run() mogut a ctor/dtor (música de Game/Ending/Ending2, volum de LoadingScreen) - GlobalEvents ja no processa SDL_EVENT_QUIT (ho fa Director::handleEvent) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
33 lines
1.2 KiB
C++
33 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory> // Para unique_ptr
|
|
#include <string> // Para string
|
|
|
|
#include "game/scene_manager.hpp" // Para SceneManager::Scene
|
|
#include "game/scenes/scene.hpp" // Para Scene base
|
|
|
|
class Director {
|
|
public:
|
|
Director(); // Constructor: inicialitza sistemes i crea l'escena inicial
|
|
~Director(); // Destructor
|
|
|
|
// SDL3 Callback API: un frame i un event
|
|
auto iterate() -> SDL_AppResult;
|
|
auto handleEvent(const SDL_Event& event) -> SDL_AppResult;
|
|
|
|
private:
|
|
// --- Variables ---
|
|
std::string executable_path_; // Path del ejecutable
|
|
std::string system_folder_; // Carpeta del sistema donde guardar datos
|
|
|
|
std::unique_ptr<Scene> active_scene_; // Escena activa
|
|
SceneManager::Scene current_scene_{SceneManager::Scene::LOGO}; // Tipus d'escena activa
|
|
|
|
// --- Funciones ---
|
|
void createSystemFolder(const std::string& folder); // Crea la carpeta del sistema donde guardar datos
|
|
void setFileList(); // Carga la configuración de assets desde assets.yaml
|
|
void switchToActiveScene(); // Construeix l'escena segons SceneManager::current
|
|
};
|