70 lines
2.9 KiB
C++
70 lines
2.9 KiB
C++
// 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 <string>
|
|
|
|
#include "core/graphics/vector_text.hpp"
|
|
#include "core/rendering/render_context.hpp"
|
|
#include "core/types.hpp"
|
|
|
|
namespace Systems::InitHud {
|
|
|
|
// Segments del marcador. Cada segment es renderitza amb el seu propi color
|
|
// (vegeu Defaults::Hud::Colors). El layout final concatena en aquest ordre
|
|
// amb separadors d'1, 2, 2, 1 espais respectivament (igual que el legacy).
|
|
struct ScoreboardSegments {
|
|
std::string score_p1;
|
|
std::string lives_p1;
|
|
std::string level; // ex: "NIVELL 01"
|
|
std::string score_p2;
|
|
std::string lives_p2;
|
|
};
|
|
|
|
// 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);
|
|
|
|
// Dibuixa els 5 segments del scoreboard centrats al voltant de `center`,
|
|
// cadascun amb el seu color (Defaults::Hud::Colors). Separadors de 1/2/2/1
|
|
// espais entre segments per preservar el layout legacy.
|
|
void drawScoreboardSegmentsAt(const Graphics::VectorText& text,
|
|
const ScoreboardSegments& segments,
|
|
const Vec2& center,
|
|
float scale,
|
|
float spacing);
|
|
|
|
// Dibuixa el scoreboard centrat, pujant des de fora de la pantalla fins a
|
|
// la seva posició final amb easing. Delega a drawScoreboardSegmentsAt.
|
|
void drawScoreboardAnimated(const Graphics::VectorText& text,
|
|
const ScoreboardSegments& segments,
|
|
float progress);
|
|
|
|
} // namespace Systems::InitHud
|