From 726775fe4ef82d96d309c5476358e45a2bb7ca43 Mon Sep 17 00:00:00 2001 From: william Date: Thu, 3 Sep 2026 12:42:17 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20"=C3=A0=20la=20collision"=20=E2=80=94=20l?= =?UTF-8?q?a=20marge=20de=203px=20restait=20insuffisante?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit forgeWouldCollide (personnage-controller.js) bloque le déplacement par PAS ENTIER (cmd.vitesse px/tick, 4 par défaut mais réglable) : le joueur peut donc rester bloqué jusqu'à PRESQUE un pas entier de distance de l'obstacle, pas seulement 1-3px — la marge de tolérance du correctif précédent (3px) restait insuffisante même pour la vitesse par défaut dans les cas les moins favorables. Portée à 24px, confortable pour toute vitesse raisonnablement configurée sans jamais déclencher "à la collision" alors que les objets sont encore visiblement séparés. Co-Authored-By: Claude Sonnet 5 --- static/js/play/collision-rules-controller.js | 29 ++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/static/js/play/collision-rules-controller.js b/static/js/play/collision-rules-controller.js index beba63a4..e9ae0569 100644 --- a/static/js/play/collision-rules-controller.js +++ b/static/js/play/collision-rules-controller.js @@ -32,17 +32,24 @@ function forgeElementBoxRect(el, collision) { return forgeCollisionRectFromBox({ left: left, top: top, width: width, height: height }, collision); } -// Une petite marge (px) appliquée SEULEMENT à la détection du -// déclencheur "collision" ci-dessous — jamais au blocage physique du -// déplacement (forgeWouldCollide, personnage-controller.js, qui reste -// strict). Bug corrigé : un objet est presque toujours aussi un -// OBSTACLE SOLIDE (collision activée par défaut) — le joueur ne peut -// donc jamais aller au-delà d'un contact tangent (bords qui se touchent -// SANS se chevaucher), et un chevauchement STRICT (forgeShapesOverlap -// nu) n'était donc jamais atteint : la règle "à la collision" ne se -// déclenchait jamais. Cette marge élargit la boîte testée pour que ce -// simple contact compte comme une collision. -var FORGE_COLLISION_RULE_TOUCH_MARGIN = 3; +// Une marge (px) appliquée SEULEMENT à la détection du déclencheur +// "collision" ci-dessous — jamais au blocage physique du déplacement +// (forgeWouldCollide, personnage-controller.js, qui reste strict). Bug +// corrigé : un objet est presque toujours aussi un OBSTACLE SOLIDE +// (collision activée par défaut) — le joueur ne peut donc jamais aller +// au-delà d'un contact tangent, et un chevauchement STRICT +// (forgeShapesOverlap nu) n'était donc jamais atteint : la règle "à la +// collision" ne se déclenchait jamais. forgeWouldCollide bloque le +// déplacement PAR PAS ENTIER (cmd.vitesse px/tick, 4 par défaut mais +// réglable plus haut dans "Commandes") : le joueur peut donc rester +// bloqué jusqu'à PRESQUE un pas entier de distance de l'obstacle, pas +// seulement 1-2px — une marge trop petite (ex. 3px) restait donc +// insuffisante pour une vitesse par défaut déjà. 24px couvre +// confortablement toute vitesse raisonnablement configurée, tout en +// restant petit face à la taille d'un sprite (souvent 64-128px) pour ne +// jamais déclencher "à la collision" alors que les objets sont encore +// visiblement séparés. +var FORGE_COLLISION_RULE_TOUCH_MARGIN = 24; function forgeExpandRect(rect, margin) { return {