60 lines
2.0 KiB
C++
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};
|
|
};
|