Refactoring

This commit is contained in:
Anton Vakhrushev 2020-06-07 12:37:19 +03:00
parent 11b93526cd
commit 1f58da5d58

View File

@ -65,13 +65,21 @@ export class VillageController {
} }
getFreeResources(): Resources { getFreeResources(): Resources {
const balance = this.state.required.balance; const mode = this.state.settings.receiveResourcesMode;
const free = balance.max(Resources.zero()); const requirementResources = this.state.required.resources;
const optimumToStoreResources = this.state.storageOptimumFullness;
console.table([ switch (mode) {
{ name: 'Sender balance', ...balance }, case ReceiveResourcesMode.Required:
{ name: 'Sender free', ...free }, return this.calcFreeResources(requirementResources);
]); case ReceiveResourcesMode.Optimum:
return this.calcFreeResources(optimumToStoreResources);
}
}
private calcFreeResources(targetResources: Resources): Resources {
const currentResources = this.state.resources;
const free = currentResources.sub(targetResources).max(Resources.zero());
const amount = free.amount(); const amount = free.amount();
const threshold = this.state.settings.sendResourcesThreshold; const threshold = this.state.settings.sendResourcesThreshold;
@ -86,54 +94,48 @@ export class VillageController {
getRequiredResources(): Resources { getRequiredResources(): Resources {
const mode = this.state.settings.receiveResourcesMode; const mode = this.state.settings.receiveResourcesMode;
const optimumToStoreResources = this.state.storageOptimumFullness; const optimumToStoreResources = this.state.storageOptimumFullness;
const currentResources = this.state.resources;
const incomingResources = this.state.incomingResources;
const requirementResources = this.state.required.resources; const requirementResources = this.state.required.resources;
let missingResources;
switch (mode) { switch (mode) {
case ReceiveResourcesMode.Required: case ReceiveResourcesMode.Required:
missingResources = requirementResources return this.calcRequiredResources(requirementResources);
.min(optimumToStoreResources)
.sub(incomingResources)
.sub(currentResources)
.max(Resources.zero());
break;
case ReceiveResourcesMode.Optimum: case ReceiveResourcesMode.Optimum:
missingResources = optimumToStoreResources return this.calcRequiredResources(optimumToStoreResources);
.sub(incomingResources)
.sub(currentResources)
.max(Resources.zero());
break;
} }
}
console.table([ private calcRequiredResources(targetResources: Resources): Resources {
{ name: 'Recipient max possible', ...optimumToStoreResources }, const optimumToStoreResources = this.state.storageOptimumFullness;
{ name: 'Recipient resources', ...currentResources }, const currentResources = this.state.resources;
{ name: 'Recipient incoming', ...incomingResources }, const incomingResources = this.state.incomingResources;
{ name: 'Recipient requirements', ...requirementResources },
{ name: 'Recipient missing', ...missingResources },
]);
return missingResources; return targetResources
.min(optimumToStoreResources)
.sub(currentResources)
.sub(incomingResources)
.max(Resources.zero());
} }
getAvailableToReceiveResources(): Resources { getAvailableToReceiveResources(): Resources {
const maxPossibleToStore = this.state.storageOptimumFullness; const optimumToStoreResources = this.state.storageOptimumFullness;
const currentResources = this.state.resources; const currentResources = this.state.resources;
return maxPossibleToStore.sub(currentResources).max(Resources.zero()); return optimumToStoreResources.sub(currentResources).max(Resources.zero());
} }
toggleReceiveResourcesMode(): void { toggleReceiveResourcesMode(): void {
const current = this.state.settings.receiveResourcesMode; const current = this.state.settings.receiveResourcesMode;
let next; let next;
if (current === ReceiveResourcesMode.Required) { switch (current) {
next = ReceiveResourcesMode.Optimum; case ReceiveResourcesMode.Required:
} else { next = ReceiveResourcesMode.Optimum;
next = ReceiveResourcesMode.Required; break;
case ReceiveResourcesMode.Optimum:
next = ReceiveResourcesMode.Required;
break;
} }
const newSettings = { ...this.state.settings, receiveResourcesMode: next }; const newSettings = { ...this.state.settings, receiveResourcesMode: next };
this.storage.storeSettings(newSettings); this.storage.storeSettings(newSettings);
} }