Add total required resources
This commit is contained in:
parent
d30dffb579
commit
61c41e6b03
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user