// physics.hpp - Constants de física del control de la nau i debris d'explosió // © 2026 JailDesigner #pragma once namespace Defaults::Physics { constexpr float ROTATION_SPEED = 3.14F; // rad/s (~180°/s) constexpr float ACCELERATION = 400.0F; // px/s² constexpr float MAX_VELOCITY = 120.0F; // px/s constexpr float FRICTION = 20.0F; // px/s² // 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 VELOCITAT_BASE = 80.0F; // Velocidad inicial (px/s) constexpr float VARIACIO_VELOCITAT = 40.0F; // ±variació aleatòria (px/s) constexpr float ACCELERACIO = -60.0F; // Fricció/desacceleració (px/s²) constexpr float ROTACIO_MIN = 0.2F; // Rotación mínima (rad/s ~11.5°/s) constexpr float ROTACIO_MAX = 0.5F; // Rotación màxima (rad/s ~28.6°/s) // Política de mort en dos fases: // 1. INTACTE: size_factor = 1.0 durant INTACT_TIME segons. Si la velocity // cau per sota de SHRINK_SPEED_THRESHOLD abans, dispara la transició // (el que arribi primer). // 2. MENGUANT: size_factor decreix linealment a SHRINK_RATE per segon // fins arribar a 0 → el fragment mor (mai "popa" en moviment). constexpr float INTACT_TIME = 2.0F; // Default temps intacte (s) constexpr float SHRINK_SPEED_THRESHOLD = 30.0F; // Velocity sota la qual dispara la mengua (px/s) constexpr float SHRINK_SPEED_THRESHOLD_SQ = SHRINK_SPEED_THRESHOLD * SHRINK_SPEED_THRESHOLD; constexpr float SHRINK_RATE = 1.0F; // 1/s = 1 segon per encongir de 100% a 0% // Herència de velocity angular (trayectorias curvas) constexpr float FACTOR_HERENCIA_MIN = 0.7F; // Mínimo 70% del drotacio heredat constexpr float FACTOR_HERENCIA_MAX = 1.0F; // Màxim 100% del drotacio heredat constexpr float FRICCIO_ANGULAR = 0.5F; // Desacceleració de la rotació de TRAJECTÒRIA (rad/s²) constexpr float FRICCIO_VISUAL = 0.05F; // Desacceleració de la rotació VISUAL (suau, persisteix mé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_INTACT_TIME = 0.5F; // Temps intacte abans de menguar (s) — comencen aviat constexpr float ENEMY_SHRINK_RATE = 0.7F; // 0.7 per segon → ~1.4s de fade-out constexpr float ENEMY_FRICTION = -30.0F; // Fricció més suau perquè s'estenguin més constexpr int ENEMY_SEGMENT_MULTIPLIER = 3; // Còpies de cada segment (5 cares × 3 = 15 trossos) // 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 VELOCITAT_ROT_MAX = 1.5F; // rad/s (~86°/s) } // namespace Debris } // namespace Defaults::Physics