1
0

Reset all game data in resetGame

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-02-27 13:56:31 -08:00
parent 6cd0852bd4
commit edde72f44a
2 changed files with 84 additions and 106 deletions

View File

@ -22,8 +22,8 @@ const useStyles = makeStyles((theme) => ({
backgroundColor: orange[500], backgroundColor: orange[500],
}, },
W: { W: {
color: theme.palette.getContrastText(grey[500]), color: theme.palette.getContrastText(grey[50]),
backgroundColor: grey[500], backgroundColor: grey[50],
}, },
B: { B: {
color: theme.palette.getContrastText(lightBlue[500]), color: theme.palette.getContrastText(lightBlue[500]),

View File

@ -40,7 +40,7 @@ function shuffle(array) {
return array; return array;
} }
const assetData = { const staticData = {
tiles: [ tiles: [
{ type: "desert", card: 0 }, { type: "desert", card: 0 },
{ type: "wood", card: 0 }, { type: "wood", card: 0 },
@ -90,27 +90,8 @@ const assetData = {
[ undefined, "wood", undefined ], [ undefined, "wood", undefined ],
[ "bank", undefined, "wheat" ], [ "bank", undefined, "wheat" ],
[ undefined, "stone", undefined ] [ undefined, "stone", undefined ]
],
developmentCards: [
] ]
}; };
for (let i = 1; i <= 14; i++) {
assetData.developmentCards.push({
type: 'army',
card: i
});
}
[ 'monopoly', 'road-1', 'road-2', 'year-of-plenty'].forEach(card => assetData.developmentCards.push({
type: 'progress',
card: card
}));
[ 'market', 'library', 'palace', 'university'].forEach(card => assetData.developmentCards.push({
type: 'vp',
card: card
}));
const games = {}; const games = {};
const processTies = (players) => { const processTies = (players) => {
@ -301,7 +282,7 @@ const distributeResources = (game, roll) => {
let tiles = []; let tiles = [];
for (let i = 0; i < game.pipOrder.length; i++) { for (let i = 0; i < game.pipOrder.length; i++) {
let index = game.pipOrder[i]; let index = game.pipOrder[i];
if (assetData.pips[index].roll === roll) { if (staticData.pips[index].roll === roll) {
if (game.robber === i) { if (game.robber === i) {
addChatMessage(game, null, `That pesky ${game.robberName} Roberson stole resources!`); addChatMessage(game, null, `That pesky ${game.robberName} Roberson stole resources!`);
} else { } else {
@ -418,24 +399,28 @@ const processRoll = (game, dice) => {
} }
} }
const newPlayer = () => {
return {
roads: MAX_ROADS,
cities: MAX_CITIES,
settlements: MAX_SETTLEMENTS,
points: 0,
status: "Not active",
lastActive: 0,
order: 0,
stone: 0,
wheat: 0,
sheep: 0,
wood: 0,
brick: 0,
army: 0,
development: []
};
}
const getPlayer = (game, color) => { const getPlayer = (game, color) => {
if (!game) { if (!game) {
return { return newPlayer();
roads: MAX_ROADS,
cities: MAX_CITIES,
settlements: MAX_SETTLEMENTS,
points: 0,
status: "Not active",
lastActive: 0,
order: 0,
stone: 0,
wheat: 0,
sheep: 0,
wood: 0,
brick: 0,
army: 0,
development: []
};
} }
return game.players[color]; return game.players[color];
@ -514,7 +499,7 @@ const loadGame = async (id) => {
if (!game.pips || !game.borders || !game.tiles) { if (!game.pips || !game.borders || !game.tiles) {
[ "pips", "borders", "tiles" ].forEach((field) => { [ "pips", "borders", "tiles" ].forEach((field) => {
game[field] = assetData[field] game[field] = staticData[field]
}); });
} }
@ -792,9 +777,9 @@ const setPlayerName = (game, session, name) => {
const tmp = game.sessions[key]; const tmp = game.sessions[key];
if (tmp.name && tmp.name.toLowerCase() === name.toLowerCase()) { if (tmp.name && tmp.name.toLowerCase() === name.toLowerCase()) {
if (!tmp.player || (Date.now() - tmp.player.lastActive) > 60000) { if (!tmp.player || (Date.now() - tmp.player.lastActive) > 60000) {
tmp.player = game.sessions[key]; session.color = tmp.color;
session.color = game.sessions[key].color; session.player = tmp.player;
session.initialSettlement = game.sessions[key].initialSettlement; session.initialSettlement = tmp.initialSettlement;
delete game.sessions[key]; delete game.sessions[key];
} else { } else {
return `${name} is already taken and has been active in the last minute.`; return `${name} is already taken and has been active in the last minute.`;
@ -2440,7 +2425,7 @@ router.put("/:id/:action/:value?", async (req, res) => {
if (session.initialSettlement) { if (session.initialSettlement) {
layout.tiles.forEach((tile, index) => { layout.tiles.forEach((tile, index) => {
if (tile.corners.indexOf(session.initialSettlement) !== -1) { if (tile.corners.indexOf(session.initialSettlement) !== -1) {
const resource = assetData.tiles[game.tileOrder[index]].type; const resource = staticData.tiles[game.tileOrder[index]].type;
if (!(resource in receives)) { if (!(resource in receives)) {
receives[resource] = 0; receives[resource] = 0;
} }
@ -2734,55 +2719,29 @@ const sendGame = async (req, res, game, error) => {
const resetGame = (game) => { const resetGame = (game) => {
game.state = 'lobby';
game.turns = 0;
game.placements = {
corners: [],
roads: []
};
Object.assign(game, { Object.assign(game, {
state: 'lobby',
turn: 0,
sheep: 19, sheep: 19,
ore: 19, ore: 19,
wool: 19, wool: 19,
brick: 19, brick: 19,
wheat: 19, wheat: 19,
longestRoad: null, placements: {
largestArmy: null, corners: [],
developmentCards: assetData.developmentCards.slice(), roads: []
turn: {} },
developmentCards: [],
turn: {},
}); });
for (let key in game.players) { delete game.longestRoad;
Object.assign(game.players[key], { delete game.longestArmy;
wheat: 0, delete game.longestRoadLength;
sheep: 0, delete game.winner;
stone: 0, delete game.longestRoad;
brick: 0,
wood: 0,
roads: MAX_ROADS,
cities: MAX_CITIES,
settlements: MAX_SETTLEMENTS,
points: 0,
development: [],
banks: [],
army: 0,
playedCard: 0,
haveResources: false,
unplayed: 0,
longestRoad: 0,
mustDiscard: 0,
gives: [],
gets: []
});
game.players[key].order = 0;
delete game.players[key].orderRoll;
delete game.players[key].orderStatus;
}
shuffle(game.developmentCards);
/* Populate the game corner and road placement data as cleared */
for (let i = 0; i < layout.corners.length; i++) { for (let i = 0; i < layout.corners.length; i++) {
game.placements.corners[i] = { game.placements.corners[i] = {
color: undefined, color: undefined,
@ -2796,6 +2755,44 @@ const resetGame = (game) => {
type: undefined type: undefined
}; };
} }
/* Populate the game development cards with a fresh deck */
for (let i = 1; i <= 14; i++) {
game.developmentCards.push({
type: 'army',
card: i
});
}
[ 'monopoly', 'road-1', 'road-2', 'year-of-plenty']
.forEach(card => game.developmentCards.push({
type: 'progress',
card: card
}));
[ 'market', 'library', 'palace', 'university']
.forEach(card => game.developmentCards.push({
type: 'vp',
card: card
}));
shuffle(game.developmentCards);
/* Reset all player data */
game.players = {
R: getPlayer(),
O: getPlayer(),
B: getPlayer(),
W: getPlayer()
};
/* Reconnect sessions to new player objects */
for (let key in game.sessions) {
const session = game.sessions[key];
if (session.color) {
session.player = game.players[session.color];
}
}
} }
const createGame = (id) => { const createGame = (id) => {
@ -2814,26 +2811,6 @@ const createGame = (id) => {
} }
const game = { const game = {
startTime: Date.now(),
turns: 0,
state: "lobby", /* lobby, active, finished */
tokens: [],
players: {
R: getPlayer(),
O: getPlayer(),
B: getPlayer(),
W: getPlayer()
},
developmentCards: assetData.developmentCards.slice(),
dice: [ 0, 0 ],
sheep: 19,
ore: 19,
wool: 19,
brick: 19,
wheat: 19,
longestRoad: null,
largestArmy: null,
chat: [],
id: id id: id
}; };
@ -2842,13 +2819,14 @@ const createGame = (id) => {
`New game created with Beginner's Layout: ${game.id}`); `New game created with Beginner's Layout: ${game.id}`);
[ "pips", "borders", "tiles" ].forEach((field) => { [ "pips", "borders", "tiles" ].forEach((field) => {
game[field] = assetData[field] game[field] = staticData[field]
}); });
resetGame(game); resetGame(game);
games[game.id] = game; games[game.id] = game;
setBeginnerGame(game); setBeginnerGame(game);
return game; return game;
}; };