// physics.hpp - Constants de física del control de la nau i debris d'explosió // © 2026 JailDesigner #pragma once namespace Defaults::Physics { // NOTA: els paràmetres específics de la nau del player (rotation_speed, // acceleration, max_velocity, death_impact_factor) viuen ara a // data/entities/player/player.yaml. La migració d'aquests fitxers va // començar amb la nau; els enemics i les bales són els següents. // Bullet — impacto físico contra enemigo (impulse mass-aware). // Model: el impulse és el moment lineal de la bala (m·v) multiplicat per // un factor de transferència [0..1]. 1.0 = transfereix tot el moment // (col·lisió perfectament inelàstica), 0.5 = transfereix la meitat. namespace Bullet { constexpr float IMPACT_MOMENTUM_FACTOR = 3.0F; // Factor de transferència de moment bala→enemic } // namespace Bullet // Explosions (debris physics) namespace Debris { constexpr float SPEED_BASE = 80.0F; // Velocidad inicial (px/s) constexpr float VARIACIO_SPEED = 40.0F; // ±variació aleatòria (px/s) constexpr float ACCELERACIO = -60.0F; // Fricció/desacceleració (px/s²) constexpr float ROTATION_MIN = 0.1F; // Rotación mínima (rad/s ~5.7°/s) constexpr float ROTATION_MAX = 0.3F; // Rotación màxima (rad/s ~17.2°/s) constexpr float TEMPS_VIDA = 2.0F; // Vida mínima garantida (s) — després pot morir per velocitat baixa constexpr float TEMPS_VIDA_NAU = 3.0F; // Ship debris min lifetime (matches DEATH_DURATION) constexpr float SHRINK_RATE = 1.0F; // Reducció de mida (1.0 = encoge a 0 al final del min_lifetime) // Política de mort: passat el min_lifetime, el fragment mor quan la // seva velocity cau per sota d'aquest llindar. Així els fragments // ràpids no "popen" en moviment. constexpr float MIN_SPEED_TO_DIE = 5.0F; // px/s — al cuadrat per evitar sqrt en update constexpr float MIN_SPEED_TO_DIE_SQ = MIN_SPEED_TO_DIE * MIN_SPEED_TO_DIE; // Rebot contra els límits del PLAYAREA (mateix patró que enemics/ship). // 0.7 = 70% de l'energia conservada al rebot. constexpr float RESTITUTION_BOUNDS = 0.7F; // Herència de velocity angular (trayectorias curvas) constexpr float INHERITANCE_FACTOR_MIN = 0.7F; // Mínimo 70% del drotacio heredat constexpr float INHERITANCE_FACTOR_MAX = 1.0F; // Màxim 100% del drotacio heredat constexpr float FRICCIO_ANGULAR = 0.5F; // Desacceleració angular (rad/s²) // Velocity heredada de la nau a l'explosió (80% del feel original). constexpr float SHIP_VELOCITY_INHERITANCE = 0.8F; // Velocity heredada de l'enemic a l'explosió (palanca per a tuneo). // 1.0 = inèrcia completa; >1.0 amplifica la deriva; <1.0 la atenua. constexpr float ENEMY_VELOCITY_INHERITANCE = 1.0F; // Tuneig específic de l'explosió d'enemic (overrides als defaults // que es passen com a paràmetres opcionals a explode()). constexpr float ENEMY_LIFETIME = 2.5F; // Vida mínima del debris (s) — els que segueixen movent-se viuen més constexpr float ENEMY_FRICTION = -30.0F; // Fricció més suau perquè s'estenguin més constexpr int ENEMY_SEGMENT_MULTIPLIER = 1; // Sense còpies (5 cares = 5 trossos); >1 produeix grups sincronitzats // Angular velocity sin for trajectory inheritance // Excess above this threshold is converted to tangential linear velocity // Prevents "vortex trap" problem with high-rotation enemies constexpr float SPEED_ROT_MAX = 1.5F; // rad/s (~86°/s) } // namespace Debris } // namespace Defaults::Physics