refactor(game): unifica renderitzat dels rètols de transició via TextScreenSpec
This commit is contained in:
1 parent
fa27308897
commit
2523661c8f
2 files changed
+127
-154
No files matched your search
@@ -372,6 +372,33 @@ class GameScene : public Scene {
|
||||
void drawRoomTextPanel(int center_y, int panel_height) const;
|
||||
void drawRoomTextLine(const std::string& text, int x, int y, std::uint8_t fill_color, std::uint8_t outline_color) const;
|
||||
|
||||
// Especificació declarativa d'un rètol de transició de dues línies
|
||||
// amb panel translúcid. ROOM_INTRO, ROOM_OUTRO, CONTINUE? i GAME OVER
|
||||
// comparteixen la mateixa coreografia (panel + dues línies en
|
||||
// direccions oposades) i només divergeixen en el text, els índexs
|
||||
// de fase i les durades. `phase_enter = -1` desactiva l'animació
|
||||
// d'entrada (cas GAME_OVER, que apareix amb el panel ja amunt).
|
||||
// Una `lineN` buida indica que la línia no s'ha de pintar (cas
|
||||
// CONTINUE? fora del hold, on la línia 2 mostra el countdown).
|
||||
struct TextScreenSpec {
|
||||
std::string line1;
|
||||
std::string line2;
|
||||
int phase_enter{0};
|
||||
int phase_hold{0};
|
||||
int phase_exit{0};
|
||||
int dur_enter_ms{0};
|
||||
int dur_exit_ms{0};
|
||||
int line_gap_px{0};
|
||||
};
|
||||
|
||||
// Orquestrador unificat dels quatre rètols de transició. Pinta el
|
||||
// panel + dues línies a partir de `spec`, deixant la decisió de
|
||||
// QUÈ pintar (text, fases, durades) als callers `renderRoomText`
|
||||
// i `renderGameOverText`. Sense estat propi: la fase i temps
|
||||
// arriben pels paràmetres perquè la mateixa funció serveix les
|
||||
// dues sub-FSMs (RoomFsm i GameOverFsm).
|
||||
void renderTextScreen(const TextScreenSpec& spec, int phase, int elapsed_ms) const;
|
||||
|
||||
// Posició inicial dels jugadors derivada de `Map::door_col`. Tots
|
||||
// els jugadors comparteixen Y (centre del corredor exterior superior);
|
||||
// X depèn del nombre actiu: amb un jugador queda centrat sota la
|
||||
|
||||
Reference in new issue
Block a user