in progress: debugging buy card action
This commit is contained in:
@@ -4,10 +4,9 @@ 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";
|
||||||
|
|
||||||
export const tooExpensive = (card: CardData, state: AppState): boolean => {
|
const getTotalBuyingPower = (state: AppState) => {
|
||||||
const currentPlayer = useCurrentPlayer(state);
|
const currentPlayer = useCurrentPlayer(state);
|
||||||
if (!currentPlayer) return true;
|
|
||||||
for (let [gemType, cost] of Object.entries(card.resourceCost)) {
|
|
||||||
let totalBuyingPower = {
|
let totalBuyingPower = {
|
||||||
ruby: 0,
|
ruby: 0,
|
||||||
sapphire: 0,
|
sapphire: 0,
|
||||||
@@ -17,6 +16,8 @@ export const tooExpensive = (card: CardData, state: AppState): boolean => {
|
|||||||
gold: 0,
|
gold: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!currentPlayer) return totalBuyingPower;
|
||||||
|
|
||||||
for (let [key,quantity] of Object.entries(currentPlayer.inventory)) {
|
for (let [key,quantity] of Object.entries(currentPlayer.inventory)) {
|
||||||
totalBuyingPower[key as keyof ResourceCost] += quantity;
|
totalBuyingPower[key as keyof ResourceCost] += quantity;
|
||||||
}
|
}
|
||||||
@@ -25,6 +26,15 @@ export const tooExpensive = (card: CardData, state: AppState): boolean => {
|
|||||||
totalBuyingPower[each.gemValue as keyof ResourceCost] += 1;
|
totalBuyingPower[each.gemValue as keyof ResourceCost] += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return totalBuyingPower;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const tooExpensive = (card: CardData, state: AppState): boolean => {
|
||||||
|
const currentPlayer = useCurrentPlayer(state);
|
||||||
|
if (!currentPlayer) return true;
|
||||||
|
|
||||||
|
for (let [gemType, cost] of Object.entries(card.resourceCost)) {
|
||||||
|
let totalBuyingPower = getTotalBuyingPower(state);
|
||||||
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
|
||||||
|
if (totalBuyingPower[gem as keyof ResourceCost] !== inventoryValue) {
|
||||||
|
console.log('caught');
|
||||||
|
}
|
||||||
|
|
||||||
while (i > 0) {
|
while (i > 0) {
|
||||||
newInventoryValue--;
|
inventoryValue -= 1;
|
||||||
|
globalResource += 1;
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
|
|
||||||
resourceToReplenish += cost;
|
newResourcePool[gem as keyof ResourceCost] = globalResource;
|
||||||
newPlayerInventory[gem as keyof ResourceCost] = newInventoryValue;
|
newPlayerInventory[gem as keyof ResourceCost] = inventoryValue;
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user