import { produce } from 'immer'; import { getProduction, getStorage } from './utils'; import village, { type VillageState } from "./village"; import type { Production } from './types'; let lastFrame: number; export default function update(timestamp: number) { if (!lastFrame) { lastFrame = timestamp; return; } const delta = timestamp - lastFrame; village.update(state => { return produce(state, (V: VillageState) => { const productionPerMinute = getProduction(V); const storage = getStorage(V); Object.keys(productionPerMinute).forEach((key) => { const resource = key as keyof Production; const outputPerMinute = productionPerMinute[resource]; const outputPerMilisecond = outputPerMinute / 60.0 / 1000.0; V.resources[resource] += outputPerMilisecond * delta; if (V.resources[resource] > storage[resource]) { V.resources[resource] = storage[resource]; } else if (V.resources[resource] < 0) { V.resources[resource] = 0; } }); return V; }); }); lastFrame = timestamp; }