@jeremyckahn/farmhand
Version:
A farming game
39 lines (31 loc) • 999 B
text/typescript
import { inventorySpaceRemaining } from '../../utils/inventorySpaceRemaining.js'
/**
* Only adds as many items as there is room in the inventory for unless
* allowInventoryOverage is true.
*/
export const addItemToInventory = (
state: farmhand.state,
item: farmhand.item,
howMany: number = 1,
allowInventoryOverage: boolean = false
): farmhand.state => {
const { id } = item
const inventory = [...state.inventory]
const numberOfItemsToAdd = allowInventoryOverage
? howMany
: Math.min(howMany, inventorySpaceRemaining(state))
if (numberOfItemsToAdd === 0) {
return state
}
const currentItemSlot = inventory.findIndex(({ id: itemId }) => id === itemId)
if (~currentItemSlot) {
const currentItem = inventory[currentItemSlot]
inventory[currentItemSlot] = {
...currentItem,
quantity: currentItem.quantity + numberOfItemsToAdd,
}
} else {
inventory.push({ id, quantity: numberOfItemsToAdd })
}
return { ...state, inventory }
}