Corrige le lâcher qui ignorait un simple tap sans glissement
Build and deploy / deploy (push) Successful in 36s
Build and deploy / deploy (push) Successful in 36s
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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() {
|
||||
// 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
|
||||
|
||||
<div
|
||||
ref={containerRef}
|
||||
onPointerMove={handlePointerMove}
|
||||
onPointerDown={updateDropXFromEvent}
|
||||
onPointerMove={updateDropXFromEvent}
|
||||
onPointerUp={handlePointerUp}
|
||||
className="relative touch-none overflow-visible rounded-b-2xl border-x-4 border-b-4 border-gold/50 bg-ink-2/40 select-none"
|
||||
style={{ width: CONTAINER_WIDTH, height: CONTAINER_HEIGHT }}
|
||||
|
||||
Reference in New Issue
Block a user