feat(hud): marcador de la franja superior amb 3 blocs i animació d'entrada

This commit is contained in:
JailDesigner committed 2026-04-23 23:46:41 +02:00
1 parent 67ecb704d2
commit 82b229222f
6 files changed
+474 -1

No files matched your search

+21
View File
@@ -29,6 +29,7 @@
#include "game/entities/player.hpp"
#include "game/map/map.hpp"
#include "game/options.hpp"
#include "game/ui/hud.hpp"
#include "game/ui/ui_palette.hpp"
#include "utils/defaults.hpp"
#include "utils/defines.hpp"
@@ -139,6 +140,16 @@ GameScene::GameScene(Config config)
// sarcòfags passa per `tile_painted`.
players_.back()->setEventBus(&entity_manager_.getBus());
// Marcador (HUD) de la franja superior. Reutilitza la font 8bithud i
// la paleta "ui" ja precarregades pel Director — no toca disc des
// d'aquí. Subscrit al bus per reaccionar a `player_hit`,
// `level_complete`, etc. amb shake/flash i futurs canvis de mode.
const std::string HUD_FONT_GIF_KEY = std::string(Defaults::UI::Font::HUD_NAME) + ".gif";
auto hud_font_surface = Resource::Cache::get().getSurface(HUD_FONT_GIF_KEY);
auto hud_font = std::make_shared<Text>(hud_font_surface, Defaults::UI::Font::HUD_FNT);
hud_font->setDefaultKerning(Defaults::UI::Font::HUD_KERNING);
hud_ = std::make_unique<Hud>(entity_manager_.getBus(), hud_font, Resource::Cache::get().getPalette("ui"));
// Música de fons en bucle infinit. El track ja està al Resource::Cache
// (preload al Director), així que playMusic només mou el punter cap a
// jail_audio i obri l'stream. Audio::get() està garantit no-null:
@@ -236,6 +247,11 @@ void GameScene::update(int delta_ms) {
editor_.update(delta_ms, tilemap_);
#endif
// El HUD continua avançant les seues animacions encara que el món
// estigui congelat (pausa o editor): així l'animació d'entrada acaba
// sola i quan es despausa ja està al seu lloc, igual que el Notifier.
if (hud_) { hud_->update(delta_ms); }
RenderInfo::get().update(delta_ms, Options::buildRenderInfoFrame(UiColor::RENDER_INFO_TEXT, UiColor::RENDER_INFO_SHADOW));
Notifier::get().update(delta_ms);
}
@@ -291,6 +307,11 @@ void GameScene::render() {
r.player->render();
}
}
// HUD: a sobre dels actors perquè la franja superior tape qualsevol
// sprite que (durant l'animació d'entrada) puga sortir més amunt
// del playfield. S'amaga en mode editor (l'editor edita el tilemap;
// el HUD distrauria) però segueix actualitzant-se per fora.
if (hud_) { hud_->render(); }
}
#ifdef _DEBUG