Files
orni-attack/source/game/effects/debris.hpp
T

56 lines
2.5 KiB
C++
Raw 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):
// centro + original_angle (orientació spawn) + angle_rotacio (acumulat)
// + original_half_length × size_factor (mida actual)
// p1/p2 es reconstrueixen cada frame des d'aquestes dades — no es modifiquen
// iterativament (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 en dos fases:
// 1. INTACTE (shrinking=false): size_factor=1.0 durant intact_time segons,
// o fins que la velocity cau per sota de SHRINK_SPEED_THRESHOLD.
// 2. MENGUANT (shrinking=true): size_factor decreix a shrink_rate/s fins
// arribar a 0 → mor. Mai pop visual: sempre fade-out.
float temps_vida; // Temps transcorregut (segons)
float intact_time; // Temps en fase INTACTE (segons)
bool shrinking; // false=intacte, true=menguant
float size_factor; // Mida actual (1.0=ple, 0.0=mort)
float shrink_rate; // Velocity de menguada (per segon)
bool active; // Està actiu?
// 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