Fix commitments calculation
This commit is contained in:
		| @@ -25,7 +25,10 @@ export class SendResourcesAction extends ActionController { | ||||
|  | ||||
|         console.log('Send', resources, 'to', coordinates); | ||||
|  | ||||
|         const recipientVillage = this.findRecipientVillage(coordinates); | ||||
|         const recipientVillage = args.targetVillageId | ||||
|             ? this.findRecipientVillageById(args.targetVillageId) | ||||
|             : this.findRecipientVillage(coordinates); | ||||
|  | ||||
|         const readyToTransfer = this.getResourcesForTransfer(recipientVillage.id).min(resources); | ||||
|  | ||||
|         const remainingResources = resources.sub(readyToTransfer).max(Resources.zero()); | ||||
| @@ -50,6 +53,15 @@ export class SendResourcesAction extends ActionController { | ||||
|         clickSendButton(); | ||||
|     } | ||||
|  | ||||
|     private findRecipientVillageById(villageId: number): Village { | ||||
|         const villageList = grabVillageList(); | ||||
|         const village = villageList.find(v => v.id === villageId); | ||||
|         if (!village) { | ||||
|             throw new AbortTaskError('No village'); | ||||
|         } | ||||
|         return village; | ||||
|     } | ||||
|  | ||||
|     private findRecipientVillage(coordinates: Coordinates): Village { | ||||
|         const villageList = grabVillageList(); | ||||
|         const village = villageList.find(v => v.crd.eq(coordinates)); | ||||
|   | ||||
| @@ -139,7 +139,7 @@ | ||||
|             <td class="right" v-text="secondsToRequiredTime(villageState.totalRequired.time)"></td> | ||||
|             <td></td> | ||||
|           </tr> | ||||
|           <tr class="commitments-line"> | ||||
|           <tr class="commitments-line" v-if="!villageState.commitments.empty()"> | ||||
|             <td class="right">Обязательства:</td> | ||||
|             <td class="right"> | ||||
|               <resource :value="villageState.commitments.lumber" :hide-zero="true"></resource> | ||||
| @@ -156,7 +156,7 @@ | ||||
|             <td></td> | ||||
|             <td></td> | ||||
|           </tr> | ||||
|           <tr class="incoming-line"> | ||||
|           <tr class="incoming-line" v-if="!villageState.incomingResources.empty()"> | ||||
|             <td class="right">Торговцы:</td> | ||||
|             <td class="right"> | ||||
|               <resource :value="villageState.incomingResources.lumber" :hide-zero="true"></resource> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ import { notify, split } from '../utils'; | ||||
| import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; | ||||
| import { Scheduler } from '../Scheduler'; | ||||
| import { TrainTroopTask } from '../Task/TrainTroopTask'; | ||||
| import { grabActiveVillageId } from './VillageBlock'; | ||||
| import { grabActiveVillageId, grabVillageList } from './VillageBlock'; | ||||
| import { ConsoleLogger, Logger } from '../Logger'; | ||||
| import { | ||||
|     createBuildButton, | ||||
| @@ -89,8 +89,10 @@ export class BuildingPageController { | ||||
|  | ||||
|     private onSendResources(resources: Resources, coordinates: Coordinates, scale: number) { | ||||
|         const villageId = grabActiveVillageId(); | ||||
|         const targetVillage = grabVillageList().find(v => v.crd.eq(coordinates)); | ||||
|         this.scheduler.scheduleTask(SendResourcesTask.name, { | ||||
|             villageId: villageId, | ||||
|             targetVillageId: targetVillage?.id, | ||||
|             buildTypeId: this.attributes.buildTypeId, | ||||
|             buildId: this.attributes.buildId, | ||||
|             tabId: this.attributes.tabId, | ||||
|   | ||||
| @@ -87,10 +87,11 @@ function createVillageState( | ||||
|     scheduler: Scheduler | ||||
| ): VillageState { | ||||
|     const villageIds = scheduler.getResourceCommitments(state.id); | ||||
|     const commitments = villageIds.reduce( | ||||
|         (res, villageId) => res.add(ownStates[villageId].required.balance), | ||||
|         Resources.zero() | ||||
|     ); | ||||
|     const commitments = villageIds.reduce((res, villageId) => { | ||||
|         const villageRequired = ownStates[villageId].required; | ||||
|         const missing = villageRequired.balance.min(Resources.zero()); | ||||
|         return res.add(missing); | ||||
|     }, Resources.zero()); | ||||
|     return { ...state, commitments }; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user