tweak(hud): marcador en tres blocs ancorats (P1 esquerra, P2 dreta, nivell centrat) amb color per jugador
This commit is contained in:
@@ -814,7 +814,7 @@ void GameScene::drawInitHudState() {
|
||||
}
|
||||
|
||||
if (score_progress > 0.0F) {
|
||||
Systems::InitHud::drawScoreboardAnimated(text_, buildScoreboardSegments(), score_progress);
|
||||
Systems::InitHud::drawScoreboardAnimated(text_, buildScoreboardData(), score_progress);
|
||||
}
|
||||
|
||||
if (ship1_progress > 0.0F && match_config_.player1_active && ships_[0].isActive()) {
|
||||
@@ -933,41 +933,29 @@ void GameScene::drawScoreboard() {
|
||||
text_.renderCentered(Locale::get().text("demo.banner"), CENTER, SCALE, SPACING);
|
||||
return;
|
||||
}
|
||||
Systems::InitHud::drawScoreboardSegmentsAt(text_, buildScoreboardSegments(), CENTER, SCALE, SPACING);
|
||||
Systems::InitHud::drawScoreboardAt(text_, buildScoreboardData(), CENTER.y, SCALE, SPACING);
|
||||
}
|
||||
|
||||
auto GameScene::buildScoreboardSegments() const -> Systems::InitHud::ScoreboardSegments {
|
||||
Systems::InitHud::ScoreboardSegments out;
|
||||
auto GameScene::buildScoreboardData() const -> Systems::InitHud::ScoreboardData {
|
||||
Systems::InitHud::ScoreboardData out;
|
||||
|
||||
// Puntuació P1 (6 dígits) - zeros si inactiu
|
||||
if (match_config_.player1_active) {
|
||||
std::string s = std::to_string(score_per_player_[0]);
|
||||
out.score_p1 = std::string(6 - std::min(6, static_cast<int>(s.length())), '0') + s;
|
||||
out.lives_p1 = (lives_per_player_[0] < 10)
|
||||
? "0" + std::to_string(lives_per_player_[0])
|
||||
: std::to_string(lives_per_player_[0]);
|
||||
} else {
|
||||
out.score_p1 = "000000";
|
||||
out.lives_p1 = "00";
|
||||
}
|
||||
// Puntuació a 6 dígits amb zeros a l'esquerra (inactiu → tot zeros, 0 vides).
|
||||
const auto FORMAT_SCORE = [](int score) {
|
||||
const std::string S = std::to_string(score);
|
||||
return std::string(6 - std::min(6, static_cast<int>(S.length())), '0') + S;
|
||||
};
|
||||
|
||||
// Nivell (2 dígits) amb label localitzat
|
||||
out.score_p1 = match_config_.player1_active ? FORMAT_SCORE(score_per_player_[0]) : "000000";
|
||||
out.lives_p1 = match_config_.player1_active ? lives_per_player_[0] : 0;
|
||||
out.score_p2 = match_config_.player2_active ? FORMAT_SCORE(score_per_player_[1]) : "000000";
|
||||
out.lives_p2 = match_config_.player2_active ? lives_per_player_[1] : 0;
|
||||
|
||||
// Nivell: etiqueta localitzada + número a 2 dígits (separats per pintar-los
|
||||
// amb tonalitats distintes).
|
||||
const uint8_t STAGE_NUM = stage_manager_->getCurrentStage();
|
||||
const std::string STAGE_STR = (STAGE_NUM < 10) ? "0" + std::to_string(STAGE_NUM)
|
||||
: std::to_string(STAGE_NUM);
|
||||
out.level = Locale::get().text("hud.level") + STAGE_STR;
|
||||
|
||||
// Puntuació P2 (6 dígits) - zeros si inactiu
|
||||
if (match_config_.player2_active) {
|
||||
std::string s = std::to_string(score_per_player_[1]);
|
||||
out.score_p2 = std::string(6 - std::min(6, static_cast<int>(s.length())), '0') + s;
|
||||
out.lives_p2 = (lives_per_player_[1] < 10)
|
||||
? "0" + std::to_string(lives_per_player_[1])
|
||||
: std::to_string(lives_per_player_[1]);
|
||||
} else {
|
||||
out.score_p2 = "000000";
|
||||
out.lives_p2 = "00";
|
||||
}
|
||||
out.level_label = Locale::get().text("hud.level");
|
||||
out.level_value = (STAGE_NUM < 10) ? "0" + std::to_string(STAGE_NUM)
|
||||
: std::to_string(STAGE_NUM);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
@@ -140,9 +140,9 @@ class GameScene final : public Scene {
|
||||
void drawPlayingState();
|
||||
void drawLevelCompletedState();
|
||||
|
||||
// [NEW] Helper del marcador: construeix els 5 segments (score_p1, vides_p1,
|
||||
// level, score_p2, vides_p2) per a render colorit per segment.
|
||||
[[nodiscard]] auto buildScoreboardSegments() const -> Systems::InitHud::ScoreboardSegments;
|
||||
// Helper del marcador: construeix les dades (puntuacions, vides i nivell)
|
||||
// per al render en blocs ancorats per jugador.
|
||||
[[nodiscard]] auto buildScoreboardData() const -> Systems::InitHud::ScoreboardData;
|
||||
|
||||
// Sub-pasos de update() (descompuestos en Fase 9d para reducir
|
||||
// complejidad cognitiva; cada uno es responsable de una sección).
|
||||
|
||||
Reference in New Issue
Block a user