Retour de test session 87
✅ Collisions bullets vs murs : OK (Plasma/Rocket/Lazer s’arretent)
✅ Rebonds grenade : OK
⚠️ Warning Minie au spawn de grenade :
The body isn't in any PhysicsSpace, and its gravity isn't protected.
⚠️ Grenade traverse parfois les murs = tunneling
Cause
Deux problemes dans PhysicsBulletSystem.spawnPhysicsBullet() :
-
Ordre des appels Minie :
setGravity()appele AVANT
physicsSpace.add(rbc). Si la gravite n’est pas « protegee », elle est
ecrasee par la gravite par defaut du space au moment du add. -
Tunneling : a 40 JME/s avec tpf=16ms, la grenade parcourt 0.64 unites
par tick physique. Si un mur est plus fin que ca, Bullet peut sauter
par-dessus entre deux steps (collision discrete). Solution = CCD
(Continuous Collision Detection) qui fait un sweep test.
Fix
PhysicsBulletSystem.spawnPhysicsBullet() :
-
CCD active via :
java
rbc.setCcdMotionThreshold(BULLET_RADIUS * 0.5f);
rbc.setCcdSweptSphereRadius(BULLET_RADIUS);
Quand la bullet bouge de plus deradius*0.5en un tick, Bullet fait un
sweep test de l’ancienne position a la nouvelle au lieu du test discret. -
Gravite protegee via :
java
rbc.setProtectGravity(true);
rbc.setGravity(...);
Supprime le warning Minie et garantit que la gravite de la bullet ne soit
pas ecrasee par la gravite du space. -
setLinearVelocity apres ps.add() : sinon la velocite initiale peut etre
perdue au moment de l’attachement au space.
Fichiers modifies
src/main/java/com/ab3d2/combat/PhysicsBulletSystem.java
Test attendu
- Plus de warning Minie au lancement de grenade
- Les grenades ne traversent plus les murs, meme fines
- Comportement de rebond identique (restitution 0.6, friction 0.3)