game over detection system

This commit is contained in:
2024-04-20 11:22:58 +00:00
parent 27b7f6fc62
commit 6393ee12dc
3 changed files with 24 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
import { penaltyController } from "./index.js";
import { isInCircle } from "./map_utils.js"; import { isInCircle } from "./map_utils.js";
import { sendUpdatedTeamInformations } from "./team_socket.js"; import { playersBroadcast, sendUpdatedTeamInformations } from "./team_socket.js";
import { ZoneManager } from "./zone_manager.js"; import { ZoneManager } from "./zone_manager.js";
export const GameState = { export const GameState = {
@@ -35,6 +36,7 @@ export default class Game {
} }
if (newState != GameState.PLAYING) { if (newState != GameState.PLAYING) {
this.zone.reset(); this.zone.reset();
penaltyController.stop();
} }
this.state = newState; this.state = newState;
return true; return true;
@@ -86,7 +88,10 @@ export default class Game {
} }
updateTeamChasing() { updateTeamChasing() {
if (this.playingTeamCount() <= 1) { if (this.playingTeamCount() <= 2) {
if(this.state == GameState.PLAYING) {
this.finishGame()
}
return false; return false;
} }
let firstTeam = null; let firstTeam = null;
@@ -187,7 +192,7 @@ export default class Game {
requestCapture(teamId, captureCode) { requestCapture(teamId, captureCode) {
let enemyTeam = this.getTeam(this.getTeam(teamId).chasing) let enemyTeam = this.getTeam(this.getTeam(teamId).chasing)
if (enemyTeam && enemyTeam.captureCode == captureCode) { if (enemyTeam && enemyTeam.captureCode == captureCode) {
this.capture(enemyTeam); this.capture(enemyTeam.id);
this.updateTeamChasing(); this.updateTeamChasing();
return true; return true;
} }
@@ -216,4 +221,10 @@ export default class Game {
} }
return this.zone.udpateSettings(newSettings) return this.zone.udpateSettings(newSettings)
} }
finishGame() {
this.setState(GameState.FINISHED);
this.zone.reset();
playersBroadcast("game_state", this.state);
}
} }

View File

@@ -48,7 +48,7 @@ function onUpdateZone(zone) {
export const game = new Game(onUpdateZone, onUpdateNewZone); export const game = new Game(onUpdateZone, onUpdateNewZone);
const penaltyController = new PenaltyController(game); export const penaltyController = new PenaltyController();
penaltyController.init() penaltyController.init()

View File

@@ -3,10 +3,11 @@ import { getDistanceFromLatLon, isInCircle } from "./map_utils.js";
import { sendUpdatedTeamInformations, teamBroadcast } from "./team_socket.js"; import { sendUpdatedTeamInformations, teamBroadcast } from "./team_socket.js";
import { GameState } from "./game.js"; import { GameState } from "./game.js";
import { secureAdminBroadcast } from "./admin_socket.js"; import { secureAdminBroadcast } from "./admin_socket.js";
import { game } from "./index.js";
config() config()
export class PenaltyController { export class PenaltyController {
constructor(game) { constructor() {
//Number of penalties needed to be eliminated //Number of penalties needed to be eliminated
this.game = game; this.game = game;
this.outOfBoundsSince = {}; this.outOfBoundsSince = {};
@@ -27,6 +28,13 @@ export class PenaltyController {
}, 100); }, 100);
} }
stop(){
this.outOfBoundsSince = {};
if(this.checkIntervalId) {
clearInterval(this.checkIntervalId)
this.checkIntervalId = null;
}
}
/** /**
* Increment the penalty score of a team, send a message to the team and eliminated if necessary * Increment the penalty score of a team, send a message to the team and eliminated if necessary
* @param {Number} teamId The team that will recieve a penalty * @param {Number} teamId The team that will recieve a penalty