feat(ui): captura F9, tema a data/ui.yaml i retocs estètics
Captura de pantalla amb F9: volca el canvas ARGB a screenshots/scr_<timestamp>.png via stb_image_write. Tot el tema d'UI (colors, timings, fonts, flag hud.bg_enabled) passa a data/ui.yaml via UiConfig; els valors de Defaults::UI queden com a fallbacks si el fitxer falta o li manca alguna clau. Retocs estètics: paleta "uzebox" per a la UI, strings del HUD (P1/P2/V/T/PIRAMIDE/SALA) traduïts a locale, i fons del marcador opcional amb backdrop continu de franja per evitar el trencament visual durant el shake o l'animació d'entrada dels panells.
This commit is contained in:
1 parent
82b229222f
commit
dc8a7723e3
26 files changed
+2593
-210
No files matched your search
+6
-15
@@ -5,9 +5,9 @@
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "core/rendering/surface.hpp" // Palette
|
||||
#include "game/entities/event_bus.hpp"
|
||||
|
||||
class Text;
|
||||
@@ -41,7 +41,7 @@ class Hud {
|
||||
WIN,
|
||||
EMPTY };
|
||||
|
||||
Hud(EventBus& bus, std::shared_ptr<Text> font, const Palette& ui_palette);
|
||||
Hud(EventBus& bus, std::shared_ptr<Text> font);
|
||||
~Hud();
|
||||
|
||||
Hud(const Hud&) = delete;
|
||||
@@ -89,15 +89,6 @@ class Hud {
|
||||
static constexpr int LINE1_Y = 4;
|
||||
static constexpr int LINE2_Y = 13;
|
||||
|
||||
// Durada de l'animació d'entrada — els tres blocs alhora, amb easing
|
||||
// outCubic. 400 ms és prou per a percebre el moviment sense fer
|
||||
// esperar massa al jugador.
|
||||
static constexpr int ENTRY_MS = 400;
|
||||
|
||||
// Durades per defecte d'efectes transitoris.
|
||||
static constexpr int FLASH_MS = 250;
|
||||
static constexpr int SHAKE_MS = 300;
|
||||
|
||||
// Vides inicials per jugador (placeholder fins que GameScene ho
|
||||
// configure des del Config del nivell).
|
||||
static constexpr int DEFAULT_LIVES = 3;
|
||||
@@ -112,8 +103,9 @@ class Hud {
|
||||
int h{0};
|
||||
|
||||
// Animació d'entrada: ms restants fins a quedar-se a la posició
|
||||
// final. Quan val 0 el bloc està quiet.
|
||||
int entry_ms_left{ENTRY_MS};
|
||||
// final. Quan val 0 el bloc està quiet. El Hud ctor l'inicialitza
|
||||
// amb la durada viva a data/ui.yaml (hud.entry_ms).
|
||||
int entry_ms_left{0};
|
||||
// Vector inicial des d'on entra: {-LEFT_W,0} per al bloc esquerre,
|
||||
// {0,-HEIGHT_PX} per al central i {+RIGHT_W,0} per al dret.
|
||||
int entry_offset_x{0};
|
||||
@@ -143,7 +135,7 @@ class Hud {
|
||||
|
||||
// Subrutines del mode `Idle` per als tres blocs. Reben el rectangle
|
||||
// ja desplaçat (x, y) on han d'escriure.
|
||||
void renderIdleSide(int x, int y, int w, const Block& blk, int player_index, const char* label) const;
|
||||
void renderIdleSide(int x, int y, int w, const Block& blk, int player_index, const std::string& label) const;
|
||||
void renderIdleCenter(int x, int y, int w) const;
|
||||
|
||||
// Calcula l'offset transitori (entrada + shake) en píxels per a un
|
||||
@@ -155,7 +147,6 @@ class Hud {
|
||||
std::vector<EventBus::SubId> subs_;
|
||||
|
||||
std::shared_ptr<Text> font_;
|
||||
Palette ui_palette_{};
|
||||
|
||||
std::array<Block, 3> blocks_;
|
||||
std::array<PlayerStats, 2> players_;
|
||||
|
||||
Reference in new issue
Block a user