a4942fcbae
GameScene::dibuixar_marges_animat, dibuixar_marcador_animat,
calcular_posicio_nau_init_hud y calcular_progress_rango (4 funciones,
~135 LOC) salen a Systems::InitHud en
source/game/systems/init_hud_animator.{hpp,cpp}.
Las funciones son puras (sin estado interno propio). API libre en
namespace:
- computeRangeProgress(global, init, end): normalizacion de la
ventana de progreso de un elemento dentro del global 0..1.
- computeShipPosition(progress, final_position): interpola Y desde
fuera de pantalla con ease_out_quad.
- drawBordersAnimated(renderer, progress): efecto pincel en 3 fases.
- drawScoreboardAnimated(text, scoreboard_text, progress): texto
subiendo desde abajo.
GameScene inyecta lo que cada funcion necesita por parametro
(spawn point desde obtenir_punt_spawn, scoreboard desde
buildScoreboard). Sin estado mutable compartido.
GameScene.cpp acumulado tras 9a/9b/9c: 1429 -> 1043 LOC.
Smoke test xvfb OK.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
2.1 KiB
C++
50 lines
2.1 KiB
C++
// init_hud_animator.hpp - Animación inicial del HUD del juego
|
|
// © 2025 Orni Attack
|
|
//
|
|
// 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 zona 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 <string>
|
|
|
|
#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(Graphics::VectorText& text,
|
|
const std::string& scoreboard_text,
|
|
float progress);
|
|
|
|
} // namespace Systems::InitHud
|