Add total required resources
This commit is contained in:
		| @@ -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); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -67,6 +67,23 @@ | ||||
|             <td></td> | ||||
|             <td></td> | ||||
|           </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"> | ||||
|             <td class="right" v-text="secondsToTime(village.buildRemainingSeconds)"></td> | ||||
|             <td class="right">+{{ village.lumber_hour }}</td> | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user