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
@@ -23,6 +23,7 @@
|
||||
#include "core/resources/resource_cache.hpp"
|
||||
#include "core/resources/resource_helper.hpp"
|
||||
#include "core/system/event_buffer.hpp"
|
||||
#include "core/ui/ui_config.hpp"
|
||||
#include "external/fkyaml_node.hpp"
|
||||
#include "game/entities/entity.hpp"
|
||||
#include "game/entities/event_bus.hpp"
|
||||
@@ -30,7 +31,6 @@
|
||||
#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"
|
||||
|
||||
@@ -144,11 +144,11 @@ GameScene::GameScene(Config config)
|
||||
// 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";
|
||||
const std::string HUD_FONT_GIF_KEY = UiConfig::get().hudFont().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"));
|
||||
auto hud_font = std::make_shared<Text>(hud_font_surface, UiConfig::get().hudFont().fnt);
|
||||
hud_font->setDefaultKerning(UiConfig::get().hudFont().kerning);
|
||||
hud_ = std::make_unique<Hud>(entity_manager_.getBus(), hud_font);
|
||||
|
||||
// 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
|
||||
@@ -159,10 +159,10 @@ GameScene::GameScene(Config config)
|
||||
// Font de l'overlay de pausa: reutilitzem la Surface ja cachejada al
|
||||
// Director (PLACEHOLDER_NAME + ".gif"). Text només parseja el .fnt a
|
||||
// l'arrencada de l'escena, un sol cop.
|
||||
const std::string PAUSE_FONT_KEY = std::string(Defaults::UI::Font::PLACEHOLDER_NAME) + ".gif";
|
||||
const std::string PAUSE_FONT_KEY = UiConfig::get().placeholderFont().name + ".gif";
|
||||
auto pause_surface = Resource::Cache::get().getSurface(PAUSE_FONT_KEY);
|
||||
pause_font_ = std::make_shared<Text>(pause_surface, Defaults::UI::Font::PLACEHOLDER_FNT);
|
||||
pause_font_->setDefaultKerning(Defaults::UI::Font::PLACEHOLDER_KERNING);
|
||||
pause_font_ = std::make_shared<Text>(pause_surface, UiConfig::get().placeholderFont().fnt);
|
||||
pause_font_->setDefaultKerning(UiConfig::get().placeholderFont().kerning);
|
||||
}
|
||||
|
||||
GameScene::~GameScene() = default;
|
||||
@@ -252,12 +252,12 @@ void GameScene::update(int delta_ms) {
|
||||
// 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));
|
||||
RenderInfo::get().update(delta_ms, Options::buildRenderInfoFrame(UiConfig::get().renderInfoText(), UiConfig::get().renderInfoShadow()));
|
||||
Notifier::get().update(delta_ms);
|
||||
}
|
||||
|
||||
void GameScene::render() {
|
||||
const auto BG_ARGB = Resource::Cache::get().getPalette("ui")[UiColor::CANVAS_BG];
|
||||
const auto BG_ARGB = Resource::Cache::get().getPalette("ui")[UiConfig::get().canvasBg()];
|
||||
Screen::get().fillRect(0, 0, GameCanvas::WIDTH, GameCanvas::HEIGHT, BG_ARGB);
|
||||
|
||||
// Mapa visual: textura prerenderitzada del tilemap. Els sarcòfags
|
||||
@@ -334,7 +334,7 @@ void GameScene::render() {
|
||||
Y,
|
||||
TEXT,
|
||||
PAUSE_KERNING,
|
||||
Defaults::UI::NOTIFICATION_TEXT,
|
||||
UiConfig::get().notificationText(),
|
||||
STROKE_DIST,
|
||||
OUTLINE_WHITE);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user