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 = panneau de hauteur ZERO !
= -4
Consequences observees
- 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. - 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. LecanPassetait correct, le
PhysicsSpace.remove(rbc)etait bien appele, mais le RigidBody Bullet
gardait potentiellement son shape original = panneau plein bloquant. - 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 REMOVEDquand la porte ouvre bien.