Aller au contenu principal

Session 87bis — Fix grenade tunneling + warning Minie

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() :

  1. 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.

  2. 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 de radius*0.5 en 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

  1. Plus de warning Minie au lancement de grenade
  2. Les grenades ne traversent plus les murs, meme fines
  3. Comportement de rebond identique (restitution 0.6, friction 0.3)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *