67 lines
3.7 KiB
C++
67 lines
3.7 KiB
C++
// 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.1F; // Rotación mínima (rad/s ~5.7°/s)
|
||
constexpr float ROTACIO_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 = 0.5F; // Reducció de mida (factor sobre 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 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ó 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 = 4.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 = 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
|