Add total required resources
This commit is contained in:
		| @@ -46,21 +46,11 @@ export class BalanceHeroResourcesAction extends ActionController { | |||||||
|         console.log('REQUIRED', requiredResources); |         console.log('REQUIRED', requiredResources); | ||||||
|  |  | ||||||
|         if (requiredResources) { |         if (requiredResources) { | ||||||
|             return new Resources( |             return requiredResources.sub(resources); | ||||||
|                 requiredResources.lumber - resources.lumber, |  | ||||||
|                 requiredResources.clay - resources.clay, |  | ||||||
|                 requiredResources.iron - resources.iron, |  | ||||||
|                 requiredResources.crop - resources.crop |  | ||||||
|             ); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         const storage = grabResourceStorage(); |         const storage = grabResourceStorage(); | ||||||
|  |  | ||||||
|         return new Resources( |         return Resources.fromStorage(storage).sub(resources); | ||||||
|             storage.warehouse - resources.lumber, |  | ||||||
|             storage.warehouse - resources.clay, |  | ||||||
|             storage.warehouse - resources.iron, |  | ||||||
|             storage.granary - resources.crop |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ import DashboardApp from './DashboardView/Dashboard.vue'; | |||||||
| import { ResourcesToLevel } from './Task/ResourcesToLevel'; | import { ResourcesToLevel } from './Task/ResourcesToLevel'; | ||||||
| import { ConsoleLogger, Logger } from './Logger'; | import { ConsoleLogger, Logger } from './Logger'; | ||||||
| import { VillageState } from './State/VillageState'; | import { VillageState } from './State/VillageState'; | ||||||
| import { StateGrabberManager } from './Grabber/StateGrabberManager'; |  | ||||||
|  |  | ||||||
| interface QuickAction { | interface QuickAction { | ||||||
|     label: string; |     label: string; | ||||||
| @@ -24,13 +23,11 @@ interface QuickAction { | |||||||
| export class ControlPanel { | export class ControlPanel { | ||||||
|     private readonly version: string; |     private readonly version: string; | ||||||
|     private readonly scheduler: Scheduler; |     private readonly scheduler: Scheduler; | ||||||
|     private grabbers: StateGrabberManager; |  | ||||||
|     private readonly logger: Logger; |     private readonly logger: Logger; | ||||||
|  |  | ||||||
|     constructor(version: string, scheduler: Scheduler) { |     constructor(version: string, scheduler: Scheduler) { | ||||||
|         this.version = version; |         this.version = version; | ||||||
|         this.scheduler = scheduler; |         this.scheduler = scheduler; | ||||||
|         this.grabbers = new StateGrabberManager(); |  | ||||||
|         this.logger = new ConsoleLogger(this.constructor.name); |         this.logger = new ConsoleLogger(this.constructor.name); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -42,9 +39,6 @@ export class ControlPanel { | |||||||
|  |  | ||||||
|         const villageId = grabActiveVillageId(); |         const villageId = grabActiveVillageId(); | ||||||
|  |  | ||||||
|         this.grabbers.grab(); |  | ||||||
|         setInterval(() => this.grabbers.grab(), 2000); |  | ||||||
|  |  | ||||||
|         const scheduler = this.scheduler; |         const scheduler = this.scheduler; | ||||||
|         const quickActions: QuickAction[] = []; |         const quickActions: QuickAction[] = []; | ||||||
|  |  | ||||||
| @@ -75,6 +69,7 @@ export class ControlPanel { | |||||||
|                     const performance = state.getResourcesPerformance(); |                     const performance = state.getResourcesPerformance(); | ||||||
|                     const buildQueueInfo = state.getBuildingQueueInfo(); |                     const buildQueueInfo = state.getBuildingQueueInfo(); | ||||||
|                     const requiredResources = scheduler.getVillageRequiredResources(village.id); |                     const requiredResources = scheduler.getVillageRequiredResources(village.id); | ||||||
|  |                     const totalRequiredResources = scheduler.getTotalVillageRequiredResources(village.id); | ||||||
|                     return { |                     return { | ||||||
|                         id: village.id, |                         id: village.id, | ||||||
|                         name: village.name, |                         name: village.name, | ||||||
| @@ -92,6 +87,10 @@ export class ControlPanel { | |||||||
|                         clay_need: requiredResources && requiredResources.clay, |                         clay_need: requiredResources && requiredResources.clay, | ||||||
|                         iron_need: requiredResources && requiredResources.iron, |                         iron_need: requiredResources && requiredResources.iron, | ||||||
|                         crop_need: requiredResources && requiredResources.crop, |                         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, |                         warehouse: storage.warehouse, | ||||||
|                         granary: storage.granary, |                         granary: storage.granary, | ||||||
|                         buildRemainingSeconds: buildQueueInfo.seconds, |                         buildRemainingSeconds: buildQueueInfo.seconds, | ||||||
|   | |||||||
| @@ -67,6 +67,23 @@ | |||||||
|             <td></td> |             <td></td> | ||||||
|             <td></td> |             <td></td> | ||||||
|           </tr> |           </tr> | ||||||
|  |           <tr class="required-line"> | ||||||
|  |             <td class="right"></td> | ||||||
|  |             <td class="right"> | ||||||
|  |               <resource :value="village.lumber - village.lumber_total_need"></resource> | ||||||
|  |             </td> | ||||||
|  |             <td class="right"> | ||||||
|  |               <resource :value="village.clay - village.clay_total_need"></resource> | ||||||
|  |             </td> | ||||||
|  |             <td class="right"> | ||||||
|  |               <resource :value="village.iron - village.iron_total_need"></resource> | ||||||
|  |             </td> | ||||||
|  |             <td class="right"> | ||||||
|  |               <resource :value="village.crop - village.crop_total_need"></resource> | ||||||
|  |             </td> | ||||||
|  |             <td></td> | ||||||
|  |             <td></td> | ||||||
|  |           </tr> | ||||||
|           <tr class="performance-line"> |           <tr class="performance-line"> | ||||||
|             <td class="right" v-text="secondsToTime(village.buildRemainingSeconds)"></td> |             <td class="right" v-text="secondsToTime(village.buildRemainingSeconds)"></td> | ||||||
|             <td class="right">+{{ village.lumber_hour }}</td> |             <td class="right">+{{ village.lumber_hour }}</td> | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ export class Resources implements ResourcesInterface { | |||||||
|     readonly clay: number; |     readonly clay: number; | ||||||
|     readonly iron: number; |     readonly iron: number; | ||||||
|     readonly crop: number; |     readonly crop: number; | ||||||
|  |  | ||||||
|     constructor(lumber: number, clay: number, iron: number, crop: number) { |     constructor(lumber: number, clay: number, iron: number, crop: number) { | ||||||
|         this.lumber = lumber; |         this.lumber = lumber; | ||||||
|         this.clay = clay; |         this.clay = clay; | ||||||
| @@ -46,8 +47,8 @@ export class Resources implements ResourcesInterface { | |||||||
|         return new Resources(obj.lumber, obj.clay, obj.iron, obj.crop); |         return new Resources(obj.lumber, obj.clay, obj.iron, obj.crop); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     static fromStorage(warehouse: number, granary: number): Resources { |     static fromStorage(storage: ResourceStorage): Resources { | ||||||
|         return new Resources(warehouse, warehouse, warehouse, granary); |         return new Resources(storage.warehouse, storage.warehouse, storage.warehouse, storage.granary); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     getByType(type: ResourceType): number { |     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); |         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( |         return new Resources( | ||||||
|             this.lumber + other.lumber, |             this.lumber + other.lumber, | ||||||
|             this.clay + other.clay, |             this.clay + other.clay, | ||||||
| @@ -84,7 +85,7 @@ export class Resources implements ResourcesInterface { | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     sub(other: Resources): Resources { |     sub(other: ResourcesInterface): Resources { | ||||||
|         return new Resources( |         return new Resources( | ||||||
|             this.lumber - other.lumber, |             this.lumber - other.lumber, | ||||||
|             this.clay - other.clay, |             this.clay - other.clay, | ||||||
|   | |||||||
| @@ -121,15 +121,20 @@ export class Scheduler { | |||||||
|         this.actionQueue.clear(); |         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 tasks = this.taskQueue.seeItems().filter(t => sameVillage(villageId, t.args) && t.args.resources); | ||||||
|         const first = tasks.shift(); |         const first = tasks.shift(); | ||||||
|         if (first && first.args.resources) { |         if (first && first.args.resources) { | ||||||
|             return first.args.resources; |             return Resources.fromObject(first.args.resources); | ||||||
|         } |         } | ||||||
|         return undefined; |         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) { |     private reorderVillageTasks(villageId: number) { | ||||||
|         const tasks = this.taskQueue.seeItems(); |         const tasks = this.taskQueue.seeItems(); | ||||||
|         const trainPred = t => isTrainTroopTask(t.name) && sameVillage(villageId, t.args); |         const trainPred = t => isTrainTroopTask(t.name) && sameVillage(villageId, t.args); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user