in progress: debugging buy card action

This commit is contained in:
2022-07-31 14:46:25 -05:00
parent 1122336742
commit 6d7d859fe9
3 changed files with 87 additions and 37 deletions

View File

@@ -4,27 +4,37 @@ 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";
const getTotalBuyingPower = (state: AppState) => {
const currentPlayer = useCurrentPlayer(state);
let totalBuyingPower = {
ruby: 0,
sapphire: 0,
emerald: 0,
diamond: 0,
onyx: 0,
gold: 0,
}
if (!currentPlayer) return totalBuyingPower;
for (let [key,quantity] of Object.entries(currentPlayer.inventory)) {
totalBuyingPower[key as keyof ResourceCost] += quantity;
}
for (let each of currentPlayer.cards) {
totalBuyingPower[each.gemValue as keyof ResourceCost] += 1;
}
return totalBuyingPower;
}
export const tooExpensive = (card: CardData, state: AppState): boolean => { export const tooExpensive = (card: CardData, state: AppState): boolean => {
const currentPlayer = useCurrentPlayer(state); const currentPlayer = useCurrentPlayer(state);
if (!currentPlayer) return true; if (!currentPlayer) return true;
for (let [gemType, cost] of Object.entries(card.resourceCost)) { for (let [gemType, cost] of Object.entries(card.resourceCost)) {
let totalBuyingPower = { let totalBuyingPower = getTotalBuyingPower(state);
ruby: 0,
sapphire: 0,
emerald: 0,
diamond: 0,
onyx: 0,
gold: 0,
}
for (let [key,quantity] of Object.entries(currentPlayer.inventory)) {
totalBuyingPower[key as keyof ResourceCost] += quantity;
}
for (let each of currentPlayer.cards) {
totalBuyingPower[each.gemValue as keyof ResourceCost] += 1;
}
for (let [heldResource, quantity] of Object.entries(totalBuyingPower)) { for (let [heldResource, quantity] of Object.entries(totalBuyingPower)) {
if (gemType === heldResource && quantity < cost) { if (gemType === heldResource && quantity < cost) {
return true; return true;
@@ -52,23 +62,33 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType)
const { newPlayers, roundIncrement } = turnOrderUtil(prev, currentPlayer); const { newPlayers, roundIncrement } = turnOrderUtil(prev, currentPlayer);
let newPlayerInventory = currentPlayer.inventory; let newPlayerInventory = currentPlayer.inventory;
let newResourcePool = prev.gameboard.tradingResources; let newResourcePool = prev.gameboard.tradingResources;
const totalBuyingPower = getTotalBuyingPower(state);
// iterate through cost values of card to purchase
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 inventoryValue = newPlayerInventory[gem as keyof ResourceCost];
let globalResource = newResourcePool[gem as keyof ResourceCost];
let resourceToReplenish = newResourcePool[gem as keyof ResourceCost]; if (!inventoryValue || !globalResource) {
let newInventoryValue = newPlayerInventory[gem as keyof ResourceCost]; continue;
if (!newInventoryValue || !resourceToReplenish) continue; } else {
let i = cost;
let i = cost; // prevents duplication of resources when purchasing a card using permanent resources from cards
while (i > 0) { if (totalBuyingPower[gem as keyof ResourceCost] !== inventoryValue) {
newInventoryValue--; console.log('caught');
i--; }
while (i > 0) {
inventoryValue -= 1;
globalResource += 1;
i--;
}
newResourcePool[gem as keyof ResourceCost] = globalResource;
newPlayerInventory[gem as keyof ResourceCost] = inventoryValue;
} }
resourceToReplenish += cost;
newPlayerInventory[gem as keyof ResourceCost] = newInventoryValue;
newResourcePool[gem as keyof ResourceCost] = resourceToReplenish;
} }
let updatedPlayer: PlayerData = { let updatedPlayer: PlayerData = {
@@ -77,7 +97,7 @@ export const buyCard = (card: CardData, state: AppState, setState: setStateType)
inventory: newPlayerInventory inventory: newPlayerInventory
} }
let newScore = updatedPlayer.points; let newScore = 0;
for (let each of updatedPlayer.cards) { for (let each of updatedPlayer.cards) {
newScore += each.points || 0; newScore += each.points || 0;
} }

View File

@@ -3,8 +3,4 @@ import ReactDOM from 'react-dom/client'
import App from './App' import App from './App'
import './index.css' import './index.css'
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(<App />)
<React.StrictMode>
<App />
</React.StrictMode>
)

View File

@@ -1,4 +1,4 @@
import { AppState, FullDeck, NobleData, setStateType } from "./types"; import { AppState, FullDeck, NobleData, ResourceCost, setStateType } from "./types";
import NobleStore from '../data/nobles.json'; import NobleStore from '../data/nobles.json';
const shuffleDeck = (state: AppState, setState: setStateType) => { const shuffleDeck = (state: AppState, setState: setStateType) => {
@@ -30,6 +30,29 @@ const setNobles = (state: AppState, setState: setStateType) => {
setState({ ...state, gameboard: { ...state.gameboard, nobles: shuffledNobles }}) setState({ ...state, gameboard: { ...state.gameboard, nobles: shuffledNobles }})
} }
const setResources = (state: AppState) => {
let newResources = state.gameboard.tradingResources;
console.log(state.players.length);
switch (state.players.length) {
case 2:
for (let [key, value] of Object.entries(newResources)) {
newResources[key as keyof ResourceCost] = value - 3;
}
break;
case 3:
for (let [key, value] of Object.entries(newResources)) {
newResources[key as keyof ResourceCost] = value - 2;
}
break;
default:
break;
}
console.log(newResources);
return newResources;
}
export const setCardRows = (state: AppState) => { export const setCardRows = (state: AppState) => {
let newDeck = state.gameboard.cardRows; let newDeck = state.gameboard.cardRows;
for (const [key, value] of Object.entries(state.gameboard.deck)) { for (const [key, value] of Object.entries(state.gameboard.deck)) {
@@ -43,7 +66,18 @@ export const setCardRows = (state: AppState) => {
export default function initializeBoard(state: AppState, setState: setStateType) { export default function initializeBoard(state: AppState, setState: setStateType) {
shuffleDeck(state, setState); shuffleDeck(state, setState);
const newDeck = setCardRows(state); const newDeck = setCardRows(state);
setState({ ...state, gameboard: { ...state.gameboard, cardRows: newDeck } }) const newResources = setResources(state);
setState({
...state,
gameboard: {
...state.gameboard,
tradingResources: newResources,
cardRows: newDeck
}
});
setNobles(state, setState); setNobles(state, setState);
} }