// init_hud_animator.hpp - Animación inicial del HUD del juego // © 2026 JailDesigner // // Cubre la animación INIT_HUD del comienzo de cada partida/stage: // 1. Crecimiento de los marcos del PLAYAREA con efecto pincel en 3 fases. // 2. Marcador subiendo desde abajo. // 3. Naves entrando desde la zone inferior hacia su spawn. // // Todas las funciones son puras (sin estado interno propio). GameScene aporta // el contexto que necesitan: posiciones finales, texto del scoreboard y el // renderer/VectorText. El timing global (progress 0..1) lo gestiona // StageManager. #pragma once #include #include "core/graphics/vector_text.hpp" #include "core/rendering/render_context.hpp" #include "core/types.hpp" namespace Systems::InitHud { // Convierte un progreso global 0..1 al sub-progreso de un elemento que solo // se anima en la ventana [ratio_init, ratio_end]. // < ratio_init → 0.0 (no empezó) // > ratio_end → 1.0 (terminó) // en rango → interpolación lineal 0..1 [[nodiscard]] auto computeRangeProgress(float global_progress, float ratio_init, float ratio_end) -> float; // Calcula posición Y animada de una nave durante INIT_HUD. La nave sube // desde 50 px bajo el PLAYAREA hasta `final_position` con easing. [[nodiscard]] auto computeShipPosition(float progress, const Vec2& final_position) -> Vec2; // Dibuja los 4 lados del PLAYAREA con efecto pincel en 3 fases: // 0..33% → línea superior crece desde el centro hacia los lados. // 33..66% → líneas verticales bajan por los laterales. // 66..100% → línea inferior crece desde los lados hacia el centro. void drawBordersAnimated(Rendering::Renderer* renderer, float progress); // Dibuja el scoreboard centrado, subiendo desde fuera de la pantalla // hasta su posición final con easing. void drawScoreboardAnimated(const Graphics::VectorText& text, const std::string& scoreboard_text, float progress); } // namespace Systems::InitHud