Corrige la marge excessive de lâcher près des bords du bac
Build and deploy / deploy (push) Successful in 36s
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:
@@ -98,7 +98,13 @@ export function MelonGame({ citizens, onFinish }: { citizens: MemberRow[]; onFin
|
|||||||
const setDropX = useCallback(
|
const setDropX = useCallback(
|
||||||
(x: number) => {
|
(x: number) => {
|
||||||
const radius = tierRadii[nextTierRef.current];
|
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;
|
dropXRef.current = clamped;
|
||||||
if (previewRef.current) {
|
if (previewRef.current) {
|
||||||
previewRef.current.style.transform = `translateX(${clamped - radius}px)`;
|
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 tier = nextTierRef.current;
|
||||||
const radius = tierRadii[tier];
|
const radius = tierRadii[tier];
|
||||||
const minX = WALL_THICKNESS + radius;
|
// Même borne que setDropX (pas de WALL_THICKNESS en trop, voir
|
||||||
const maxX = CONTAINER_WIDTH - WALL_THICKNESS - radius;
|
// 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));
|
const x = Math.min(maxX, Math.max(minX, dropXRef.current));
|
||||||
// spawnPiece a des effets de bord (crée un vrai corps matter-js,
|
// 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
|
// incrémente le compteur d'id) : appelé une seule fois ici, jamais
|
||||||
|
|||||||
Reference in New Issue
Block a user