tweak(hud): mode de vides commutable a Defaults (slots o dígits); per defecte dígits per veure'l
This commit is contained in:
@@ -125,6 +125,20 @@ namespace Systems::InitHud {
|
||||
return (static_cast<float>(NUM_SLOTS - 1) * digitPitch(scale, spacing)) + slotSize(scale);
|
||||
}
|
||||
|
||||
// Vides com a número de 2 dígits (zeros a l'esquerra).
|
||||
auto livesDigits(int lives) -> std::string {
|
||||
const std::string S = std::to_string(lives);
|
||||
return (lives < 10) ? "0" + S : S;
|
||||
}
|
||||
|
||||
// Ample del bloc de vides segons el mode (constant en ambdós casos).
|
||||
auto livesBlockWidth(float scale, float spacing) -> float {
|
||||
if (Defaults::Hud::LIVES_DISPLAY == Defaults::Hud::LivesDisplay::DIGITS) {
|
||||
return Graphics::VectorText::getTextWidth("00", scale, spacing);
|
||||
}
|
||||
return slotsBlockWidth(scale, spacing);
|
||||
}
|
||||
|
||||
// Dibuixa els slots de vides com a naus en miniatura en posicions FIXES.
|
||||
// Slot amb vida disponible (repuesto) → color encès; slot buit → atenuat.
|
||||
// Repuestos = vides − 1 (la nau en joc no compta com a slot).
|
||||
@@ -197,16 +211,38 @@ namespace Systems::InitHud {
|
||||
return digitPitch(scale, spacing);
|
||||
}
|
||||
|
||||
// Ample (constant) del bloc d'un jugador: 6 dígits + separació + slots.
|
||||
// Ample (constant) del bloc d'un jugador: 6 dígits + separació + vides.
|
||||
// No depèn de les vides, així res es recol·loca quan se'n perden.
|
||||
auto playerBlockWidth(float scale, float spacing) -> float {
|
||||
return Graphics::VectorText::getTextWidth("000000", scale, spacing) +
|
||||
blockInnerGap(scale, spacing) + slotsBlockWidth(scale, spacing);
|
||||
blockInnerGap(scale, spacing) + livesBlockWidth(scale, spacing);
|
||||
}
|
||||
|
||||
// Pinta el bloc de vides segons el mode: slots de nau o número de 2 dígits.
|
||||
void drawLivesBlock(Rendering::Renderer* renderer,
|
||||
const Graphics::VectorText& text,
|
||||
const std::shared_ptr<Graphics::Shape>& shape,
|
||||
int lives,
|
||||
bool active,
|
||||
SDL_Color bright,
|
||||
SDL_Color dim,
|
||||
float x_left,
|
||||
float top_y,
|
||||
float center_y,
|
||||
float scale,
|
||||
float spacing) {
|
||||
if (Defaults::Hud::LIVES_DISPLAY == Defaults::Hud::LivesDisplay::DIGITS) {
|
||||
// Mateixa regla que el nivell: zeros a l'esquerra atenuats.
|
||||
drawScore(text, livesDigits(lives), bright, dim, active, x_left, top_y, scale, spacing);
|
||||
return;
|
||||
}
|
||||
drawSlots(renderer, shape, lives, bright, dim, x_left, center_y, scale, spacing);
|
||||
}
|
||||
|
||||
// Pinta el bloc d'un jugador "punts vides" amb el seu color (punts amb
|
||||
// zeros atenuats, vides com a slots de nau). Ancorat a x_left (vora
|
||||
// esquerra del bloc), mateix ordre per a P1 i P2 (no mirrored).
|
||||
// zeros atenuats, vides com a slots de nau o número segons el mode).
|
||||
// Ancorat a x_left (vora esquerra del bloc), mateix ordre per a P1 i P2
|
||||
// (no mirrored).
|
||||
void drawPlayerBlock(Rendering::Renderer* renderer,
|
||||
const Graphics::VectorText& text,
|
||||
const std::shared_ptr<Graphics::Shape>& shape,
|
||||
@@ -220,14 +256,14 @@ namespace Systems::InitHud {
|
||||
float scale,
|
||||
float spacing) {
|
||||
// Jugador inactiu → bloc apagat: es dibuixa igual però tot atenuat
|
||||
// (punts i slots), com un display físic sense encendre.
|
||||
// (punts i vides), com un display físic sense encendre.
|
||||
const float TOP_Y = center_y - (Graphics::VectorText::getTextHeight(scale) / 2.0F);
|
||||
const float W_SCORE = Graphics::VectorText::getTextWidth(score, scale, spacing);
|
||||
|
||||
float x = x_left;
|
||||
drawScore(text, score, bright, dim, active, x, TOP_Y, scale, spacing);
|
||||
x += W_SCORE + blockInnerGap(scale, spacing);
|
||||
drawSlots(renderer, shape, lives, bright, dim, x, center_y, scale, spacing);
|
||||
drawLivesBlock(renderer, text, shape, lives, active, bright, dim, x, TOP_Y, center_y, scale, spacing);
|
||||
}
|
||||
|
||||
// Pinta el nivell centrat: etiqueta "NIVELL" encesa i el número com els
|
||||
|
||||
Reference in New Issue
Block a user