Fix commitments calculation

This commit is contained in:
Anton Vakhrushev 2020-05-02 08:43:11 +03:00
parent 129f107881
commit 9f17ed2bc3
4 changed files with 23 additions and 8 deletions

View File

@ -25,7 +25,10 @@ export class SendResourcesAction extends ActionController {
console.log('Send', resources, 'to', coordinates); 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 readyToTransfer = this.getResourcesForTransfer(recipientVillage.id).min(resources);
const remainingResources = resources.sub(readyToTransfer).max(Resources.zero()); const remainingResources = resources.sub(readyToTransfer).max(Resources.zero());
@ -50,6 +53,15 @@ export class SendResourcesAction extends ActionController {
clickSendButton(); 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 { private findRecipientVillage(coordinates: Coordinates): Village {
const villageList = grabVillageList(); const villageList = grabVillageList();
const village = villageList.find(v => v.crd.eq(coordinates)); const village = villageList.find(v => v.crd.eq(coordinates));

View File

@ -139,7 +139,7 @@
<td class="right" v-text="secondsToRequiredTime(villageState.totalRequired.time)"></td> <td class="right" v-text="secondsToRequiredTime(villageState.totalRequired.time)"></td>
<td></td> <td></td>
</tr> </tr>
<tr class="commitments-line"> <tr class="commitments-line" v-if="!villageState.commitments.empty()">
<td class="right">Обязательства:</td> <td class="right">Обязательства:</td>
<td class="right"> <td class="right">
<resource :value="villageState.commitments.lumber" :hide-zero="true"></resource> <resource :value="villageState.commitments.lumber" :hide-zero="true"></resource>
@ -156,7 +156,7 @@
<td></td> <td></td>
<td></td> <td></td>
</tr> </tr>
<tr class="incoming-line"> <tr class="incoming-line" v-if="!villageState.incomingResources.empty()">
<td class="right">Торговцы:</td> <td class="right">Торговцы:</td>
<td class="right"> <td class="right">
<resource :value="villageState.incomingResources.lumber" :hide-zero="true"></resource> <resource :value="villageState.incomingResources.lumber" :hide-zero="true"></resource>

View File

@ -2,7 +2,7 @@ import { notify, split } from '../utils';
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
import { Scheduler } from '../Scheduler'; import { Scheduler } from '../Scheduler';
import { TrainTroopTask } from '../Task/TrainTroopTask'; import { TrainTroopTask } from '../Task/TrainTroopTask';
import { grabActiveVillageId } from './VillageBlock'; import { grabActiveVillageId, grabVillageList } from './VillageBlock';
import { ConsoleLogger, Logger } from '../Logger'; import { ConsoleLogger, Logger } from '../Logger';
import { import {
createBuildButton, createBuildButton,
@ -89,8 +89,10 @@ export class BuildingPageController {
private onSendResources(resources: Resources, coordinates: Coordinates, scale: number) { private onSendResources(resources: Resources, coordinates: Coordinates, scale: number) {
const villageId = grabActiveVillageId(); const villageId = grabActiveVillageId();
const targetVillage = grabVillageList().find(v => v.crd.eq(coordinates));
this.scheduler.scheduleTask(SendResourcesTask.name, { this.scheduler.scheduleTask(SendResourcesTask.name, {
villageId: villageId, villageId: villageId,
targetVillageId: targetVillage?.id,
buildTypeId: this.attributes.buildTypeId, buildTypeId: this.attributes.buildTypeId,
buildId: this.attributes.buildId, buildId: this.attributes.buildId,
tabId: this.attributes.tabId, tabId: this.attributes.tabId,

View File

@ -87,10 +87,11 @@ function createVillageState(
scheduler: Scheduler scheduler: Scheduler
): VillageState { ): VillageState {
const villageIds = scheduler.getResourceCommitments(state.id); const villageIds = scheduler.getResourceCommitments(state.id);
const commitments = villageIds.reduce( const commitments = villageIds.reduce((res, villageId) => {
(res, villageId) => res.add(ownStates[villageId].required.balance), const villageRequired = ownStates[villageId].required;
Resources.zero() const missing = villageRequired.balance.min(Resources.zero());
); return res.add(missing);
}, Resources.zero());
return { ...state, commitments }; return { ...state, commitments };
} }