Files
aee-arcade/source/game/scenes/game_scene.hpp
T

60 lines
2.0 KiB
C++

#pragma once
#include <memory>
#include <string>
#include <vector>
#include "core/scene/scene.hpp"
#include "game/entities/entity_manager.hpp"
#include "game/map/tilemap.hpp"
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<std::unique_ptr<Player>> 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<Text> pause_font_;
bool paused_{false};
};