From b0bf54f20cf0fa752f4ad69e280853fdd17ed946 Mon Sep 17 00:00:00 2001 From: Valentin ROBIN Date: Mon, 24 Aug 2026 01:04:58 +0200 Subject: [PATCH] =?UTF-8?q?Corrige=20le=20l=C3=A2cher=20qui=20ignorait=20u?= =?UTF-8?q?n=20simple=20tap=20sans=20glissement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sur mobile, taper sans glisser ne déclenche pas forcément pointermove avant pointerup, donc la position de visée n'était jamais mise à jour avant le lâcher : la pièce tombait à l'ancienne position plutôt qu'à l'endroit tapé. La position se resynchronise maintenant au contact (pointerdown) et juste avant le lâcher (pointerup). Co-Authored-By: Claude Sonnet 5 --- src/app/corne/melon-game.tsx | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/app/corne/melon-game.tsx b/src/app/corne/melon-game.tsx index da729fc..959113c 100644 --- a/src/app/corne/melon-game.tsx +++ b/src/app/corne/melon-game.tsx @@ -173,7 +173,7 @@ export function MelonGame({ citizens, onFinish }: { citizens: MemberRow[]; onFin setDropX(dropXRef.current); }, [spawnPiece, setDropX, tierRadii, dropMaxTier]); - const handlePointerMove = useCallback( + const updateDropXFromEvent = useCallback( (event: ReactPointerEvent) => { const rect = containerRef.current?.getBoundingClientRect(); if (!rect) return; @@ -182,9 +182,19 @@ export function MelonGame({ citizens, onFinish }: { citizens: MemberRow[]; onFin [setDropX], ); - function handlePointerUp() { - handleDrop(); - } + // Sur un tap sans glissement (mobile notamment), pointermove ne se + // déclenche pas forcément avant pointerup — sans repositionner ici aussi, + // le lâcher se faisait à l'ancienne position (celle d'une interaction + // précédente), pas là où le doigt vient de taper. onPointerDown en plus + // pour que le trait de visée bouge dès le contact, pas seulement au + // relâchement. + const handlePointerUp = useCallback( + (event: ReactPointerEvent) => { + updateDropXFromEvent(event); + handleDrop(); + }, + [updateDropXFromEvent, handleDrop], + ); // Clavier (ordinateur) : flèches pour viser, Espace/Entrée pour lâcher — // même logique que le support clavier ajouté au Vol d'Icare. @@ -382,7 +392,8 @@ export function MelonGame({ citizens, onFinish }: { citizens: MemberRow[]; onFin