@jeremyckahn/farmhand
Version:
A farming game
55 lines (45 loc) • 1.55 kB
text/typescript
import {
doesInventorySpaceRemain,
getCowFertilizerItem,
getCowFertilizerProductionRate,
} from '../../utils/index.js'
import { FERTILIZERS_PRODUCED } from '../../templates.js'
import { addItemToInventory } from './addItemToInventory.js'
/**
* @param {farmhand.state} state
* @returns {farmhand.state}
*/
export const processCowFertilizerProduction = state => {
const cowInventory = [...state.cowInventory]
const newDayNotifications = [...state.newDayNotifications]
const { length: cowInventoryLength } = cowInventory
const fertilizersProduced = {}
for (let i = 0; i < cowInventoryLength; i++) {
const cow = cowInventory[i]
if (
// `cow.daysSinceProducingFertilizer || 0` is needed because legacy cows
// did not define daysSinceProducingFertilizer.
(cow.daysSinceProducingFertilizer || 0) >
getCowFertilizerProductionRate(cow)
) {
cowInventory[i] = { ...cow, daysSinceProducingFertilizer: 0 }
const fertilizer = getCowFertilizerItem(cow)
const { name } = fertilizer
if (!doesInventorySpaceRemain(state)) {
break
}
fertilizersProduced[name] = (fertilizersProduced[name] || 0) + 1
state = addItemToInventory(state, fertilizer)
}
}
if (Object.keys(fertilizersProduced).length) {
newDayNotifications.push({
message: FERTILIZERS_PRODUCED(
'',
/** @type {Record<string, number>} */ fertilizersProduced
),
severity: 'success',
})
}
return { ...state, cowInventory, newDayNotifications }
}