@runox-game/game-engine
Version:
RunoX game engine
81 lines (80 loc) • 4.12 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.StartGameCommand = void 0;
var game_command_1 = require("./game.command");
var command_result_1 = require("./command-result");
var before_turn_event_1 = require("../events/before-turn.event");
var log_levels_enum_1 = require("../log/log-levels.enum");
var constants_1 = require("../constants");
/**
* Class that allows the game to start
*/
var StartGameCommand = /** @class */ (function (_super) {
__extends(StartGameCommand, _super);
/**
* Class that allows the game to start
*/
function StartGameCommand(gameModes) {
var _this = _super.call(this) || this;
_this.gameModes = gameModes || {
randomTakeDeckCard: false,
dedicatePlusFour: false,
};
return _this;
}
StartGameCommand.prototype.execute = function (state) {
var handsLength = constants_1.Constants.NUMBER_OF_CARD_IN_HAND_ON_START;
state.gameModes = this.gameModes;
state.log(" Comienza el juego", log_levels_enum_1.LogLevel.USER);
state.log(" Comienza el juego con modos " + JSON.stringify(state.gameModes) + " ", log_levels_enum_1.LogLevel.ALL);
state.log(" Orden aleatorio a los jugadores", log_levels_enum_1.LogLevel.USER);
state.playersGroup.shufflePlayers();
state.log("El orden de los jugadores es: " + state.playersGroup.players
.map(function (x) { return x.name; })
.join(', '), log_levels_enum_1.LogLevel.USER);
state.log(" Repartiendo cartas", log_levels_enum_1.LogLevel.USER);
state.playersGroup.players.forEach(function (player, index) {
player.hand.addCards(state.deck.cards.splice(index * handsLength, handsLength));
});
var firstStackCard = state.deck.takeCard();
// si la carta tiene efectos entonces busca otra
// TODO: esto simplifica la logica por el momento pero deberia ser solo para +4 y elegir color
while (firstStackCard.hasEffects()) {
state.log(" si la carta tiene efectos entonces busca otra " + firstStackCard.sprite, log_levels_enum_1.LogLevel.ALL);
state.log(" TODO: esto simplifica la logica por el momento pero deberia ser solo para +4 y elegir color", log_levels_enum_1.LogLevel.ALL);
state.deck.addCards([firstStackCard]);
state.log("Barajando", log_levels_enum_1.LogLevel.USER);
state.deck.shuffle();
firstStackCard = state.deck.takeCard();
}
state.stack.addCard(firstStackCard);
state.log(" Carta en la mesa " + firstStackCard.sprite, log_levels_enum_1.LogLevel.USER);
var playerTurn = state.playersGroup.players[0];
state.log(" El primer turno es para " + playerTurn.name, log_levels_enum_1.LogLevel.USER);
state.turn.round = 0;
state.turn.setPlayerTurn(playerTurn);
this.events.dispatchAfterGameStart();
this.events.dispatchBeforeTurn(new before_turn_event_1.BeforeTurnEvent(playerTurn));
};
StartGameCommand.prototype.validate = function (state) {
if (!state.playersGroup.players.length) {
return new command_result_1.CommandValidation(false, 'No hay jugadores en la partida');
}
return new command_result_1.CommandValidation(true);
};
return StartGameCommand;
}(game_command_1.GameCommand));
exports.StartGameCommand = StartGameCommand;