Improve hero balance

This commit is contained in:
Anton Vakhrushev 2020-04-21 21:25:00 +03:00
parent 217b653e5b
commit 5c39aefed0
5 changed files with 35 additions and 25 deletions

View File

@ -38,19 +38,20 @@ export class BalanceHeroResourcesAction extends ActionController {
} }
} }
private getRequirements(heroVillageId) { private getRequirements(heroVillageId): Resources {
const resources = grabResources(); const resources = grabResources();
const requiredResources = this.scheduler.getVillageRequiredResources(heroVillageId); const requiredResources = this.scheduler.getVillageRequiredResources(heroVillageId);
const totalRequiredResources = this.scheduler.getTotalVillageRequiredResources(heroVillageId);
console.log('RESOURCES', resources); if (requiredResources.gt(resources)) {
console.log('REQUIRED', requiredResources);
if (requiredResources) {
return requiredResources.sub(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); return Resources.fromStorage(storage).sub(resources);
} }
} }

View File

@ -200,10 +200,10 @@ class VillageController {
this.clay_hour = performance.clay; this.clay_hour = performance.clay;
this.iron_hour = performance.iron; this.iron_hour = performance.iron;
this.crop_hour = performance.crop; this.crop_hour = performance.crop;
this.lumber_need = requiredResources && requiredResources.lumber; this.lumber_need = requiredResources.lumber;
this.clay_need = requiredResources && requiredResources.clay; this.clay_need = requiredResources.clay;
this.iron_need = requiredResources && requiredResources.iron; this.iron_need = requiredResources.iron;
this.crop_need = requiredResources && requiredResources.crop; this.crop_need = requiredResources.crop;
this.lumber_total_need = totalRequiredResources.lumber; this.lumber_total_need = totalRequiredResources.lumber;
this.clay_total_need = totalRequiredResources.clay; this.clay_total_need = totalRequiredResources.clay;
this.iron_total_need = totalRequiredResources.iron; this.iron_total_need = totalRequiredResources.iron;
@ -221,11 +221,7 @@ class VillageController {
return this.timeToResources(this.totalRequiredResources); return this.timeToResources(this.totalRequiredResources);
} }
private timeToResources(resources: Resources | undefined): number { private timeToResources(resources: Resources): number {
if (resources === undefined) {
return -2;
}
const time_to_lumber = this.timeToRes(this.resources.lumber, resources.lumber, this.performance.lumber); 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); const time_to_clay = this.timeToRes(this.resources.clay, resources.clay, this.performance.clay);

View File

@ -145,10 +145,7 @@ export default {
}, },
secondsToRequiredTime(value) { secondsToRequiredTime(value) {
if (value === -1) { if (value === -1) {
return '-'; return 'never';
}
if (value === -2) {
return '';
} }
return this.secondsToTime(value); return this.secondsToTime(value);
}, },

View File

@ -37,10 +37,10 @@ export class Resources implements ResourcesInterface {
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 = Math.floor(lumber);
this.clay = clay; this.clay = Math.floor(clay);
this.iron = iron; this.iron = Math.floor(iron);
this.crop = crop; this.crop = Math.floor(crop);
} }
static fromObject(obj: ResourcesInterface): Resources { static fromObject(obj: ResourcesInterface): Resources {
@ -93,6 +93,22 @@ export class Resources implements ResourcesInterface {
this.crop - other.crop 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 { export class ResourceStorage {

View File

@ -118,13 +118,13 @@ export class Scheduler {
this.actionQueue.clear(); 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 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 Resources.fromObject(first.args.resources); return Resources.fromObject(first.args.resources);
} }
return undefined; return new Resources(0, 0, 0, 0);
} }
getTotalVillageRequiredResources(villageId): Resources { getTotalVillageRequiredResources(villageId): Resources {