diff --git a/traque-back/game.js b/traque-back/game.js index ff7c370..7a69e03 100644 --- a/traque-back/game.js +++ b/traque-back/game.js @@ -15,11 +15,15 @@ export default class Game { getNewTeamId() { let id = null; while(id === null || this.teams.find(t => t.id === id)) { - id = Math.floor(Math.random() * 1000000); + id = Math.floor(Math.random() * 1_000_000); } return id; } + createCaptureCode() { + return Math.floor(Math.random() * 10000) + } + addTeam(teamName) { let id = this.getNewTeamId(); this.teams.push({ @@ -27,9 +31,10 @@ export default class Game { name: teamName, chasing: null, chased: null, - currentLocation: [0, 0], - lastSentLocation: [0, 0], - enemyLocation: [0, 0], + currentLocation: null, + lastSentLocation: null, + enemyLocation: null, + captureCode: this.createCaptureCode(), sockets: [] }); this.updateTeamChasing(); diff --git a/traque-front/app/team/track/page.js b/traque-front/app/team/track/page.js index df90b3a..96478ac 100644 --- a/traque-front/app/team/track/page.js +++ b/traque-front/app/team/track/page.js @@ -1,4 +1,5 @@ "use client"; +import ActionDrawer from '@/components/team/actionDrawer'; import Button from '@/components/util/button'; import useGame from '@/hook/useGame'; import dynamic from 'next/dynamic'; @@ -11,7 +12,7 @@ const LiveMap = dynamic(() => import('@/components/team/map'), { }); export default function Track() { - const { currentPosition, enemyPosition, loggedIn, sendCurrentPosition } = useGame(); + const { currentPosition, enemyPosition, loggedIn } = useGame(); useEffect(() => { if (!loggedIn) { redirect("/team"); @@ -20,22 +21,9 @@ export default function Track() { return ( -
-
- -
-
- -
-
-

30min

-

before penalty

-
-
-
-
-
-
+
+ +
) } diff --git a/traque-front/components/admin/teamEdit.jsx b/traque-front/components/admin/teamEdit.jsx index e0c5b97..fdc6d2c 100644 --- a/traque-front/components/admin/teamEdit.jsx +++ b/traque-front/components/admin/teamEdit.jsx @@ -51,10 +51,11 @@ export default function TeamEdit({selectedTeamId, setSelectedTeamId}) {

Team details

-

Secret : {team.id}

+

Secret : {String(team.id).padStart(6,'0')}

Name : {team.name}

Chasing : {getTeamName(team.chasing)}

Chased by : {getTeamName(team.chased)}

+

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

diff --git a/traque-front/components/team/actionDrawer.jsx b/traque-front/components/team/actionDrawer.jsx new file mode 100644 index 0000000..321cecf --- /dev/null +++ b/traque-front/components/team/actionDrawer.jsx @@ -0,0 +1,41 @@ +import useGame from "@/hook/useGame"; +import { useState } from "react" +import Button from "../util/button"; +import TextInput from "../util/textInput"; + +export default function ActionDrawer() { + const [visible, setVisible] = useState(false); + const { sendCurrentPosition } = useGame(); + + return ( +
+ setVisible(!visible)} /> + {visible &&
+
+ +
+
+
+ { console.log(i) }} /> +
+
+ +
+
+
+

30min

+

before penalty

+
+
+
+
+
+
+
+ +
+
+ } +
+ ) +} \ No newline at end of file diff --git a/traque-front/components/team/map.jsx b/traque-front/components/team/map.jsx index 9b98f75..15b5132 100644 --- a/traque-front/components/team/map.jsx +++ b/traque-front/components/team/map.jsx @@ -26,7 +26,7 @@ function MapPan(props) { export default function LiveMap({enemyPosition, currentPosition, ...props}) { return ( - + + return () } \ No newline at end of file diff --git a/traque-front/components/util/textInput.jsx b/traque-front/components/util/textInput.jsx index 403163c..2a8580e 100644 --- a/traque-front/components/util/textInput.jsx +++ b/traque-front/components/util/textInput.jsx @@ -2,6 +2,6 @@ import React from 'react' export default function TextInput({...props}) { return ( - + ) } diff --git a/traque-front/context/teamConnexionContext.jsx b/traque-front/context/teamConnexionContext.jsx index d806372..68c2e27 100644 --- a/traque-front/context/teamConnexionContext.jsx +++ b/traque-front/context/teamConnexionContext.jsx @@ -1,16 +1,22 @@ "use client"; -import { createContext, useContext, useMemo, useState } from "react"; +import { createContext, useContext, useEffect, useMemo, useState } from "react"; import { useSocket } from "./socketContext"; import { useSocketListener } from "@/hook/useSocketListener"; +import { useLocalStorage } from "@/hook/useLocalStorage"; const teamConnexionContext = createContext(); const TeamConnexionProvider = ({ children }) => { const [loggedIn, setLoggedIn] = useState(false); - const [teamId, setTeamId] = useState(null); + const [teamId, setTeamId] = useLocalStorage("team_id", null); const { teamSocket } = useSocket(); - + + useEffect(() => { + if (teamId && !loggedIn) { + teamSocket.emit("login", teamId); + } + }, [teamId]); + function login(id) { - teamSocket.emit("login", id); setTeamId(id); } diff --git a/traque-front/public/icons/arrow_up.png b/traque-front/public/icons/arrow_up.png new file mode 100644 index 0000000..ee49752 Binary files /dev/null and b/traque-front/public/icons/arrow_up.png differ