supports basic point tracking and turn order handling on card purchase
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import { turnOrderUtil } from "../../../util/turnOrderUtil";
|
||||||
import { AppState, CardData, PlayerData, ResourceCost, setStateType } from "../../../util/types";
|
import { AppState, CardData, PlayerData, ResourceCost, setStateType } from "../../../util/types";
|
||||||
import { useCurrentPlayer } from "../../../util/useCurrentPlayer";
|
import { useCurrentPlayer } from "../../../util/useCurrentPlayer";
|
||||||
|
|
||||||
@@ -33,10 +34,11 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType)
|
|||||||
setState((prev: AppState) => {
|
setState((prev: AppState) => {
|
||||||
if (!currentPlayer) return prev;
|
if (!currentPlayer) return prev;
|
||||||
|
|
||||||
|
const { newPlayers, roundIncrement } = turnOrderUtil(prev, currentPlayer);
|
||||||
let newInventory = currentPlayer.inventory;
|
let newInventory = currentPlayer.inventory;
|
||||||
|
|
||||||
for (let [gem, cost] of Object.entries(card.resourceCost)) {
|
for (let [gem, cost] of Object.entries(card.resourceCost)) {
|
||||||
if (cost < 1) continue;
|
if (cost < 1) continue;
|
||||||
|
|
||||||
let i = cost;
|
let i = cost;
|
||||||
let newInventoryValue = newInventory[gem as keyof ResourceCost];
|
let newInventoryValue = newInventory[gem as keyof ResourceCost];
|
||||||
if (!newInventoryValue) continue;
|
if (!newInventoryValue) continue;
|
||||||
@@ -45,7 +47,6 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType)
|
|||||||
newInventoryValue--;
|
newInventoryValue--;
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
|
||||||
newInventory[gem as keyof ResourceCost] = newInventoryValue;
|
newInventory[gem as keyof ResourceCost] = newInventoryValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,14 +59,20 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType)
|
|||||||
inventory: newInventory
|
inventory: newInventory
|
||||||
}
|
}
|
||||||
|
|
||||||
let allPlayers = prev.players;
|
let newScore = updatedPlayer.points;
|
||||||
const idx = allPlayers.findIndex((one: PlayerData) => one.id === currentPlayer?.id);
|
for (let each of updatedPlayer.cards) {
|
||||||
|
newScore += each.points || 0;
|
||||||
|
}
|
||||||
|
|
||||||
allPlayers[idx] = updatedPlayer;
|
updatedPlayer.points = newScore;
|
||||||
|
|
||||||
|
const idx = newPlayers.findIndex((one: PlayerData) => one.id === currentPlayer?.id);
|
||||||
|
newPlayers[idx] = updatedPlayer;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...prev,
|
...prev,
|
||||||
players: allPlayers
|
round: (roundIncrement ? prev.round + 1 : prev.round),
|
||||||
|
players: newPlayers
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export const getChips = (state: AppState, setState: setStateType) => {
|
|||||||
setState((prev) => {
|
setState((prev) => {
|
||||||
if (!targetPlayer) return prev;
|
if (!targetPlayer) return prev;
|
||||||
|
|
||||||
const { newPlayers, roundIncrement } = turnOrderUtil(state, targetPlayer);
|
const { newPlayers, roundIncrement } = turnOrderUtil(prev, targetPlayer);
|
||||||
const idx = newPlayers.indexOf(targetPlayer);
|
const idx = newPlayers.indexOf(targetPlayer);
|
||||||
const resources = state.actions.getChips.selection;
|
const resources = state.actions.getChips.selection;
|
||||||
let newResources = prev.gameboard.tradingResources;
|
let newResources = prev.gameboard.tradingResources;
|
||||||
|
|||||||
Reference in New Issue
Block a user