// hud.hpp - Configuració visual del HUD (marcador, etc.) // © 2026 JailDesigner #pragma once #include namespace Defaults::Hud { // Marcador (scoreboard inferior). Usado por GameScene::drawScoreboard() // y por la animación de entrada en init_hud_animator. constexpr float SCOREBOARD_TEXT_SCALE = 0.85F; constexpr float SCOREBOARD_TEXT_SPACING = 0.0F; // Esquema de color del marcador: "per jugador + sistema". Cada jugador usa // el SEU color (parella brillant/atenuat) en tot el seu bloc (punts + vides); // el nivell central va sempre en verd de sistema. Colors plans i purs: el // glow/bloom el posa el shader de postpro, NO s'horneja al color. Amb // alpha=255 el line_renderer usa el color directament sense caure al fallback // verd (Rendering::DEFAULT_LINE_COLOR). namespace Colors { // Jugador 1 → cian. constexpr SDL_Color P1_BRIGHT = {.r = 41, .g = 231, .b = 255, .a = 255}; // #29E7FF constexpr SDL_Color P1_DIM = {.r = 12, .g = 90, .b = 102, .a = 255}; // #0C5A66 // Jugador 2 → groc. constexpr SDL_Color P2_BRIGHT = {.r = 255, .g = 226, .b = 58, .a = 255}; // #FFE23A constexpr SDL_Color P2_DIM = {.r = 110, .g = 98, .b = 16, .a = 255}; // #6E6210 // Nivell / sistema → verd. constexpr SDL_Color LEVEL_BRIGHT = {.r = 77, .g = 255, .b = 102, .a = 255}; // #4DFF66 constexpr SDL_Color LEVEL_DIM = {.r = 29, .g = 107, .b = 44, .a = 255}; // #1D6B2C // Colors legacy (es retiren en migrar el render del marcador). constexpr SDL_Color SCORE_P1 = {.r = 255, .g = 255, .b = 255, .a = 255}; // blanc constexpr SDL_Color SCORE_P2 = {.r = 255, .g = 130, .b = 200, .a = 255}; // rosa magenta constexpr SDL_Color LIVES = {.r = 255, .g = 180, .b = 60, .a = 255}; // ambre / or constexpr SDL_Color LEVEL = {.r = 155, .g = 255, .b = 175, .a = 255}; // verd sistema } // namespace Colors // Vides representades com a icones de la nau (reutilitza la shape de la nau // escalada, no un número). Mides derivades de l'alçada del marcador // (Defaults::Zones::SCOREBOARD_BOTTOM_H) per encaixar-hi sempre. namespace Lives { constexpr float ICON_HEIGHT_RATIO = 0.45F; // alçada de la icona com a fracció de l'alçada del marcador constexpr float ICON_SPACING_FACTOR = 1.35F; // separació centre-a-centre = alçada_icona × factor constexpr int MAX_ICONS = 5; // límit d'icones dibuixades (acota l'ample del bloc) } // namespace Lives // Disposició del marcador: bloc P1 ancorat a l'esquerra, bloc P2 a la dreta // (mateix ordre intern "punts vides", no mirrored) i nivell centrat. Els // blocs s'alineen amb les verticals del PLAYAREA. namespace Layout { constexpr float BLOCK_INNER_GAP = 24.0F; // separació punts↔vides dins d'un bloc (px lògics) } // namespace Layout // Animación de entrada del HUD (init_hud_animator). namespace InitAnim { // Spawn vertical de la nave: 50 px bajo la PLAYAREA (sale desde fuera). constexpr float SHIP_SPAWN_Y_OFFSET = 50.0F; // Bordes: ratios de las tres fases (top → laterales → bottom). constexpr float BORDER_PHASE_1_END = 0.33F; // Fin de la fase top constexpr float BORDER_PHASE_2_END = 0.66F; // Fin de la fase laterales } // namespace InitAnim // Indicadores ("tips") sobre los enemigos enganchados a la nave. // Offset local al frame de la nave (apunta hacia delante, eje Y negativo). namespace Tips { constexpr float LOCAL_X = 0.0F; constexpr float LOCAL_Y = -12.0F; } // namespace Tips // Overlay de debug (FPS, métriques) en coordenades lògiques (1280×720). namespace DebugOverlay { constexpr float X = 30.0F; constexpr float Y_FPS = 24.0F; constexpr float FPS_LINE_HEIGHT = 28.0F; // separació després del FPS (scale 0.7 → ~28 px) constexpr float LINE_HEIGHT = 18.0F; // separació entre línies (scale 0.4 → ~16 px alt) constexpr float FPS_SCALE = 0.7F; // FPS més gran que la resta constexpr float TEXT_SCALE = 0.4F; constexpr float TEXT_SPACING = 2.0F; constexpr float BRIGHTNESS = 1.0F; constexpr float FPS_UPDATE_INTERVAL = 0.5F; // Cadencia d'actualització del FPS visible constexpr SDL_Color COLOR = {.r = 255, .g = 215, .b = 0, .a = 255}; // #FFD700 — daurat } // namespace DebugOverlay } // namespace Defaults::Hud