#pragma once #include #include #include #include "core/scene/scene.hpp" #include "game/entities/entity_manager.hpp" #include "game/map/tilemap.hpp" #ifdef _DEBUG #include "game/editor/editor.hpp" #endif class Player; class Text; class GameScene : public Scene { public: // Conjunt de rutes que defineixen una piràmide concreta (mapa + tilemap // + sprites del jugador + música). Cada piràmide serà un Config distint; // `defaultConfig()` retorna la primera (Defaults::Pyramid). struct Config { std::string map_yaml; std::string player_sprite; std::string player_yaml; std::string music_track; }; [[nodiscard]] static auto defaultConfig() -> Config; explicit GameScene(Config config = defaultConfig()); ~GameScene() override; void update(int delta_ms) override; void render() override; private: // Consumeix events d'aquest frame (F11 del KeyConfig "pause" o botó // START del gamepad primari) per alternar l'estat de pausa. Quan // s'activa, pausa la música; en reprendre, la reprén. void handlePauseInput(); Config config_; Tilemap tilemap_; // Gestor d'entitats del nivell (sarcòfags, porta, momia, antorxa, // etc.). Viu aquí perquè la seua vida coincideix amb la de la escena; // cada entitat del nivell es carrega al ctor via loadFromLevel. EntityManager entity_manager_; // Vector des del principi: AEE suportarà multijugador local; cada Player // té els seus propis Controls i entra al vector amb una crida extra. std::vector> players_; // Pausa de gameplay. Quan `paused_` és true, l'update de jugadors i // entitats es salta (el món es congela); l'input d'UI (GlobalInputs, // Notifier, RenderInfo) continua per no perdre hotkeys ni l'overlay de // debug. La font s'instancia des del Surface ja cachejat al Director // (cap altra escena l'allibera, així que l'accés és segur). std::shared_ptr pause_font_; bool paused_{false}; #ifdef _DEBUG // Editor modal del tilemap. Mútuament excloent amb la pausa: si `paused_` // la tecla de toggle de l'editor s'ignora, i viceversa. Quan // `editor_.active()` és true, saltem entitats i jugador (update i // render) i deixem el tilemap visible perquè es pugui editar. Editor editor_; #endif };