feat(level-manager): HUD i text d'INTRO segueixen el LevelManager
HUD: la GameScene crida hud_->setPyramidRoom amb els valors del
LevelManager al ctor i a cada loadRoom — el marcador deixa de
mostrar 1/1 fix i s'actualitza en avançar de sala, en saltar amb
[/] i en arrencar amb starting_level del debug.yaml.
INTRO a dues línies: substitueix la clau game.room_intro per
game.room_intro_pyramid ("Piramide {p}") i game.room_intro_room
("Sala {r}") als locale ca/en. RoomFsm::formatRoomTitle(int)
desapareix i el reemplacen formatIntroPyramidLine(int) +
formatIntroRoomLine(int). renderRoomText es refactoritza per
dibuixar les dues línies (piràmide damunt, sala davall) amb
writeDX independents — comparteixen animació ara mateix però el
disseny ja les deixa preparades per ser desacoblades en el futur.
Drive-by: elimina el membre room_index_ de GameScene; les tres
ubicacions que el sincronitzaven amb el LevelManager (ctor,
advanceToNextRoom, salt debug) ja no fan falta — renderRoomText
i el HUD pregunten directament al singleton, evitant qualsevol
mirror local desincronitzable.
Test: T9/T10 actualitzats per a les dues noves formatadores.
This commit is contained in:
1 parent
b18bd4d021
commit
e2f6d326aa
7 files changed
+149
-99
No files matched your search
@@ -107,14 +107,27 @@ namespace RoomFsm {
|
||||
return current;
|
||||
}
|
||||
|
||||
auto formatRoomTitle(int n) -> std::string {
|
||||
auto tpl = Locale::get().text("game.room_intro");
|
||||
constexpr std::string_view PLACEHOLDER = "{n}";
|
||||
auto pos = tpl.find(PLACEHOLDER);
|
||||
if (pos != std::string::npos) {
|
||||
tpl.replace(pos, PLACEHOLDER.size(), std::to_string(n));
|
||||
namespace {
|
||||
// Substitueix la primera ocurrència de `placeholder` dins de `tpl`
|
||||
// pel valor d'`n` convertit a string. Utilitzat per les dues
|
||||
// formatadores d'INTRO; si la clau del Locale no porta el
|
||||
// placeholder (traducció buida o ja substituïda), retorna la
|
||||
// plantilla intacta.
|
||||
auto substitute(std::string tpl, std::string_view placeholder, int n) -> std::string {
|
||||
auto pos = tpl.find(placeholder);
|
||||
if (pos != std::string::npos) {
|
||||
tpl.replace(pos, placeholder.size(), std::to_string(n));
|
||||
}
|
||||
return tpl;
|
||||
}
|
||||
return tpl;
|
||||
} // namespace
|
||||
|
||||
auto formatIntroPyramidLine(int pyramid) -> std::string {
|
||||
return substitute(Locale::get().text("game.room_intro_pyramid"), "{p}", pyramid);
|
||||
}
|
||||
|
||||
auto formatIntroRoomLine(int room) -> std::string {
|
||||
return substitute(Locale::get().text("game.room_intro_room"), "{r}", room);
|
||||
}
|
||||
|
||||
auto stateName(State s) -> const char* {
|
||||
|
||||
Reference in new issue
Block a user