Corrige la marge excessive de lâcher près des bords du bac
Build and deploy / deploy (push) Successful in 36s

Le calcul de position ajoutait WALL_THICKNESS (20px) en plus du rayon de
la pièce, alors que les murs physiques sont déjà à ras des bords visuels
du bac. Cette marge fixe pénalisait surtout les petites pièces, qui ne
pouvaient pas s'approcher des bords. Seul le rayon compte désormais.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-08-24 01:01:25 +02:00
parent 4dd3dbef85
commit 05aa15cec0
+12 -3
View File
@@ -98,7 +98,13 @@ export function MelonGame({ citizens, onFinish }: { citizens: MemberRow[]; onFin
const setDropX = useCallback(
(x: number) => {
const radius = tierRadii[nextTierRef.current];
const clamped = Math.min(CONTAINER_WIDTH - WALL_THICKNESS - radius, Math.max(WALL_THICKNESS + radius, x));
// Pas de WALL_THICKNESS ici : les murs physiques sont déjà à ras des
// bords visuels du bac (leur face intérieure est exactement à x=0 et
// x=CONTAINER_WIDTH), donc seul le rayon de la pièce limite jusqu'où
// son centre peut aller. Ajouter WALL_THICKNESS en plus créait une
// marge fixe de 20px des deux côtés — disproportionnée pour les
// petits paliers, qui ne pouvaient plus s'approcher des bords.
const clamped = Math.min(CONTAINER_WIDTH - radius, Math.max(radius, x));
dropXRef.current = clamped;
if (previewRef.current) {
previewRef.current.style.transform = `translateX(${clamped - radius}px)`;
@@ -144,8 +150,11 @@ export function MelonGame({ citizens, onFinish }: { citizens: MemberRow[]; onFin
const tier = nextTierRef.current;
const radius = tierRadii[tier];
const minX = WALL_THICKNESS + radius;
const maxX = CONTAINER_WIDTH - WALL_THICKNESS - radius;
// Même borne que setDropX (pas de WALL_THICKNESS en trop, voir
// là-bas) — dropXRef est déjà clampé de la même façon, ce recalcul ne
// fait que se protéger d'un dropXRef obtenu autrement (clavier, etc.).
const minX = radius;
const maxX = CONTAINER_WIDTH - radius;
const x = Math.min(maxX, Math.max(minX, dropXRef.current));
// spawnPiece a des effets de bord (crée un vrai corps matter-js,
// incrémente le compteur d'id) : appelé une seule fois ici, jamais