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],
|
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]),
|
||||||
|
@ -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,
|
/* Populate the game corner and road placement data as cleared */
|
||||||
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);
|
|
||||||
|
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user