Files

55 lines
2.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// debris.hpp - Fragment de línia volant (explosión de formes)
// © 2026 JailDesigner
#pragma once
#include <SDL3/SDL.h>
#include "core/types.hpp"
namespace Effects {
// Debris: un segment de línia que vola perpendicular a sí mismo
// Representa un fragment de una shape destruïda (ship, enemy, bullet).
//
// Representació autoritaritzada (font de veritat per a la geometria):
// centro + original_angle (orientació spawn) + angle_rotacio (acumulat)
// + original_half_length × shrink_factor (mida actual)
// p1/p2 es reconstrueixen cada frame en update() des d'aquestes dades, mai
// de forma iterativa — evita bugs de rotació quadràtica i shrink exponencial.
struct Debris {
// Geometria del segment (2 points en coordenades mundials, derivats)
Vec2 p1;
Vec2 p2;
// Geometria original (font de veritat, no canvia després del spawn)
Vec2 centro; // Centre actual del segment (es mou amb velocity)
float original_angle; // Orientació del segment al spawn (rad)
float original_half_length; // Mitja-longitud al spawn (px)
// Física
Vec2 velocity; // Velocidad en px/s (components x, y)
float acceleration; // Aceleración negativa (fricció) en px/s²
// Rotación
float angle_rotacio; // Acumulat de rotació visual des del spawn (radians)
float velocitat_rot; // Velocidad de rotación de TRAYECTORIA (rad/s)
float velocitat_rot_visual; // Velocidad de rotación VISUAL del segment (rad/s)
// Estat de vida
// Política: viu sempre durant min_lifetime, després mor quan
// |velocity| < MIN_SPEED_TO_DIE (definit en Defaults). Així els
// fragments ràpids no "popen" en moviment.
float elapsed_time; // Temps transcorregut (segons)
float min_lifetime; // Temps mínim garantit (segons)
bool active; // Està actiu?
// Shrinking (reducció de distancia entre points)
float factor_shrink; // Factor de reducció per segon (0.0-1.0)
// Rendering
float brightness; // Factor de brightness (0.0-1.0, heretat de l'objecte original)
SDL_Color color{}; // Color heredado del padre. alpha==0 → usa global oscilador
};
} // namespace Effects