import type { Production } from "./types"; import type { VillageState } from "./village"; function _reduceResources(acc: Production, item: Production): Production { return { wood: acc.wood + item.wood, stone: acc.stone + item.stone, iron: acc.iron + item.iron, food: acc.food + item.food, }; } export function getEmptyResources(): Production { return { wood: 0, stone: 0, iron: 0, food: 0, }; } export function getProduction(villageState: VillageState): Production { return villageState.buildings .filter(b => b.behavior.production) .map(b => { if (b.behavior.production) { return b.behavior.production(villageState, b); } }) .reduce(_reduceResources, getEmptyResources()); } export function getStorage(villageState: VillageState): Production { return villageState.buildings .filter(b => b.behavior.storage) .map(b => { if (b.behavior.storage) { return b.behavior.storage(villageState, b); } }) .reduce(_reduceResources, getEmptyResources()); }