travian/src/Action/BalanceHeroResourcesAction.ts

35 lines
1.5 KiB
TypeScript

import { ActionController, registerAction } from './ActionController';
import { Args } from '../Command';
import { Task } from '../Queue/TaskQueue';
import { grabVillageResources, grabVillageResourceStorage } from '../Page/ResourcesBlock';
import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage';
import { grabActiveVillageId } from '../Page/VillageBlock';
import { HeroState } from '../State/HeroState';
import { calcHeroResource } from '../Core/HeroBalance';
import { HeroAllResources } from '../Core/Hero';
@registerAction
export class BalanceHeroResourcesAction extends ActionController {
async run(args: Args, task: Task): Promise<any> {
const activeVillageId = grabActiveVillageId();
const heroVillageId = new HeroState().getVillageId();
if (heroVillageId === undefined || activeVillageId !== heroVillageId) {
changeHeroResource(HeroAllResources);
return;
}
const resources = grabVillageResources();
const requiredResources = this.scheduler.getVillageRequiredResources(heroVillageId);
const totalRequiredResources = this.scheduler.getTotalVillageRequiredResources(heroVillageId);
const storage = grabVillageResourceStorage();
const currentType = grabCurrentHeroResource();
const heroType = calcHeroResource(resources, requiredResources, totalRequiredResources, storage);
if (heroType !== currentType) {
changeHeroResource(heroType);
}
}
}