Show culture production.

This commit is contained in:
Adrian 2024-11-05 11:59:25 +01:00
parent e14cb045f7
commit 33eb732162
3 changed files with 16 additions and 11 deletions

View File

@ -31,6 +31,7 @@
<div>
<img src="/img/icons/culture.png" alt="Culture" />
{ Math.floor($village.resources.culture) }
({ production.culture >= 0 ? '+' : '' }{ production.culture })
</div>
</div>

View File

@ -76,12 +76,6 @@ export default function update(timestamp: number) {
}
});
// Make philosophers produce culture.
const philosopher = getUnitSource('philosopher');
const outputPerMinute = philosopher.behavior.culturePerMinute;
const outputPerMilisecond = outputPerMinute / 60.0 / 1000.0;
V.resources.culture += outputPerMilisecond * delta * (V.units.philosopher || 0);
// Check if the game is won.
if (V.resources.culture >= 2000) {
V.victory = true;

View File

@ -1,29 +1,31 @@
import units from "./data/units";
import type { BuildingType, CostType, ProductionType } from "./types";
import type { BuildingType, CostType, ProductionType, ResourcesType } from "./types";
import type { VillageState } from "./village";
function _reduceResources(acc: ProductionType, item: ProductionType): ProductionType {
function _reduceResources(acc: ResourcesType, item: ResourcesType): ResourcesType {
return {
wood: acc.wood + item.wood,
stone: acc.stone + item.stone,
iron: acc.iron + item.iron,
food: acc.food + item.food,
culture: acc.culture + item.culture,
};
}
export function getEmptyResources(): ProductionType {
export function getEmptyResources(): ResourcesType {
return {
wood: 0,
stone: 0,
iron: 0,
food: 0,
culture: 0,
};
}
export function getProduction(villageState: VillageState): ProductionType {
export function getProduction(villageState: VillageState): ResourcesType {
let production = getEmptyResources();
// Add buildings production and intake.
@ -36,12 +38,20 @@ export function getProduction(villageState: VillageState): ProductionType {
})
.reduce(_reduceResources, production);
// Add units intake.
// Add units production and intake.
['philosopher'].forEach(type => {
const unit = getUnitSource(type);
const unitCount = villageState.units[type] || 0;
// Add food intake.
const intakePerMinute = unit.behavior.foodIntakePerMinute * unitCount;
production.food -= intakePerMinute;
// Add culture production for Philosophers.
if (type === 'philosopher') {
const outputPerMinute = unit.behavior.culturePerMinute;
production.culture += outputPerMinute * unitCount;
}
});
return production;