// game.hpp - Dimensions del joc i regles de partida (vides, durades, colisions) // © 2026 JailDesigner #pragma once namespace Defaults::Game { // Dimensiones base del juego (coordenadas lógicas, 16:9) constexpr int WIDTH = 1280; constexpr int HEIGHT = 720; // Regles de partida constexpr int STARTING_LIVES = 3; // Initial lives constexpr float DEATH_DURATION = 3.0F; // Seconds of death animation constexpr float GAME_OVER_DURATION = 5.0F; // Seconds to display game over // Valores centinela del temporitzador de mort per-jugador. constexpr float HIT_TIMER_INACTIVE_PLAYER = 999.0F; // Jugador permanentment inactiu constexpr float HIT_TIMER_TRIGGER_DEATH = 0.001F; // Trigger inicial post-impacte (>0 sense disparar regla) constexpr float COLLISION_SHIP_ENEMY_AMPLIFIER = 0.80F; // 80% hitbox (generous) constexpr float COLLISION_BULLET_ENEMY_AMPLIFIER = 1.15F; // 115% hitbox (generous) // Friendly fire system constexpr bool FRIENDLY_FIRE_ENABLED = true; // Activar friendly fire constexpr float COLLISION_BULLET_PLAYER_AMPLIFIER = 1.0F; // Hitbox exacto (100%) constexpr float BULLET_GRACE_PERIOD = 0.2F; // Inmunidad post-disparo (s) constexpr float BULLET_SPEED = 700.0F; // Velocidad escalar (px/s). Pascal: 7 px/frame × 20 FPS // Transición LEVEL_START (mensajes aleatorios PRE-level) constexpr float LEVEL_START_DURATION = 3.0F; // Duración total constexpr float LEVEL_START_TYPING_RATIO = 0.3F; // 30% escribiendo, 70% mostrando // Transición LEVEL_COMPLETED (mensaje "GOOD JOB COMMANDER!") constexpr float LEVEL_COMPLETED_DURATION = 3.0F; // Duración total constexpr float LEVEL_COMPLETED_TYPING_RATIO = 0.0F; // 0.0 = sin typewriter (directo) // Transición INIT_HUD (animación inicial del HUD) constexpr float INIT_HUD_DURATION = 3.0F; // Duración total del estado // Ratios de animación (inicio y fin como porcentajes del tiempo total) // RECT (rectángulo de márgenes) constexpr float INIT_HUD_RECT_RATIO_INIT = 0.30F; constexpr float INIT_HUD_RECT_RATIO_END = 0.85F; // SCORE (marcador de puntuación) constexpr float INIT_HUD_SCORE_RATIO_INIT = 0.60F; constexpr float INIT_HUD_SCORE_RATIO_END = 0.90F; // SHIP1 (nave player 1) constexpr float INIT_HUD_SHIP1_RATIO_INIT = 0.0F; constexpr float INIT_HUD_SHIP1_RATIO_END = 1.0F; // SHIP2 (nave player 2) constexpr float INIT_HUD_SHIP2_RATIO_INIT = 0.20F; constexpr float INIT_HUD_SHIP2_RATIO_END = 1.0F; // Posición inicial de la nave en INIT_HUD (75% de altura de zona de juego) constexpr float INIT_HUD_SHIP_START_Y_RATIO = 0.75F; // 75% desde el top de PLAYAREA // Spawn positions (distribución horizontal para 2 jugadores) constexpr float P1_SPAWN_X_RATIO = 0.33F; // 33% desde izquierda constexpr float P2_SPAWN_X_RATIO = 0.67F; // 67% desde izquierda constexpr float SPAWN_Y_RATIO = 0.75F; // 75% desde arriba // Continue system behavior constexpr int CONTINUE_COUNT_START = 9; // Countdown starts at 9 constexpr float CONTINUE_TICK_DURATION = 1.0F; // Seconds per countdown tick constexpr int MAX_CONTINUES = 3; // Maximum continues per game constexpr bool INFINITE_CONTINUES = false; // If true, unlimited continues // Continue screen visual configuration namespace ContinueScreen { // "CONTINUE" text constexpr float CONTINUE_TEXT_SCALE = 2.0F; // Text size constexpr float CONTINUE_TEXT_Y_RATIO = 0.30F; // 35% from top of PLAYAREA // Countdown number (9, 8, 7...) constexpr float COUNTER_TEXT_SCALE = 4.0F; // Text size (large) constexpr float COUNTER_TEXT_Y_RATIO = 0.50F; // 50% from top of PLAYAREA // "CONTINUES LEFT: X" text constexpr float INFO_TEXT_SCALE = 0.7F; // Text size (small) constexpr float INFO_TEXT_Y_RATIO = 0.75F; // 65% from top of PLAYAREA } // namespace ContinueScreen // Game Over screen visual configuration namespace GameOverScreen { constexpr float TEXT_SCALE = 2.0F; // "GAME OVER" text size constexpr float TEXT_SPACING = 4.0F; // Character spacing } // namespace GameOverScreen // Stage message configuration (LEVEL_START, LEVEL_COMPLETED) constexpr float STAGE_MESSAGE_Y_RATIO = 0.25F; // 25% from top of PLAYAREA constexpr float STAGE_MESSAGE_MAX_WIDTH_RATIO = 0.9F; // 90% of PLAYAREA width } // namespace Defaults::Game