From 24dafcda476947477f7f0ec8926d1025bbc78021 Mon Sep 17 00:00:00 2001 From: Quentin Roussel Date: Fri, 29 Mar 2024 10:42:21 +0000 Subject: [PATCH] placement phase ready computation --- traque-back/game.js | 20 ++++++++++---------- traque-back/index.js | 8 +++++--- traque-back/map_utils.js | 21 +++++++++++++++++++++ 3 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 traque-back/map_utils.js diff --git a/traque-back/game.js b/traque-back/game.js index bfd6c59..be623be 100644 --- a/traque-back/game.js +++ b/traque-back/game.js @@ -1,3 +1,5 @@ +import { isInCircle } from "./map_utils.js"; + const GameState = { SETUP: "setup", PLACEMENT: "placement", @@ -43,7 +45,8 @@ export default class Game { enemyLocation: null, captureCode: this.createCaptureCode(), sockets: [], - startingArea: null + startingArea: null, + ready: false, }); this.updateTeamChasing(); return true; @@ -83,21 +86,18 @@ export default class Game { console.log(this.teams) return true; } - // renameTeam(teamId, newName) { - // let team = this.getTeam(teamId); - // if(team == undefined) { - // return false; - // } - // team.name = newName; - // return true; - // } - + updateLocation(teamId, location) { let team = this.getTeam(teamId); if(team == undefined) { return false; } team.currentLocation = location; + //Update the team ready status if they are in their starting area + console.log(location, team.startingArea.center) + if(this.state == GameState.PLACEMENT && team.startingArea) { + team.ready = isInCircle(location, [team.startingArea.center.lat, team.startingArea.center.lng], team.startingArea.radius) + } return true; } diff --git a/traque-back/index.js b/traque-back/index.js index ae73fba..5bd5763 100644 --- a/traque-back/index.js +++ b/traque-back/index.js @@ -173,7 +173,8 @@ function sendUpdatedTeamInformations(teamId) { currentLocation: team.currentLocation, lastSentLocation: team.lastSentLocation, captureCode: team.captureCode, - startingArea: team.startingArea + startingArea: team.startingArea, + ready: team.ready }) }) } @@ -210,9 +211,10 @@ io.of("player").on("connection", (socket) => { socket.emit("error", "not logged in yet"); return; } - if(game.getTeam(teamId).sockets.indexOf(socket.id) == 0) { + let team = game.getTeam(teamId) + if(team.sockets.indexOf(socket.id) == 0) { game.updateLocation(teamId, position); - teamBroadcast(teamId, "update_team", {currentLocation: position}); + teamBroadcast(teamId, "update_team", {currentLocation: team.currentLocation, ready:team.ready }); } }); diff --git a/traque-back/map_utils.js b/traque-back/map_utils.js new file mode 100644 index 0000000..646cfb3 --- /dev/null +++ b/traque-back/map_utils.js @@ -0,0 +1,21 @@ +function getDistanceFromLatLon([lat1, lon1], [lat2, lon2]) { + var R = 6371; // Radius of the earth in km + var dLat = deg2rad(lat2-lat1); // deg2rad below + var dLon = deg2rad(lon2-lon1); + var a = + Math.sin(dLat/2) * Math.sin(dLat/2) + + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * + Math.sin(dLon/2) * Math.sin(dLon/2) + ; + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + var d = R * c; // Distance in km + return d * 1000; +} + +function deg2rad(deg) { + return deg * (Math.PI/180) +} + +export function isInCircle(position, center, radius) { + return getDistanceFromLatLon(position, center) < radius; +} \ No newline at end of file