1
0

Game reset logic adjusted to bind to players.

Reset the robber on resetGame

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-02-27 15:48:57 -08:00
parent 6f7417ba75
commit 8200697573

View File

@ -492,29 +492,6 @@ const loadGame = async (id) => {
game = createGame(id);
}
if (!game.pipOrder || !game.borderOrder || !game.tileOrder) {
console.log("Shuffling old save file");
shuffleBoard(game);
}
if (!game.pips || !game.borders || !game.tiles) {
[ "pips", "borders", "tiles" ].forEach((field) => {
game[field] = staticData[field]
});
}
if (game.state === 'active') {
game.state = 'initial-placement';
}
if (typeof game.turn !== 'object') {
game.turn = {};
}
if (!game.placements) {
resetGame(game);
}
/* Reconnect session player colors to the player objects */
for (let id in game.sessions) {
const session = game.sessions[id];
@ -526,25 +503,15 @@ const loadGame = async (id) => {
}
}
for (let color in game.players) {
if (!game.players[color].development) {
game.players[color].development = [];
}
if (!game.players[color].army) {
game.players[color].army = 0;
}
}
games[id] = game;
return game;
};
const clearPlayer = (player) => {
player.status = 'Not active';
player.lastActive = 0;
player.order = 0;
delete player.orderRoll;
delete player.orderStatus;
for (let key in player) {
delete player[key];
}
Object.assign(player, newPlayer());
}
const canGiveBuilding = (game) => {
@ -569,15 +536,6 @@ const adminActions = (game, action, value) => {
}
break;
case "state":
switch (value) {
case 'game-order':
resetGame(game);
game.state = 'game-order';
break;
}
break;
case "give":
parts = value.match(/^([^-]+)(-(.*))?$/);
if (!parts) {
@ -2440,7 +2398,7 @@ router.put("/:id/:action/:value?", async (req, res) => {
addChatMessage(game, session, `${session.name} receives ${message.join(', ')}.`);
}
}
addChatMessage(game, session, `It is ${name}'s turn.`);
addChatMessage(game, null, `It is ${name}'s turn.`);
game.state = 'normal';
}
}
@ -2514,7 +2472,6 @@ router.put("/:id/:action/:value?", async (req, res) => {
break;
}
resetGame(game);
addChatMessage(game, null, `${name} requested to start the game.`);
game.state = state;
break;
@ -2719,6 +2676,7 @@ const sendGame = async (req, res, game, error) => {
}
const resetGame = (game) => {
console.log(`Reseting ${game.id}`);
Object.assign(game, {
state: 'lobby',
@ -2780,18 +2738,26 @@ const resetGame = (game) => {
shuffle(game.developmentCards);
/* Reset all player data */
game.players = {
R: getPlayer(),
O: getPlayer(),
B: getPlayer(),
W: getPlayer()
};
for (let color in game.players) {
clearPlayer(game.players[color]);
}
/* Reconnect sessions to new player objects */
/* Ensure sessions are connected to player objects */
for (let key in game.sessions) {
const session = game.sessions[key];
if (session.color) {
session.player = game.players[session.color];
session.player.status = 'Active';
session.player.lastActive = Date.now();
}
}
/* Put the robber back on the Desert */
for (let i = 0; i < game.pipOrder.length; i++) {
if (game.pipOrder[i] === 18) {
console.log(`Setting robber at ${i}`);
game.robber = i;
break;
}
}
}