From a472a4d0b74fb990c65af3fdb8ce5783866162fc Mon Sep 17 00:00:00 2001 From: "vivien.dufour" Date: Tue, 19 Dec 2023 11:36:06 +0100 Subject: [PATCH] can now remove player by scroll en dehors du terrain --- front/components/editor/CourtPlayer.tsx | 1 - front/views/Editor.tsx | 104 ++++++++++++------------ 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/front/components/editor/CourtPlayer.tsx b/front/components/editor/CourtPlayer.tsx index 8299050..5f152ed 100644 --- a/front/components/editor/CourtPlayer.tsx +++ b/front/components/editor/CourtPlayer.tsx @@ -35,7 +35,6 @@ export default function CourtPlayer({ { const pieceBounds = pieceRef.current!.getBoundingClientRect() diff --git a/front/views/Editor.tsx b/front/views/Editor.tsx index 323a4ed..1a5b861 100644 --- a/front/views/Editor.tsx +++ b/front/views/Editor.tsx @@ -269,16 +269,8 @@ function EditorView({ const onBallDrop = (refBounds: DOMRect) => { if (!isBoundsOnCourt(refBounds)) { - setContent((content) => { - const ballObj = content.objects.findIndex( - (o) => o.type == "ball", - ) - return { - ...content, - objects: content.objects.toSpliced(ballObj, 1), - } - }) - setObjects([{ key: "ball" }]) + removeCourtBall() + return } const playerCollidedIdx = getPlayerCollided(refBounds, content.players) if (playerCollidedIdx != -1) { @@ -321,6 +313,48 @@ function EditorView({ }) } + const removePlayer = (player: Player) => { + setContent((content) => ({ + ...content, + players: toSplicedPlayers(content.players, player, false), + objects: [...content.objects], + })) + let setter + switch (player.team) { + case Team.Opponents: + setter = setOpponents + break + case Team.Allies: + setter = setAllies + } + if (player.hasBall) { + setObjects([{ key: "ball" }]) + } + setter((players) => [ + ...players, + { + team: player.team, + pos: player.role, + key: player.role, + }, + ]) + } + + const removeCourtBall = () => { + setContent((content) => { + const ballObj = content.objects.findIndex((o) => o.type == "ball") + return { + ...content, + players: content.players.map((player) => ({ + ...player, + hasBall: false, + })), + objects: content.objects.toSpliced(ballObj, 1), + } + }) + setObjects([{ key: "ball" }]) + } + return (
@@ -402,6 +436,13 @@ function EditorView({ } courtRef={courtDivContentRef} onPlayerChange={(player) => { + const playerBounds = document + .getElementById(player.id)! + .getBoundingClientRect() + if (!isBoundsOnCourt(playerBounds)) { + removePlayer(player) + return + } setContent((content) => ({ ...content, players: toSplicedPlayers( @@ -412,49 +453,10 @@ function EditorView({ })) }} onPlayerRemove={(player) => { - setContent((content) => ({ - ...content, - players: toSplicedPlayers( - content.players, - player, - false, - ), - objects: [...content.objects], - })) - let setter - switch (player.team) { - case Team.Opponents: - setter = setOpponents - break - case Team.Allies: - setter = setAllies - } - if (player.hasBall) { - setObjects([{ key: "ball" }]) - } - setter((players) => [ - ...players, - { - team: player.team, - pos: player.role, - key: player.role, - }, - ]) + removePlayer(player) }} onBallRemove={() => { - setContent((content) => { - const ballObj = content.objects.findIndex( - (o) => o.type == "ball", - ) - return { - ...content, - objects: content.objects.toSpliced( - ballObj, - 1, - ), - } - }) - setObjects([{ key: "ball" }]) + removeCourtBall() }} />