Add player container

This commit is contained in:
schmelczerandras 2020-10-24 10:01:54 +02:00
parent 1cd8f5fbe6
commit b55e927a34
16 changed files with 159 additions and 133 deletions

View file

@ -0,0 +1,49 @@
import { CharacterTeam, PlayerInformation, Random } from 'shared';
import { PhysicalContainer } from '../physics/containers/physical-container';
import { Player } from './player';
export class PlayerContainer {
private _players: Array<Player> = [];
constructor(private readonly objects: PhysicalContainer) {}
public createPlayer(playerInfo: PlayerInformation, socket: SocketIO.Socket): Player {
const player = new Player(
playerInfo,
this,
this.objects,
socket,
this.getTeamOfNextPlayer(),
);
this._players.push(player);
return player;
}
public get players(): Array<Player> {
return this._players;
}
public get count(): number {
return this.players.length;
}
public step(deltaTimeInSeconds: number) {
this.players.forEach((p) => p.step(deltaTimeInSeconds));
}
private getTeamOfNextPlayer(): CharacterTeam {
const declaCount = this._players.filter((p) => p.team === CharacterTeam.decla).length;
const redCount = this._players.filter((p) => p.team === CharacterTeam.red).length;
if ((declaCount === redCount && Random.getRandom() >= 0.5) || declaCount < redCount) {
return CharacterTeam.decla;
} else {
return CharacterTeam.red;
}
}
public deletePlayer(player: Player) {
this._players = this._players.filter((p) => p !== player);
}
}