diff --git a/traque-back/game.js b/traque-back/game.js
index 2fca5cf..e61e7ea 100644
--- a/traque-back/game.js
+++ b/traque-back/game.js
@@ -92,17 +92,26 @@ export default {
penaltyController.stop();
timeoutHandler.endAllSendPositionTimeout();
for (let team of this.teams) {
- team.outOfZone = false;
- team.penalties = 0;
+ // Chasing
team.captured = false;
- team.enemyLocation = null;
- team.currentLocation = null;
+ team.chasing = null;
+ team.chased = null;
+ // Locations
team.lastSentLocation = null;
+ team.locationSendDeadline = null;
+ team.enemyLocation = null;
+ // Placement
+ team.ready = false;
+ // Zone
+ team.penalties = 0;
+ team.outOfZone = false;
+ team.outOfZoneDeadline = null;
+ // Stats
team.distance = 0;
- team.finishDate = null;
team.nCaptures = 0;
team.nSentLocation = 0;
team.nObserved = 0;
+ team.finishDate = null;
}
this.startDate = null;
this.updateTeamChasing();
@@ -178,32 +187,38 @@ export default {
*/
addTeam(teamName) {
this.teams.push({
+ // Identification
sockets: [],
- id: this.getNewTeamId(),
name: teamName,
+ id: this.getNewTeamId(),
+ captureCode: this.createCaptureCode(),
+ // Chasing
+ captured: false,
chasing: null,
chased: null,
+ // Locations
lastSentLocation: null,
- currentLocation: null,
- enemyLocation: null,
locationSendDeadline: null,
+ currentLocation: null,
+ lastCurrentLocationDate: null,
+ enemyLocation: null,
+ // Placement
startingArea: null,
ready: false,
- captureCode: this.createCaptureCode(),
- captured: false,
+ // Zone
penalties: 0,
outOfZone: false,
outOfZoneDeadline: null,
+ // Stats
distance: 0,
- finishDate: null,
nCaptures: 0,
nSentLocation: 0,
nObserved: 0,
+ finishDate: null,
+ // First socket infos
phoneModel: null,
phoneName: null,
battery: null,
- ping: null,
- nConnected: 0,
});
this.updateTeamChasing();
return true;
diff --git a/traque-back/team_socket.js b/traque-back/team_socket.js
index 6c40301..19d0289 100644
--- a/traque-back/team_socket.js
+++ b/traque-back/team_socket.js
@@ -38,23 +38,29 @@ export function playersBroadcast(event, data) {
export function sendUpdatedTeamInformations(teamId) {
const team = game.getTeam(teamId);
teamBroadcast(teamId, "update_team", {
+ // Identification
name: team.name,
+ captureCode: team.captureCode,
+ // Chasing
+ captured: team.captured,
enemyName: game.getTeam(team.chasing).name,
+ // Locations
lastSentLocation: team.lastSentLocation,
enemyLocation: team.enemyLocation,
- locationSendDeadline: team.locationSendDeadline,
+ // Placement phase
startingArea: team.startingArea,
ready: team.ready,
- captureCode: team.captureCode,
- captured: team.captured,
+ // Constraints
penalties: team.penalties,
outOfZone: team.outOfZone,
outOfZoneDeadline: team.outOfZoneDeadline,
+ locationSendDeadline: team.locationSendDeadline,
+ // Stats
distance: team.distance,
- startDate: game.startDate,
- finishDate: team.finishDate,
nCaptures: team.nCaptures,
nSentLocation: team.nSentLocation,
+ startDate: game.startDate,
+ finishDate: team.finishDate,
})
secureAdminBroadcast("teams", game.teams);
}
@@ -65,8 +71,14 @@ export function sendUpdatedTeamInformations(teamId) {
*/
function logoutPlayer(id) {
for (const team of game.teams) {
+ if (team.sockets.indexOf(id) == 0) {
+ team.battery = null;
+ team.phoneModel = null;
+ team.phoneName = null;
+ }
team.sockets = team.sockets.filter((sid) => sid != id);
}
+ secureAdminBroadcast("teams", game.teams);
}
export function initTeamSocket() {
@@ -115,7 +127,9 @@ export function initTeamSocket() {
const team = game.getTeam(teamId);
if (team.sockets.indexOf(socket.id) == 0) {
game.updateLocation(teamId, position);
+ team.lastCurrentLocationDate = Date.now();
}
+ secureAdminBroadcast("teams", game.teams);
});
socket.on("send_position", () => {
diff --git a/traque-front/app/admin/page.js b/traque-front/app/admin/page.js
index b4b4787..d8adede 100644
--- a/traque-front/app/admin/page.js
+++ b/traque-front/app/admin/page.js
@@ -1,11 +1,10 @@
"use client";
import { useAdminConnexion } from "@/context/adminConnexionContext";
-import useAdmin from "@/hook/useAdmin";
import dynamic from "next/dynamic";
-import TeamList from '@/components/admin/teamList';
+import TeamList from '@/components/admin/teamViewer';
import React, { useState } from 'react'
-import TeamAddForm from '@/components/admin/teamAdd';
import Link from "next/link";
+import { Section } from "@/components/util/section";
import TeamInformation from "@/components/admin/teamInformation";
// Imported at runtime and not at compile time
@@ -14,20 +13,26 @@ const LiveMap = dynamic(() => import('@/components/admin/liveMap'), { ssr: false
export default function AdminPage() {
const { useProtect } = useAdminConnexion();
const [selectedTeamId, setSelectedTeamId] = useState(null);
- const { addTeam, gameState, changeState, teams } = useAdmin();
+
useProtect();
+
+ function onSelected(id) {
+ if (selectedTeamId === id) {
+ setSelectedTeamId(null);
+ } else {
+ setSelectedTeamId(id);
+ }
+ }
return (
-
-
-
-
Page Principale
+
+
+
+

+
Page principale
-
-
-
Contrôle
-
-
-
-
-
-
+
+
+
+ setSelectedTeamId(null)}/>
-
+