fixed udpate position functionnality

This commit is contained in:
Quentin Roussel
2024-03-26 14:35:10 +01:00
parent 37fc6b6fa8
commit e6563f2da5
8 changed files with 59 additions and 19 deletions

View File

@@ -69,9 +69,6 @@ export default class Game {
}
updateLocation(teamId, location) {
if(!this.started) {
return false;
}
let team = this.getTeam(teamId);
if(team == undefined) {
return false;
@@ -81,9 +78,6 @@ export default class Game {
}
sendLocation(teamId) {
if(!this.started) {
return false;
}
let team = this.getTeam(teamId);
if(team == undefined) {
return false;

View File

@@ -163,12 +163,13 @@ io.of("player").on("connection", (socket) => {
}
});
socket.on("login", (teamId) => {
if(game.getTeam(teamId) === undefined) {
socket.on("login", (loginTeamId) => {
if(game.getTeam(loginTeamId) === undefined) {
socket.emit("login_response", false);
return;
}
game.getTeam(teamId).sockets.push(socket.id);
teamId = loginTeamId;
game.getTeam(loginTeamId).sockets.push(socket.id);
socket.emit("login_response", true);
});
@@ -178,8 +179,14 @@ io.of("player").on("connection", (socket) => {
socket.on("send_position", () => {
game.sendLocation(teamId);
game.getTeam(teamId).sockets.forEach(s => {
io.of("player").to(s).emit("enemy_position", game.getTeam(teamId).enemyLocation);
let team = game.getTeam(teamId);
if(team === undefined) {
socket.emit("error", "Team not found");
return;
}
game.updateTeamChasing();
team.sockets.forEach(s => {
io.of("player").to(s).emit("enemy_position", team.enemyLocation);
});
});
});

View File

@@ -20,9 +20,13 @@ export default function Track() {
return (
<div className='h-full flex flex-col justify-between'>
<LiveMap currentPosition={currentPosition} enemyPosition={enemyPosition} className="h-4/5" />
<Button onClick={sendCurrentPosition}>Update position</Button>
<div className='h-full flex flex-col justify-between justify-items-stretch'>
<div className='h-5/6'>
<LiveMap currentPosition={currentPosition} enemyPosition={enemyPosition}/>
</div>
<div className="h-1/6">
<Button onClick={sendCurrentPosition}>Update position</Button>
</div>
<div className='shadow-lg m-5 p-2 flex flex-col text-center mx-auto w-4/5 rounded'>
<p className='text-xl text-black'>30min</p>
<p className='text-gray-700'> before penalty</p>

View File

@@ -26,7 +26,7 @@ function MapPan(props) {
export default function LiveMap({enemyPosition, currentPosition, ...props}) {
return (
<MapContainer {...props} center={[0,0]} zoom={0} scrollWheelZoom={true}>
<MapContainer {...props} className='min-h-full' center={[0,0]} zoom={0} scrollWheelZoom={true}>
<TileLayer
attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"

View File

@@ -1,5 +1,5 @@
export default function Button({ children, ...props }) {
return (<button {...props} className="bg-blue-600 hover:bg-blue-500 ease-out duration-200 text-white w-full p-4 shadow-sm rounded">
return (<button {...props} className="bg-blue-600 hover:bg-blue-500 ease-out duration-200 text-white w-full h-full p-4 shadow-sm rounded">
{children}
</button>)
}

View File

@@ -1,15 +1,23 @@
"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 adminContext = createContext();
const AdminConnexionProvider = ({ children }) => {
const [loggedIn, setLoggedIn] = useState(false);
const [savedPassword, setSavedPassword] = useLocalStorage("admin_password", null);
const { adminSocket } = useSocket();
useEffect(() => {
if (savedPassword && !loggedIn) {
adminSocket.emit("login", savedPassword);
}
}, [savedPassword]);
function login(password) {
adminSocket.emit("login", password);
setSavedPassword(password)
}
useSocketListener(adminSocket, "login_response", setLoggedIn);

View File

@@ -10,7 +10,7 @@ export default function useGame() {
const {currentPosition, enemyPosition} = useTeamContext();
function sendCurrentPosition() {
teamSocket.emit("send_position", currentPosition);
teamSocket.emit("send_position");
}
return { sendCurrentPosition, login, enemyPosition, currentPosition, loggedIn, teamId };

View File

@@ -0,0 +1,27 @@
"use client";
import { useEffect, useState } from "react";
export function useLocalStorage(key, initialValue) {
const [storedValue, setStoredValue] = useState(initialValue);
useEffect(() => {
try {
const item = window.localStorage.getItem(key);
setStoredValue(item ? JSON.parse(item) : initialValue);
} catch (error) {
console.log(error);
}
}, []);
const setValue = value => {
try {
const valueToStore = value instanceof Function ? value(storedValue) : value;
setStoredValue(valueToStore);
window.localStorage.setItem(key, JSON.stringify(valueToStore));
} catch (error) {
console.log(error);
}
}
return [storedValue, setValue];
}