UNPKG

@jeremyckahn/farmhand

Version:
60 lines (48 loc) 1.5 kB
import { chooseRandomIndex } from '../../utils/chooseRandomIndex.js' import { getCropFromItemId } from '../../utils/getCropFromItemId.js' import { getFinalCropItemIdFromSeedItemId } from '../../utils/getFinalCropItemIdFromSeedItemId.js' import { itemsMap } from '../../data/maps.js' import { decrementItemFromInventory } from './decrementItemFromInventory.js' import { processSprinklers } from './processSprinklers.js' import { modifyFieldPlotAt } from './modifyFieldPlotAt.js' export const plantInPlot = ( state: farmhand.state, x: number, y: number, plantableItemId: string ): farmhand.state => { if ( !plantableItemId || !state.inventory.some(({ id }) => id === plantableItemId) ) { return state } const { field } = state const row = field[y] if (row[x]) { // Something is already planted in field[x][y] return state } const { growsInto } = itemsMap[plantableItemId] const variationIdx = Array.isArray(growsInto) ? chooseRandomIndex(growsInto) : 0 const finalCropItemId = getFinalCropItemIdFromSeedItemId( plantableItemId, variationIdx ) if (!finalCropItemId) { return state } state = modifyFieldPlotAt(state, x, y, () => getCropFromItemId(finalCropItemId) ) state = decrementItemFromInventory(state, plantableItemId) state = processSprinklers(state) return { ...state, selectedItemId: state.inventory.find(({ id }) => id === plantableItemId) ? plantableItemId : '', } }