47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
|
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());
|
||
|
}
|