efbf2457a1
Primera tanda mecánica sobre el lint pendiente. Arregla la causa raíz, no
silencia diagnósticos. Detalle por categoría:
- Uninit members (cppcheck warnings) → inicializadores en declaración:
Bullet (esta_, owner_id_, grace_timer_), Enemy (drotacio_, rotacio_,
esta_, type_, tracking_timer_, ship_position_, tracking_strength_,
direction_change_timer_, timer_invulnerabilitat_), Ship (is_hit_,
invulnerable_timer_), Shape (escala_defecte_) y TitleShip (todos los
miembros del struct, que viven dentro de un std::array<,2>).
- returnByReference (cppcheck performance) → return const T&:
Shape::getName, ResourceLoader::getBasePath. De paso, Shape::get_nom
se renombra a getName y get_num_primitives a getNumPrimitives para
cumplir la convención camelBack del proyecto (lint del .clang-tidy).
- useInitializationList (cppcheck performance) →
Starfield::shape_estrella_ pasa a la lista de inicialización (reordenada
según la declaración para no disparar -Wreorder-ctor).
- noExplicitConstructor (cppcheck style) → explicit en ctores de 1 arg:
Bullet(Renderer*), Enemy(Renderer*), Ship(Renderer*,...) y VectorText(Renderer*).
- variableScope (cppcheck style) → en vector_text.cpp se elimina la
variable 'c' intermedia y se usa el literal '\\xA9' directamente en el
único punto donde se necesita.
- constParameterReference (cppcheck style) → drawScoreboardAnimated pasa
el VectorText por const ref (la API render/renderCentered es const).
- Warnings preexistentes del compilador (resueltos de paso):
- stage_config.hpp: stage_id <= 255 sobre uint8_t era siempre true; se
elimina la comparación redundante y se explica con comentario.
- director.cpp: 'struct stat st = {.st_dev = 0};' disparaba
-Wmissing-field-initializers; pasa a 'struct stat st{};' (zero-init
completo, robusto a las variantes específicas del SO).
- game_scene.cpp: stepDeathSequence devolvía un bool [[nodiscard]] que
el caller ignoraba; el valor era puramente interno. Cambiada la
firma a void.
- cppcheck: añadido --suppress=useStlAlgorithm. Las 26 sugerencias
'Consider using std::any_of/find_if/count_if' son cosméticas y no
aportan claridad sobre las raw loops actuales.
- .clang-tidy de source/core/audio/ eliminado: deshabilitaba todos los
checks en ese subdirectorio por dependencia de jail_audio.hpp, pero
impedía ejecutar 'make tidy' (clang-tidy aborta con "no checks
enabled" al primer archivo del directorio). El proyecto pasa a usar
el mismo patrón de CCAE: solo source/external/ y source/legacy/
quedan fuera del lint.
- lint-reports/ añadido a .gitignore. Carpeta donde 'make tidy' y
'make cppcheck' vuelcan su salida completa para inspección posterior.
Build limpio, cero warnings activos.
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
|
|
// © 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 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(const Graphics::VectorText& text,
|
|
const std::string& scoreboard_text,
|
|
float progress);
|
|
|
|
} // namespace Systems::InitHud
|