Reset all game data in resetGame
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
6cd0852bd4
commit
edde72f44a
@ -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]),
|
||||
|
@ -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,
|
||||
@ -436,6 +416,11 @@ const getPlayer = (game, color) => {
|
||||
army: 0,
|
||||
development: []
|
||||
};
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user