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],
},
W: {
color: theme.palette.getContrastText(grey[500]),
backgroundColor: grey[500],
color: theme.palette.getContrastText(grey[50]),
backgroundColor: grey[50],
},
B: {
color: theme.palette.getContrastText(lightBlue[500]),

View File

@ -40,7 +40,7 @@ function shuffle(array) {
return array;
}
const assetData = {
const staticData = {
tiles: [
{ type: "desert", card: 0 },
{ type: "wood", card: 0 },
@ -90,27 +90,8 @@ const assetData = {
[ undefined, "wood", undefined ],
[ "bank", undefined, "wheat" ],
[ 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 processTies = (players) => {
@ -301,7 +282,7 @@ const distributeResources = (game, roll) => {
let tiles = [];
for (let i = 0; i < game.pipOrder.length; i++) {
let index = game.pipOrder[i];
if (assetData.pips[index].roll === roll) {
if (staticData.pips[index].roll === roll) {
if (game.robber === i) {
addChatMessage(game, null, `That pesky ${game.robberName} Roberson stole resources!`);
} else {
@ -418,8 +399,7 @@ const processRoll = (game, dice) => {
}
}
const getPlayer = (game, color) => {
if (!game) {
const newPlayer = () => {
return {
roads: MAX_ROADS,
cities: MAX_CITIES,
@ -438,6 +418,11 @@ const getPlayer = (game, color) => {
};
}
const getPlayer = (game, color) => {
if (!game) {
return newPlayer();
}
return game.players[color];
};
@ -514,7 +499,7 @@ const loadGame = async (id) => {
if (!game.pips || !game.borders || !game.tiles) {
[ "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];
if (tmp.name && tmp.name.toLowerCase() === name.toLowerCase()) {
if (!tmp.player || (Date.now() - tmp.player.lastActive) > 60000) {
tmp.player = game.sessions[key];
session.color = game.sessions[key].color;
session.initialSettlement = game.sessions[key].initialSettlement;
session.color = tmp.color;
session.player = tmp.player;
session.initialSettlement = tmp.initialSettlement;
delete game.sessions[key];
} else {
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) {
layout.tiles.forEach((tile, index) => {
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)) {
receives[resource] = 0;
}
@ -2734,55 +2719,29 @@ const sendGame = async (req, res, game, error) => {
const resetGame = (game) => {
game.state = 'lobby';
game.turns = 0;
game.placements = {
corners: [],
roads: []
};
Object.assign(game, {
state: 'lobby',
turn: 0,
sheep: 19,
ore: 19,
wool: 19,
brick: 19,
wheat: 19,
longestRoad: null,
largestArmy: null,
developmentCards: assetData.developmentCards.slice(),
turn: {}
placements: {
corners: [],
roads: []
},
developmentCards: [],
turn: {},
});
for (let key in game.players) {
Object.assign(game.players[key], {
wheat: 0,
sheep: 0,
stone: 0,
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);
delete game.longestRoad;
delete game.longestArmy;
delete game.longestRoadLength;
delete game.winner;
delete game.longestRoad;
/* Populate the game corner and road placement data as cleared */
for (let i = 0; i < layout.corners.length; i++) {
game.placements.corners[i] = {
color: undefined,
@ -2796,6 +2755,44 @@ const resetGame = (game) => {
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) => {
@ -2814,26 +2811,6 @@ const createGame = (id) => {
}
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
};
@ -2842,13 +2819,14 @@ const createGame = (id) => {
`New game created with Beginner's Layout: ${game.id}`);
[ "pips", "borders", "tiles" ].forEach((field) => {
game[field] = assetData[field]
game[field] = staticData[field]
});
resetGame(game);
games[game.id] = game;
setBeginnerGame(game);
return game;
};