defined logic for picking up noble, adding to score

This commit is contained in:
2022-08-06 19:14:40 -05:00
parent b0c81078ae
commit adc653abbf
2 changed files with 49 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
import getTotalBuyingPower from "./getTotalBuyingPower";
import { NobleData, PlayerData, ResourceCost } from "./types";
export const canPickUpNoble = (player: PlayerData, noble: NobleData) => {
const totalBuyingPower = getTotalBuyingPower(player);
const playerInventory = player.inventory;
for (let key of Object.keys(totalBuyingPower)) {
const typedKey = key as keyof ResourceCost;
let coinValue = playerInventory[typedKey] || 0;
if (!noble.resourceCost[typedKey]) continue;
// @ts-ignore
if ((totalBuyingPower[typedKey] - coinValue) >= noble.resourceCost[typedKey]) {
continue;
} else {
return;
}
}
return noble;
}

View File

@@ -1,5 +1,6 @@
import { AppState, CardData, NobleData, PlayerData, ResourceCost } from "./types";
import CardDeck from '../data/cards.json';
import { useCurrentPlayer } from "./useCurrentPlayer";
export const initialActions = {
buyCard: { active: false },
@@ -76,4 +77,30 @@ export const setStateReserveCard = (prev: AppState) => {
}
}
}
}
export const setStateGetNoble = (prev: AppState, noble: NobleData) => {
const currentPlayer = useCurrentPlayer(prev);
if (!currentPlayer) return prev;
const updatedPlayer = {
...currentPlayer,
nobles: [...currentPlayer.nobles, noble],
points: currentPlayer.points + 3
}
const idx = prev.players.indexOf(currentPlayer);
const newPlayers = prev.players;
newPlayers[idx] = updatedPlayer;
const newNobles = prev.gameboard.nobles.filter((x: NobleData) => x.resourceCost !== noble.resourceCost);
return {
...prev,
players: newPlayers,
gameboard: {
...prev.gameboard,
nobles: newNobles
}
}
}