@boardgamers/container-engine
Advanced tools
Comparing version 1.0.6 to 1.0.7
@@ -18,3 +18,3 @@ "use strict"; | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer) | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player)) | ||
moves[move_1.MoveName.Undo] = [true]; | ||
@@ -34,3 +34,3 @@ return moves; | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer) | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player)) | ||
moves[move_1.MoveName.Undo] = [true]; | ||
@@ -128,3 +128,5 @@ return moves; | ||
// BuyFactory | ||
if (player.actions > 0 && player.money >= (player.factories.length + 1) * 3) { | ||
if (player.actions > 0 && | ||
player.money >= (player.factories.length + 1) * 3 && | ||
player.factories.length < 4) { | ||
const factoriesLeft = []; | ||
@@ -223,3 +225,3 @@ Object.values(gamestate_1.ContainerColor).forEach((color) => { | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer) | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player)) | ||
moves[move_1.MoveName.Undo] = [true]; | ||
@@ -226,0 +228,0 @@ return moves; |
@@ -63,3 +63,3 @@ "use strict"; | ||
startingPlayer, | ||
currentPlayer: startingPlayer, | ||
currentPlayers: [startingPlayer], | ||
containersLeft, | ||
@@ -90,4 +90,4 @@ factoriesLeft, | ||
G.log.push({ type: 'event', event: { name: log_1.GameEventName.GameStart } }); | ||
G.players[G.currentPlayer].actions = 2; | ||
G.players[G.currentPlayer].availableMoves = available_moves_1.availableMoves(G, G.players[G.currentPlayer]); | ||
G.players[startingPlayer].actions = 2; | ||
G.players[startingPlayer].availableMoves = available_moves_1.availableMoves(G, G.players[startingPlayer]); | ||
return G; | ||
@@ -121,3 +121,3 @@ } | ||
function currentPlayers(G) { | ||
return [G.currentPlayer]; | ||
return G.currentPlayers; | ||
} | ||
@@ -129,3 +129,3 @@ exports.currentPlayers = currentPlayers; | ||
const available = (_a = player.availableMoves) === null || _a === void 0 ? void 0 : _a[move.name]; | ||
assert_1.default(G.currentPlayer === playerNumber, 'It is not your turn!'); | ||
assert_1.default(G.currentPlayers.includes(playerNumber), 'It is not your turn!'); | ||
assert_1.default(available, 'You are not allowed to run the command ' + move.name); | ||
@@ -302,5 +302,5 @@ assert_1.default(available.some((x) => lodash_1.isEqual(x, move.data)), 'Wrong argument for the command ' + move.name); | ||
player.actions = 0; | ||
G.auctioningPlayer = G.currentPlayer; | ||
G.auctioningPlayer = G.currentPlayers[0]; | ||
G.phase = gamestate_1.Phase.Bid; | ||
nextPlayer(G); | ||
G.currentPlayers = G.players.map((p) => p.id).filter((id) => id !== G.auctioningPlayer); | ||
} | ||
@@ -373,3 +373,3 @@ else { | ||
player.bid = move.extraData.price; | ||
nextPlayer(G); | ||
G.currentPlayers = G.currentPlayers.filter((id) => id !== player.id); | ||
} | ||
@@ -385,10 +385,8 @@ else { | ||
player.additionalBid = move.extraData.price; | ||
do { | ||
nextPlayer(G); | ||
} while (G.highestBidders.indexOf(G.currentPlayer) === -1 && G.auctioningPlayer !== G.currentPlayer); | ||
G.currentPlayers = G.currentPlayers.filter((id) => id !== player.id); | ||
} | ||
if (G.auctioningPlayer === G.currentPlayer) { | ||
if (G.currentPlayers.length === 0) { | ||
if (G.highestBidders.length === 0) { | ||
G.players | ||
.filter((p) => p.id !== G.currentPlayer) | ||
.filter((p) => p.id !== G.auctioningPlayer) | ||
.forEach((p) => { | ||
@@ -399,11 +397,10 @@ p.showBid = true; | ||
const highestBidders = G.players | ||
.filter((p) => p.id != G.currentPlayer && p.bid === highestBid) | ||
.filter((p) => p.id != G.auctioningPlayer && p.bid === highestBid) | ||
.map((p) => p.id); | ||
G.highestBidders = highestBidders; | ||
if (highestBidders.length > 1) { | ||
while (highestBidders.indexOf(G.currentPlayer) === -1) { | ||
nextPlayer(G); | ||
} | ||
G.currentPlayers = highestBidders; | ||
} | ||
else { | ||
G.currentPlayers = [G.auctioningPlayer]; | ||
G.phase = gamestate_1.Phase.AcceptDecline; | ||
@@ -415,3 +412,3 @@ } | ||
const highestBidders = G.players | ||
.filter((p) => p.id != G.currentPlayer && p.bid + p.additionalBid === highestBid) | ||
.filter((p) => p.id != G.auctioningPlayer && p.bid + p.additionalBid === highestBid) | ||
.map((p) => p.id); | ||
@@ -422,2 +419,3 @@ G.highestBidders = highestBidders; | ||
}); | ||
G.currentPlayers = [G.auctioningPlayer]; | ||
G.phase = gamestate_1.Phase.AcceptDecline; | ||
@@ -454,3 +452,3 @@ } | ||
G.phase = gamestate_1.Phase.GameEnd; | ||
G.currentPlayer = undefined; | ||
G.currentPlayers = []; | ||
calculateEndScore(G); | ||
@@ -489,3 +487,3 @@ } | ||
G.phase = gamestate_1.Phase.GameEnd; | ||
G.currentPlayer = undefined; | ||
G.currentPlayers = []; | ||
calculateEndScore(G); | ||
@@ -519,3 +517,3 @@ } | ||
G.phase = gamestate_1.Phase.GameEnd; | ||
G.currentPlayer = undefined; | ||
G.currentPlayers = []; | ||
calculateEndScore(G); | ||
@@ -529,3 +527,3 @@ } | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer && !fake) { | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player) && !fake) { | ||
G.log.pop(); | ||
@@ -540,4 +538,3 @@ G = reconstructState(getBaseState(G), G.log); | ||
player.lastMove = move; | ||
if (G.currentPlayer !== undefined) | ||
G.players[G.currentPlayer].availableMoves = available_moves_1.availableMoves(G, G.players[G.currentPlayer]); | ||
G.currentPlayers.forEach((p) => (G.players[p].availableMoves = available_moves_1.availableMoves(G, G.players[p]))); | ||
return G; | ||
@@ -816,6 +813,6 @@ } | ||
function nextPlayer(G) { | ||
G.currentPlayer = (G.currentPlayer + 1) % G.players.length; | ||
G.currentPlayers = [(G.currentPlayers[0] + 1) % G.players.length]; | ||
} | ||
function doUpkeep(G) { | ||
const player = G.players[G.currentPlayer]; | ||
const player = G.players[G.currentPlayers[0]]; | ||
const loanCount = player.loans.length; | ||
@@ -920,8 +917,9 @@ const interest = []; | ||
} | ||
G.players[G.currentPlayer].actions = 2; | ||
G.players[G.currentPlayer].produced = []; | ||
G.players[G.currentPlayer].containersOnFactoryStore.forEach((c) => (c.moved = false)); | ||
G.players[G.currentPlayer].containersOnWarehouseStore.forEach((c) => (c.moved = false)); | ||
G.players[G.currentPlayer].didDomesticSale = false; | ||
if (G.currentPlayer == G.startingPlayer) { | ||
const currentPlayer = G.currentPlayers[0]; | ||
G.players[currentPlayer].actions = 2; | ||
G.players[currentPlayer].produced = []; | ||
G.players[currentPlayer].containersOnFactoryStore.forEach((c) => (c.moved = false)); | ||
G.players[currentPlayer].containersOnWarehouseStore.forEach((c) => (c.moved = false)); | ||
G.players[currentPlayer].didDomesticSale = false; | ||
if (currentPlayer == G.startingPlayer) { | ||
G.round++; | ||
@@ -928,0 +926,0 @@ } |
@@ -109,3 +109,3 @@ import { AvailableMoves } from './available-moves'; | ||
startingPlayer: number; | ||
currentPlayer: number | undefined; | ||
currentPlayers: number[]; | ||
containersLeft: ContainerPiece[]; | ||
@@ -112,0 +112,0 @@ factoriesLeft: FactoryPiece[]; |
@@ -13,3 +13,3 @@ import type { GameState } from './index'; | ||
export declare function dropPlayer(G: GameState, player: number): Promise<GameState>; | ||
export declare function currentPlayer(G: GameState): number | undefined; | ||
export declare function currentPlayer(G: GameState): number[]; | ||
export declare function messages(G: GameState): { | ||
@@ -16,0 +16,0 @@ messages: never[]; |
@@ -83,3 +83,3 @@ "use strict"; | ||
function currentPlayer(G) { | ||
return G.currentPlayer; | ||
return G.currentPlayers; | ||
} | ||
@@ -86,0 +86,0 @@ exports.currentPlayer = currentPlayer; |
{ | ||
"name": "@boardgamers/container-engine", | ||
"version": "1.0.6", | ||
"version": "1.0.7", | ||
"description": "An engine for Container", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -41,3 +41,3 @@ import { remove } from 'lodash'; | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer) moves[MoveName.Undo] = [true]; | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player)) moves[MoveName.Undo] = [true]; | ||
@@ -59,3 +59,3 @@ return moves; | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer) moves[MoveName.Undo] = [true]; | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player)) moves[MoveName.Undo] = [true]; | ||
@@ -176,3 +176,7 @@ return moves; | ||
// BuyFactory | ||
if (player.actions > 0 && player.money >= (player.factories.length + 1) * 3) { | ||
if ( | ||
player.actions > 0 && | ||
player.money >= (player.factories.length + 1) * 3 && | ||
player.factories.length < 4 | ||
) { | ||
const factoriesLeft: ContainerColor[] = []; | ||
@@ -305,3 +309,3 @@ Object.values(ContainerColor).forEach((color) => { | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer) moves[MoveName.Undo] = [true]; | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player)) moves[MoveName.Undo] = [true]; | ||
@@ -308,0 +312,0 @@ return moves; |
@@ -20,3 +20,3 @@ import { expect } from 'chai'; | ||
// G.currentPlayer = 0; | ||
// G.currentPlayers = [0]; | ||
// G.players[0].actions = 2; | ||
@@ -23,0 +23,0 @@ // G.players[0].availableMoves = availableMoves(G, G.players[0]); |
@@ -75,3 +75,3 @@ import assert from 'assert'; | ||
startingPlayer, | ||
currentPlayer: startingPlayer, | ||
currentPlayers: [startingPlayer], | ||
containersLeft, | ||
@@ -108,4 +108,4 @@ factoriesLeft, | ||
G.players[G.currentPlayer!].actions = 2; | ||
G.players[G.currentPlayer!].availableMoves = availableMoves(G, G.players[G.currentPlayer!]); | ||
G.players[startingPlayer].actions = 2; | ||
G.players[startingPlayer].availableMoves = availableMoves(G, G.players[startingPlayer]); | ||
@@ -139,3 +139,3 @@ return G; | ||
export function currentPlayers(G: GameState): number[] { | ||
return [G.currentPlayer!]; | ||
return G.currentPlayers; | ||
} | ||
@@ -147,3 +147,3 @@ | ||
assert(G.currentPlayer === playerNumber, 'It is not your turn!'); | ||
assert(G.currentPlayers.includes(playerNumber), 'It is not your turn!'); | ||
assert(available, 'You are not allowed to run the command ' + move.name); | ||
@@ -372,5 +372,5 @@ assert( | ||
player.actions = 0; | ||
G.auctioningPlayer = G.currentPlayer; | ||
G.auctioningPlayer = G.currentPlayers[0]; | ||
G.phase = Phase.Bid; | ||
nextPlayer(G); | ||
G.currentPlayers = G.players.map((p) => p.id).filter((id) => id !== G.auctioningPlayer); | ||
} else { | ||
@@ -460,3 +460,3 @@ player.actions--; | ||
player.bid = move.extraData.price; | ||
nextPlayer(G); | ||
G.currentPlayers = G.currentPlayers.filter((id) => id !== player.id); | ||
} else { | ||
@@ -471,11 +471,9 @@ G.hiddenLog.push({ | ||
player.additionalBid = move.extraData.price; | ||
do { | ||
nextPlayer(G); | ||
} while (G.highestBidders.indexOf(G.currentPlayer) === -1 && G.auctioningPlayer !== G.currentPlayer); | ||
G.currentPlayers = G.currentPlayers.filter((id) => id !== player.id); | ||
} | ||
if (G.auctioningPlayer === G.currentPlayer) { | ||
if (G.currentPlayers.length === 0) { | ||
if (G.highestBidders.length === 0) { | ||
G.players | ||
.filter((p) => p.id !== G.currentPlayer) | ||
.filter((p) => p.id !== G.auctioningPlayer) | ||
.forEach((p) => { | ||
@@ -486,10 +484,9 @@ p.showBid = true; | ||
const highestBidders = G.players | ||
.filter((p) => p.id != G.currentPlayer && p.bid === highestBid) | ||
.filter((p) => p.id != G.auctioningPlayer && p.bid === highestBid) | ||
.map((p) => p.id); | ||
G.highestBidders = highestBidders; | ||
if (highestBidders.length > 1) { | ||
while (highestBidders.indexOf(G.currentPlayer) === -1) { | ||
nextPlayer(G); | ||
} | ||
G.currentPlayers = highestBidders; | ||
} else { | ||
G.currentPlayers = [G.auctioningPlayer!]; | ||
G.phase = Phase.AcceptDecline; | ||
@@ -500,3 +497,3 @@ } | ||
const highestBidders = G.players | ||
.filter((p) => p.id != G.currentPlayer && p.bid + p.additionalBid === highestBid) | ||
.filter((p) => p.id != G.auctioningPlayer && p.bid + p.additionalBid === highestBid) | ||
.map((p) => p.id); | ||
@@ -507,2 +504,3 @@ G.highestBidders = highestBidders; | ||
}); | ||
G.currentPlayers = [G.auctioningPlayer!]; | ||
G.phase = Phase.AcceptDecline; | ||
@@ -542,3 +540,3 @@ } | ||
G.phase = Phase.GameEnd; | ||
G.currentPlayer = undefined; | ||
G.currentPlayers = []; | ||
calculateEndScore(G); | ||
@@ -580,3 +578,3 @@ } | ||
G.phase = Phase.GameEnd; | ||
G.currentPlayer = undefined; | ||
G.currentPlayers = []; | ||
calculateEndScore(G); | ||
@@ -614,3 +612,3 @@ } | ||
G.phase = Phase.GameEnd; | ||
G.currentPlayer = undefined; | ||
G.currentPlayers = []; | ||
calculateEndScore(G); | ||
@@ -627,3 +625,3 @@ } | ||
const lastLog = G.log[G.log.length - 1]; | ||
if (lastLog.type == 'move' && lastLog.player == G.currentPlayer && !fake) { | ||
if (lastLog.type == 'move' && G.currentPlayers.includes(lastLog.player) && !fake) { | ||
G.log.pop(); | ||
@@ -641,4 +639,3 @@ G = reconstructState(getBaseState(G), G.log); | ||
if (G.currentPlayer !== undefined) | ||
G.players[G.currentPlayer].availableMoves = availableMoves(G, G.players[G.currentPlayer]); | ||
G.currentPlayers.forEach((p) => (G.players[p].availableMoves = availableMoves(G, G.players[p]))); | ||
@@ -922,7 +919,7 @@ return G; | ||
function nextPlayer(G: GameState) { | ||
G.currentPlayer = (G.currentPlayer! + 1) % G.players.length; | ||
G.currentPlayers = [(G.currentPlayers[0] + 1) % G.players.length]; | ||
} | ||
function doUpkeep(G: GameState) { | ||
const player = G.players[G.currentPlayer!]; | ||
const player = G.players[G.currentPlayers[0]]; | ||
const loanCount = player.loans.length; | ||
@@ -1038,9 +1035,10 @@ const interest: string[] = []; | ||
G.players[G.currentPlayer!].actions = 2; | ||
G.players[G.currentPlayer!].produced = []; | ||
G.players[G.currentPlayer!].containersOnFactoryStore.forEach((c) => (c.moved = false)); | ||
G.players[G.currentPlayer!].containersOnWarehouseStore.forEach((c) => (c.moved = false)); | ||
G.players[G.currentPlayer!].didDomesticSale = false; | ||
const currentPlayer = G.currentPlayers[0]; | ||
G.players[currentPlayer].actions = 2; | ||
G.players[currentPlayer].produced = []; | ||
G.players[currentPlayer].containersOnFactoryStore.forEach((c) => (c.moved = false)); | ||
G.players[currentPlayer].containersOnWarehouseStore.forEach((c) => (c.moved = false)); | ||
G.players[currentPlayer].didDomesticSale = false; | ||
if (G.currentPlayer == G.startingPlayer) { | ||
if (currentPlayer == G.startingPlayer) { | ||
G.round++; | ||
@@ -1047,0 +1045,0 @@ } |
@@ -125,3 +125,3 @@ import { AvailableMoves } from './available-moves'; | ||
startingPlayer: number; | ||
currentPlayer: number | undefined; | ||
currentPlayers: number[]; | ||
containersLeft: ContainerPiece[]; | ||
@@ -128,0 +128,0 @@ factoriesLeft: FactoryPiece[]; |
@@ -72,3 +72,3 @@ import { cloneDeep } from 'lodash'; | ||
export function currentPlayer(G: GameState) { | ||
return G.currentPlayer; | ||
return G.currentPlayers; | ||
} | ||
@@ -75,0 +75,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
172928
3861