fix(game): HUD lives desde YAML, prompt P1 en single-P2, countdown 9..0 configurable

This commit is contained in:
JailDesigner committed 2026-05-08 21:14:33 +02:00
1 parent 78e164fce4
commit 5e862ceadc
9 files changed
+66 -29

No files matched your search

+14 -6
View File
@@ -69,9 +69,10 @@ namespace {
} // namespace
Hud::Hud(EventBus& bus, std::shared_ptr<Text> font)
Hud::Hud(EventBus& bus, std::shared_ptr<Text> font, int initial_lives)
: bus_(bus),
font_(std::move(font)) {
font_(std::move(font)),
initial_lives_(initial_lives) {
// Geometria fixa dels tres blocs. Sumen exactament GameCanvas::WIDTH.
// La durada de l'animació d'entrada ve de data/config/ui.yaml via UiConfig.
const int ENTRY_MS = UiConfig::get().hudEntryMs();
@@ -103,10 +104,17 @@ Hud::Hud(EventBus& bus, std::shared_ptr<Text> font)
.entry_offset_y = 0,
};
// Per defecte, P1 actiu (sempre n'hi ha al menys un); P2 inactiu fins
// que un segon Player s'uneix mitjançant `activatePlayer(2)`.
players_[0].active = true;
// Naixem amb tots dos slots inactius. El GameScene crida
// `activatePlayer(...)` per als que arrenquen en partida segons
// `starting_players` (un, l'altre, o tots dos). Els no activats
// mostraran el prompt "POLSA START / PER JUGAR" via `setJoinPrompt`
// fins que el jugador faci join. Les vides s'inicialitzen al valor
// del YAML del jugador — sense això, canviar `lives:` no es
// reflectiria al marcador.
players_[0].active = false;
players_[0].lives = initial_lives_;
players_[1].active = false;
players_[1].lives = initial_lives_;
// Subscripcions al bus de l'EntityManager. De moment només `player_hit`
// afecta el HUD visualment: decrementa vides, dispara flash i shake al
@@ -176,7 +184,7 @@ void Hud::activatePlayer(int player_one_based) {
if (player_one_based < 1 || player_one_based > 2) { return; }
auto& p = players_[static_cast<std::size_t>(player_one_based - 1)];
p.active = true;
p.lives = DEFAULT_LIVES;
p.lives = initial_lives_;
p.score = 0;
p.treasures = 0;
p.join_prompt = JoinPromptMode::NONE;