diff --git a/traque-front/components/admin/teamEdit.jsx b/traque-front/components/admin/teamEdit.jsx index 9be5dc4..45cecae 100644 --- a/traque-front/components/admin/teamEdit.jsx +++ b/traque-front/components/admin/teamEdit.jsx @@ -23,7 +23,7 @@ export default function TeamEdit({ selectedTeamId, setSelectedTeamId }) { function handleRename(e) { e.preventDefault(); - updateTeam(team.id, {name:newTeamName}); + updateTeam(team.id, { name: newTeamName }); } function handleRemove() { @@ -31,6 +31,13 @@ export default function TeamEdit({ selectedTeamId, setSelectedTeamId }) { setSelectedTeamId(null); } + function handleAddPenalty(increment) { + let newPenalties = team.penalties + increment; + newPenalties = Math.max(0, newPenalties); + newPenalties = Math.min(3, newPenalties); + updateTeam(team.id, { penalties: newPenalties }); + } + return (team &&
@@ -45,7 +52,7 @@ export default function TeamEdit({ selectedTeamId, setSelectedTeamId }) { Rename
- updateTeam(team.id, {captured: !team.captured})}>{team.captured ? "Revive" : "Capture"} + updateTeam(team.id, { captured: !team.captured })}>{team.captured ? "Revive" : "Capture"} Remove
@@ -57,12 +64,19 @@ export default function TeamEdit({ selectedTeamId, setSelectedTeamId }) {

Chased by : {getTeamName(team.chased)}

Capture code : {String(team.captureCode).padStart(4, '0')}

Captured : {team.captured ? "Yes" : "No"}

+

Has to send location before {new Date(team.locationSendDeadline).toTimeString()}

+
+

Penalties :

+ +

{team.penalties}

+ +

Starting area

- updateTeam(team.id, {startingArea})} /> + updateTeam(team.id, { startingArea })} />
) diff --git a/traque-front/components/team/actionDrawer.jsx b/traque-front/components/team/actionDrawer.jsx index fe9dfce..bade8b8 100644 --- a/traque-front/components/team/actionDrawer.jsx +++ b/traque-front/components/team/actionDrawer.jsx @@ -1,5 +1,5 @@ import useGame from "@/hook/useGame"; -import { useState } from "react" +import { useEffect, useState } from "react" import BlueButton, { GreenButton, RedButton } from "../util/button"; import TextInput from "../util/textInput"; import { useTeamConnexion } from "@/context/teamConnexionContext"; @@ -7,8 +7,17 @@ import { useTeamConnexion } from "@/context/teamConnexionContext"; export default function ActionDrawer() { const [visible, setVisible] = useState(false); const [enemyCaptureCode, setEnemyCaptureCode] = useState(""); - const { sendCurrentPosition, name, captureCode, capture } = useGame(); + const { sendCurrentPosition, name, captureCode, capture, locationSendDeadline, penalties } = useGame(); const {logout} = useTeamConnexion(); + const [timeLeftBeforePenalty, setTimeLeftBeforePenalty] = useState(0); + useEffect(() => { + const interval = setInterval(() => { + console.log(locationSendDeadline) + const timeLeft = locationSendDeadline - Date.now(); + setTimeLeftBeforePenalty(Math.floor(timeLeft / 1000 / 60)); + }, 1000); + return () => clearInterval(interval); + }, [locationSendDeadline]); function handleCapture() { capture(enemyCaptureCode); @@ -28,16 +37,15 @@ export default function ActionDrawer() {
Capture code - {captureCode} + {String(captureCode).padStart(4,"0")}
- 30min + {timeLeftBeforePenalty}min before penalty
-
-
-
+ {Array.from({ length: penalties }).map((_, i) =>
)} + {Array.from({ length: 3-penalties }).map((_, i) =>
)}
diff --git a/traque-front/hook/useGame.jsx b/traque-front/hook/useGame.jsx index 6fd468c..41c093d 100644 --- a/traque-front/hook/useGame.jsx +++ b/traque-front/hook/useGame.jsx @@ -28,6 +28,8 @@ export default function useGame() { name: teamInfos?.name || null, ready: teamInfos?.ready || false, captured: teamInfos?.captured || false, + locationSendDeadline: teamInfos?.locationSendDeadline || null, + penalties: teamInfos?.penalties || 0, teamId, gameState, };