Aller au contenu principal

Session 132duodecimus (suite 13f) — Phase C portes : fix critique yBotPanel + diag collision

LE bug qui expliquait tout

Apres tests utilisateur successifs (texture coupee + porte non traversable
malgre tous les patchs s13b-s13e), j’ai relu attentivement
DoorControl.updateMeshes() et trouve un bug fondamental :

// Avant (bug)
float yBotPanel = Math.min(currentRoofY, corridorRoofY);

En JME, plus on est haut, plus Y est PETIT. Donc :

  • corridorFloorY = 0 (sol couloir, Y JME = -worldY/Y_SCALE = 0)
  • corridorRoofY = -4 (plafond couloir, plus haut que le sol = Y plus petit)
  • closedRoofY = 0 (plafond zone-porte ferme = au niveau du sol couloir)
  • openRoofY = -4 (plafond zone-porte ouvert = au niveau du plafond couloir)

Le bug : min(currentRoofY=0, corridorRoofY=-4) = -4. Donc des la 1ere
frame d’ouverture, le panneau visuel etait redessine avec yBot = yTop
= -4
= panneau de hauteur ZERO !

Consequences observees

  1. Texture « coupee » : visuellement le panneau est plat (yBot=yTop) donc
    la texture est invisible ou partiellement rendue selon les Z-fighting
    et le face culling.
  2. Pas traversable : le mesh visuel etait collapse, mais la collision
    Bullet (creee une fois au demarrage avec le mesh initial = panneau
    plein) etait toujours active. Le canPass etait correct, le
    PhysicsSpace.remove(rbc) etait bien appele, mais le RigidBody Bullet
    gardait potentiellement son shape original = panneau plein bloquant.
  3. Apparence « ouverte » : a l’oeil le panneau plat ressemble a une
    porte ouverte (rien a voir), donc on ne suspectait pas le mesh visuel.

Fix

// Apres
float yBotPanel = currentRoofY;
float yTopPanel = corridorRoofY;

float total = closedRoofY - openRoofY;  // > 0 (closed > open en JME)
float ratio = clamp01((closedRoofY - currentRoofY) / total);

Logs diagnostic ajoutes

Property ab3d2.dumpDoorCol=true (defaut) : log a chaque toggle de la
collision. Format :

[DoorControl] door zone=N : OPEN, collision REMOVED
  (currentRoofY=X.XXX corridorFloorY=X.XXX corridorRoofY=X.XXX
   closedRoofY=X.XXX openRoofY=X.XXX)
[DoorControl] door zone=N : CLOSED, collision ADDED

Permet de verifier qu’on remove/add bien le rbc selon l’etat reel de
currentRoofY.

Fichiers modifies

  • DoorControl.java :
  • updateMeshes : yBotPanel = currentRoofY (au lieu de min)
  • updateMeshes : nouveau ratio = (closedRoofY - currentRoofY) /
    (closedRoofY - openRoofY)
  • controlUpdate : log diagnostic au toggle de collision

Tests prevus

  • Porte zone 5 fermee : 1 chevron complet visible, joueur bloque.
  • Porte qui ouvre : texture qui glisse vers le haut (le sommet de la
    texture – ecran/grille – disparait dans le linteau, les chevrons
    restent visibles).
  • Porte ouverte : on doit pouvoir traverser.
  • Logs runtime : OPEN, collision REMOVED quand la porte ouvre bien.

Laisser un commentaire

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