dotup-ts-node-skills-game
Version:
Develop alexa typescript games
99 lines (97 loc) • 3.36 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Enumerations_1 = require("../Constants/Enumerations");
class PlayerTurnOrder {
constructor(model, turnOrderMode = Enumerations_1.TurnOrderMode.Clockwise) {
this.model = model;
if (turnOrderMode !== Enumerations_1.TurnOrderMode.ClockwisePlayer) {
throw new Error('wrong TurnOrderMode');
}
}
reset() {
this.model.CurrentGameState = Enumerations_1.GameState.None;
this.model.CurrentPlayerName = undefined;
this.model.CurrentRound = 0;
this.model.Players.forEach(player => {
player.currentRound = 0;
player.score = 0;
});
}
// cancelGame(): void {
// this.model.CurrentGameState = GameState.Completed;
// }
getCurrentPlayer() {
return this.model.Players.find(item => item.name === this.model.CurrentPlayerName);
}
peekNextPlayer() {
const nextIndex = this.getNextClockwiseIndex();
if (this.isGameCompleted()) {
return undefined;
}
else {
return this.model.Players[nextIndex];
}
}
getNextPlayer() {
if (this.model.CurrentPlayerName === undefined || this.model.CurrentPlayerName === '') {
return this.changePlayer(0);
}
else {
return this.changePlayer(this.getNextClockwiseIndex());
}
}
addScore(value) {
const current = this.getCurrentPlayer();
if (current === undefined) {
throw new Error('no current player');
}
current.score += value;
}
isGameCompleted() {
if (this.allPassedCurrentRound()) {
// All rounds played?
if (this.model.CurrentRound >= this.model.RoundsToPlay) {
// this.model.CurrentGameState = GameState.Completed;
return true;
}
else {
// Next round
return false;
}
}
else {
return false;
}
}
changePlayer(nextIndex) {
// Update game rounds
if (this.allPassedCurrentRound()) {
// All rounds played?
if (this.model.CurrentRound >= this.model.RoundsToPlay) {
// this.model.CurrentGameState = GameState.Completed;
return undefined;
}
else {
// Next round
this.model.CurrentRound += 1;
}
}
// Game is on, return next player
const nextPlayer = this.model.Players[nextIndex];
// Update Player
nextPlayer.currentRound = this.model.CurrentRound;
// Update round
this.model.CurrentPlayerName = nextPlayer.name;
// this.model.CurrentGameState = GameState.Playing;
}
allPassedCurrentRound() {
return this.model.Players.every(player => player.currentRound === this.model.CurrentRound);
}
getNextClockwiseIndex() {
const arr = this.model.Players.map(i => i.name);
const indexOfCurrentPlayer = arr.indexOf(this.model.CurrentPlayerName);
return indexOfCurrentPlayer >= arr.length - 1 ? 0 : indexOfCurrentPlayer + 1;
}
}
exports.PlayerTurnOrder = PlayerTurnOrder;
//# sourceMappingURL=PlayerTurnOrder.js.map