From 5c39aefed0f17d72406acf3a7fb998701686bc40 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Tue, 21 Apr 2020 21:25:00 +0300 Subject: [PATCH] Improve hero balance --- src/Action/BalanceHeroResourcesAction.ts | 13 +++++++------ src/ControlPanel.ts | 14 +++++--------- src/DashboardView/VillageStateList.vue | 5 +---- src/Game.ts | 24 ++++++++++++++++++++---- src/Scheduler.ts | 4 ++-- 5 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/Action/BalanceHeroResourcesAction.ts b/src/Action/BalanceHeroResourcesAction.ts index 2bee044..9638074 100644 --- a/src/Action/BalanceHeroResourcesAction.ts +++ b/src/Action/BalanceHeroResourcesAction.ts @@ -38,19 +38,20 @@ export class BalanceHeroResourcesAction extends ActionController { } } - private getRequirements(heroVillageId) { + private getRequirements(heroVillageId): Resources { const resources = grabResources(); const requiredResources = this.scheduler.getVillageRequiredResources(heroVillageId); + const totalRequiredResources = this.scheduler.getTotalVillageRequiredResources(heroVillageId); - console.log('RESOURCES', resources); - console.log('REQUIRED', requiredResources); - - if (requiredResources) { + if (requiredResources.gt(resources)) { return requiredResources.sub(resources); } - const storage = grabResourceStorage(); + if (totalRequiredResources.gt(resources)) { + return totalRequiredResources.sub(resources); + } + const storage = grabResourceStorage(); return Resources.fromStorage(storage).sub(resources); } } diff --git a/src/ControlPanel.ts b/src/ControlPanel.ts index cf5a314..c7dbc2a 100644 --- a/src/ControlPanel.ts +++ b/src/ControlPanel.ts @@ -200,10 +200,10 @@ class VillageController { this.clay_hour = performance.clay; this.iron_hour = performance.iron; this.crop_hour = performance.crop; - this.lumber_need = requiredResources && requiredResources.lumber; - this.clay_need = requiredResources && requiredResources.clay; - this.iron_need = requiredResources && requiredResources.iron; - this.crop_need = requiredResources && requiredResources.crop; + this.lumber_need = requiredResources.lumber; + this.clay_need = requiredResources.clay; + this.iron_need = requiredResources.iron; + this.crop_need = requiredResources.crop; this.lumber_total_need = totalRequiredResources.lumber; this.clay_total_need = totalRequiredResources.clay; this.iron_total_need = totalRequiredResources.iron; @@ -221,11 +221,7 @@ class VillageController { return this.timeToResources(this.totalRequiredResources); } - private timeToResources(resources: Resources | undefined): number { - if (resources === undefined) { - return -2; - } - + private timeToResources(resources: Resources): number { const time_to_lumber = this.timeToRes(this.resources.lumber, resources.lumber, this.performance.lumber); const time_to_clay = this.timeToRes(this.resources.clay, resources.clay, this.performance.clay); diff --git a/src/DashboardView/VillageStateList.vue b/src/DashboardView/VillageStateList.vue index c29ab9d..2f627fb 100644 --- a/src/DashboardView/VillageStateList.vue +++ b/src/DashboardView/VillageStateList.vue @@ -145,10 +145,7 @@ export default { }, secondsToRequiredTime(value) { if (value === -1) { - return '-'; - } - if (value === -2) { - return ''; + return 'never'; } return this.secondsToTime(value); }, diff --git a/src/Game.ts b/src/Game.ts index 5e8ee2d..2de847e 100644 --- a/src/Game.ts +++ b/src/Game.ts @@ -37,10 +37,10 @@ export class Resources implements ResourcesInterface { readonly crop: number; constructor(lumber: number, clay: number, iron: number, crop: number) { - this.lumber = lumber; - this.clay = clay; - this.iron = iron; - this.crop = crop; + this.lumber = Math.floor(lumber); + this.clay = Math.floor(clay); + this.iron = Math.floor(iron); + this.crop = Math.floor(crop); } static fromObject(obj: ResourcesInterface): Resources { @@ -93,6 +93,22 @@ export class Resources implements ResourcesInterface { this.crop - other.crop ); } + + lt(other: Resources): boolean { + return this.lumber < other.lumber && this.clay < other.clay && this.iron < other.iron && this.crop < other.crop; + } + + gt(other: Resources): boolean { + return this.lumber > other.lumber && this.clay > other.clay && this.iron > other.iron && this.crop > other.crop; + } + + lte(other: Resources): boolean { + return !this.gt(other); + } + + gte(other: Resources): boolean { + return !this.lt(other); + } } export class ResourceStorage { diff --git a/src/Scheduler.ts b/src/Scheduler.ts index ae438be..50283fa 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -118,13 +118,13 @@ export class Scheduler { this.actionQueue.clear(); } - getVillageRequiredResources(villageId): Resources | undefined { + getVillageRequiredResources(villageId): Resources { const tasks = this.taskQueue.seeItems().filter(t => sameVillage(villageId, t.args) && t.args.resources); const first = tasks.shift(); if (first && first.args.resources) { return Resources.fromObject(first.args.resources); } - return undefined; + return new Resources(0, 0, 0, 0); } getTotalVillageRequiredResources(villageId): Resources {