Change hero balance action

Target - required by next build resources
This commit is contained in:
2020-04-18 18:56:32 +03:00
parent 236135f1ca
commit 809b54e0b9
9 changed files with 172 additions and 27 deletions

View File

@ -1,25 +1,53 @@
import { ActionController, registerAction } from './ActionController';
import { Args } from '../Common';
import { Task } from '../Storage/TaskQueue';
import { grabResources } from '../Page/ResourcesBlock';
import { grabResources, grabResourceStorage } from '../Page/ResourcesBlock';
import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage';
import { HeroAllResources } from '../Game';
import { HeroAllResources, Resources } from '../Game';
import { grabActiveVillageId } from '../Page/VillageBlock';
@registerAction
export class BalanceHeroResourcesAction extends ActionController {
async run(args: Args, task: Task): Promise<any> {
const resourcesAsList = grabResources().asList();
const resources = this.getRequirements();
const resourcesAsList = resources.asList();
const currentType = grabCurrentHeroResource();
const sorted = resourcesAsList.sort((x, y) => x.value - y.value);
const min = sorted[0];
const max = sorted[sorted.length - 1];
const delta = max.value - min.value;
const eps = max.value / 10;
const sorted = resourcesAsList.sort((x, y) => y.value - x.value);
const maxRequirement = sorted[0];
const minRequirement = sorted[sorted.length - 1];
const delta = maxRequirement.value - minRequirement.value;
const eps = maxRequirement.value / 10;
const resType = delta > eps ? min.type : HeroAllResources;
const resType = delta > eps ? maxRequirement.type : HeroAllResources;
if (resType !== currentType) {
changeHeroResource(resType);
}
}
private getRequirements() {
const resources = grabResources();
const villageId = grabActiveVillageId();
const requiredResources = this.scheduler.getVillageRequiredResources(villageId);
if (requiredResources) {
return new Resources(
requiredResources.lumber - resources.lumber,
requiredResources.clay - resources.clay,
requiredResources.iron - resources.iron,
requiredResources.crop - resources.crop
);
}
const storage = grabResourceStorage();
return new Resources(
storage.warehouse - resources.lumber,
storage.warehouse - resources.clay,
storage.warehouse - resources.iron,
storage.granary - resources.crop
);
}
}

View File

@ -0,0 +1,21 @@
import { ActionController, registerAction } from './ActionController';
import { Args } from '../Common';
import { Task } from '../Storage/TaskQueue';
import { grabContractResources } from '../Page/BuildingPage';
@registerAction
export class UpdateBuildingTaskResourcesAction extends ActionController {
async run(args: Args, task: Task): Promise<any> {
const buildingTaskId = args.taskId;
if (buildingTaskId === undefined) {
return;
}
try {
const resources = grabContractResources();
this.scheduler.updateResources(buildingTaskId, resources);
} catch (e) {
return;
}
}
}