diff --git a/src/Action/BalanceHeroResourcesAction.ts b/src/Action/BalanceHeroResourcesAction.ts index 5bcecf2..2bee044 100644 --- a/src/Action/BalanceHeroResourcesAction.ts +++ b/src/Action/BalanceHeroResourcesAction.ts @@ -46,21 +46,11 @@ export class BalanceHeroResourcesAction extends ActionController { console.log('REQUIRED', requiredResources); if (requiredResources) { - return new Resources( - requiredResources.lumber - resources.lumber, - requiredResources.clay - resources.clay, - requiredResources.iron - resources.iron, - requiredResources.crop - resources.crop - ); + return requiredResources.sub(resources); } const storage = grabResourceStorage(); - return new Resources( - storage.warehouse - resources.lumber, - storage.warehouse - resources.clay, - storage.warehouse - resources.iron, - storage.granary - resources.crop - ); + return Resources.fromStorage(storage).sub(resources); } } diff --git a/src/ControlPanel.ts b/src/ControlPanel.ts index 2bae61d..3d0125c 100644 --- a/src/ControlPanel.ts +++ b/src/ControlPanel.ts @@ -14,7 +14,6 @@ import DashboardApp from './DashboardView/Dashboard.vue'; import { ResourcesToLevel } from './Task/ResourcesToLevel'; import { ConsoleLogger, Logger } from './Logger'; import { VillageState } from './State/VillageState'; -import { StateGrabberManager } from './Grabber/StateGrabberManager'; interface QuickAction { label: string; @@ -24,13 +23,11 @@ interface QuickAction { export class ControlPanel { private readonly version: string; private readonly scheduler: Scheduler; - private grabbers: StateGrabberManager; private readonly logger: Logger; constructor(version: string, scheduler: Scheduler) { this.version = version; this.scheduler = scheduler; - this.grabbers = new StateGrabberManager(); this.logger = new ConsoleLogger(this.constructor.name); } @@ -42,9 +39,6 @@ export class ControlPanel { const villageId = grabActiveVillageId(); - this.grabbers.grab(); - setInterval(() => this.grabbers.grab(), 2000); - const scheduler = this.scheduler; const quickActions: QuickAction[] = []; @@ -75,6 +69,7 @@ export class ControlPanel { const performance = state.getResourcesPerformance(); const buildQueueInfo = state.getBuildingQueueInfo(); const requiredResources = scheduler.getVillageRequiredResources(village.id); + const totalRequiredResources = scheduler.getTotalVillageRequiredResources(village.id); return { id: village.id, name: village.name, @@ -92,6 +87,10 @@ export class ControlPanel { clay_need: requiredResources && requiredResources.clay, iron_need: requiredResources && requiredResources.iron, crop_need: requiredResources && requiredResources.crop, + lumber_total_need: totalRequiredResources.lumber, + clay_total_need: totalRequiredResources.clay, + iron_total_need: totalRequiredResources.iron, + crop_total_need: totalRequiredResources.crop, warehouse: storage.warehouse, granary: storage.granary, buildRemainingSeconds: buildQueueInfo.seconds, diff --git a/src/DashboardView/VillageStateList.vue b/src/DashboardView/VillageStateList.vue index e44d0d5..876b0ff 100644 --- a/src/DashboardView/VillageStateList.vue +++ b/src/DashboardView/VillageStateList.vue @@ -67,6 +67,23 @@ + + + + + + + + + + + + + + + + + +{{ village.lumber_hour }} diff --git a/src/Game.ts b/src/Game.ts index 1fdd04b..5e8ee2d 100644 --- a/src/Game.ts +++ b/src/Game.ts @@ -35,6 +35,7 @@ export class Resources implements ResourcesInterface { readonly clay: number; readonly iron: number; readonly crop: number; + constructor(lumber: number, clay: number, iron: number, crop: number) { this.lumber = lumber; this.clay = clay; @@ -46,8 +47,8 @@ export class Resources implements ResourcesInterface { return new Resources(obj.lumber, obj.clay, obj.iron, obj.crop); } - static fromStorage(warehouse: number, granary: number): Resources { - return new Resources(warehouse, warehouse, warehouse, granary); + static fromStorage(storage: ResourceStorage): Resources { + return new Resources(storage.warehouse, storage.warehouse, storage.warehouse, storage.granary); } getByType(type: ResourceType): number { @@ -75,7 +76,7 @@ export class Resources implements ResourcesInterface { return new Resources(this.lumber * n, this.clay * n, this.iron * n, this.crop * n); } - add(other: Resources): Resources { + add(other: ResourcesInterface): Resources { return new Resources( this.lumber + other.lumber, this.clay + other.clay, @@ -84,7 +85,7 @@ export class Resources implements ResourcesInterface { ); } - sub(other: Resources): Resources { + sub(other: ResourcesInterface): Resources { return new Resources( this.lumber - other.lumber, this.clay - other.clay, diff --git a/src/Scheduler.ts b/src/Scheduler.ts index 762e2db..57dc044 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -121,15 +121,20 @@ export class Scheduler { this.actionQueue.clear(); } - getVillageRequiredResources(villageId): ResourcesInterface | undefined { + getVillageRequiredResources(villageId): Resources | undefined { const tasks = this.taskQueue.seeItems().filter(t => sameVillage(villageId, t.args) && t.args.resources); const first = tasks.shift(); if (first && first.args.resources) { - return first.args.resources; + return Resources.fromObject(first.args.resources); } return undefined; } + getTotalVillageRequiredResources(villageId): Resources { + const tasks = this.taskQueue.seeItems().filter(t => sameVillage(villageId, t.args) && t.args.resources); + return tasks.reduce((acc, t) => acc.add(t.args.resources!), new Resources(0, 0, 0, 0)); + } + private reorderVillageTasks(villageId: number) { const tasks = this.taskQueue.seeItems(); const trainPred = t => isTrainTroopTask(t.name) && sameVillage(villageId, t.args);