Change hero balance action
Target - required by next build resources
This commit is contained in:
		| @@ -1,25 +1,53 @@ | ||||
| import { ActionController, registerAction } from './ActionController'; | ||||
| import { Args } from '../Common'; | ||||
| import { Task } from '../Storage/TaskQueue'; | ||||
| import { grabResources } from '../Page/ResourcesBlock'; | ||||
| import { grabResources, grabResourceStorage } from '../Page/ResourcesBlock'; | ||||
| import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage'; | ||||
| import { HeroAllResources } from '../Game'; | ||||
| import { HeroAllResources, Resources } from '../Game'; | ||||
| import { grabActiveVillageId } from '../Page/VillageBlock'; | ||||
|  | ||||
| @registerAction | ||||
| export class BalanceHeroResourcesAction extends ActionController { | ||||
|     async run(args: Args, task: Task): Promise<any> { | ||||
|         const resourcesAsList = grabResources().asList(); | ||||
|         const resources = this.getRequirements(); | ||||
|  | ||||
|         const resourcesAsList = resources.asList(); | ||||
|         const currentType = grabCurrentHeroResource(); | ||||
|  | ||||
|         const sorted = resourcesAsList.sort((x, y) => x.value - y.value); | ||||
|         const min = sorted[0]; | ||||
|         const max = sorted[sorted.length - 1]; | ||||
|         const delta = max.value - min.value; | ||||
|         const eps = max.value / 10; | ||||
|         const sorted = resourcesAsList.sort((x, y) => y.value - x.value); | ||||
|         const maxRequirement = sorted[0]; | ||||
|         const minRequirement = sorted[sorted.length - 1]; | ||||
|         const delta = maxRequirement.value - minRequirement.value; | ||||
|         const eps = maxRequirement.value / 10; | ||||
|  | ||||
|         const resType = delta > eps ? min.type : HeroAllResources; | ||||
|         const resType = delta > eps ? maxRequirement.type : HeroAllResources; | ||||
|         if (resType !== currentType) { | ||||
|             changeHeroResource(resType); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private getRequirements() { | ||||
|         const resources = grabResources(); | ||||
|  | ||||
|         const villageId = grabActiveVillageId(); | ||||
|         const requiredResources = this.scheduler.getVillageRequiredResources(villageId); | ||||
|  | ||||
|         if (requiredResources) { | ||||
|             return new Resources( | ||||
|                 requiredResources.lumber - resources.lumber, | ||||
|                 requiredResources.clay - resources.clay, | ||||
|                 requiredResources.iron - resources.iron, | ||||
|                 requiredResources.crop - resources.crop | ||||
|             ); | ||||
|         } | ||||
|  | ||||
|         const storage = grabResourceStorage(); | ||||
|  | ||||
|         return new Resources( | ||||
|             storage.warehouse - resources.lumber, | ||||
|             storage.warehouse - resources.clay, | ||||
|             storage.warehouse - resources.iron, | ||||
|             storage.granary - resources.crop | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										21
									
								
								src/Action/UpdateBuildingTaskResourcesAction.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/Action/UpdateBuildingTaskResourcesAction.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| import { ActionController, registerAction } from './ActionController'; | ||||
| import { Args } from '../Common'; | ||||
| import { Task } from '../Storage/TaskQueue'; | ||||
| import { grabContractResources } from '../Page/BuildingPage'; | ||||
|  | ||||
| @registerAction | ||||
| export class UpdateBuildingTaskResourcesAction extends ActionController { | ||||
|     async run(args: Args, task: Task): Promise<any> { | ||||
|         const buildingTaskId = args.taskId; | ||||
|         if (buildingTaskId === undefined) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             const resources = grabContractResources(); | ||||
|             this.scheduler.updateResources(buildingTaskId, resources); | ||||
|         } catch (e) { | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user