@jeremyckahn/farmhand
Version:
A farming game
47 lines (38 loc) • 1.27 kB
text/typescript
import { getAdjustedItemValue } from '../../utils/getAdjustedItemValue.js'
import { inventorySpaceRemaining } from '../../utils/inventorySpaceRemaining.js'
import { moneyTotal } from '../../utils/moneyTotal.js'
import { PURCHASED_ITEM_PEER_NOTIFICATION } from '../../templates.js'
import { addItemToInventory } from './addItemToInventory.js'
import { prependPendingPeerMessage } from './index.js'
export const purchaseItem = (
state: farmhand.state,
item: farmhand.item,
howMany: number = 1
): farmhand.state => {
const { money, todaysPurchases, valueAdjustments } = state
const numberOfItemsToAdd = Math.min(howMany, inventorySpaceRemaining(state))
if (numberOfItemsToAdd === 0) {
return state
}
const value = getAdjustedItemValue(valueAdjustments, item.id)
const totalValue = value * numberOfItemsToAdd
if (totalValue > money) {
return state
}
state = prependPendingPeerMessage(
state,
PURCHASED_ITEM_PEER_NOTIFICATION('', howMany, item)
)
return addItemToInventory(
{
...state,
money: moneyTotal(money, -totalValue),
todaysPurchases: {
...todaysPurchases,
[item.id]: (todaysPurchases[item.id] || 0) + numberOfItemsToAdd,
},
},
item,
numberOfItemsToAdd
)
}