diff --git a/src/DashboardView/VillageStateList.vue b/src/DashboardView/VillageStateList.vue
index 98af12c..a6ea5cd 100644
--- a/src/DashboardView/VillageStateList.vue
+++ b/src/DashboardView/VillageStateList.vue
@@ -30,7 +30,7 @@
@@ -38,7 +38,7 @@
@@ -46,7 +46,7 @@
@@ -54,7 +54,7 @@
diff --git a/src/VillageState.ts b/src/VillageState.ts
index 0c79db7..0947dd6 100644
--- a/src/VillageState.ts
+++ b/src/VillageState.ts
@@ -53,10 +53,6 @@ interface VillageProductionQueueState {
taskCount: number;
}
-interface VillageProductionQueueStateDict {
- [queue: string]: VillageProductionQueueState;
-}
-
interface VillageOwnState {
/**
* Village id
@@ -72,24 +68,16 @@ interface VillageOwnState {
resources: Resources;
performance: Resources;
storage: VillageStorageState;
- upperCriticalLevel: Resources;
storageOptimumFullness: Resources;
+ storageCriticalFullness: Resources;
isOverflowing: boolean;
- queues: VillageProductionQueueStateDict;
+ queues: Array;
tasks: Array;
firstReadyTask: Task | undefined;
/**
* Required resources for nearest task
*/
required: ResourceLineState;
- /**
- * Required resources for first tasks in production queues
- */
- frontierRequired: ResourceLineState;
- /**
- * Required resources for all tasks
- */
- totalRequired: ResourceLineState;
incomingResources: Resources;
settings: VillageSettings;
}
@@ -105,7 +93,7 @@ export interface VillageState extends VillageOwnState {
commitments: Resources;
}
-function makeResourceBalance(
+function makeResourceState(
resources: Resources,
current: Resources,
performance: Resources
@@ -118,7 +106,7 @@ function makeResourceBalance(
};
}
-function makeStorageBalance(
+function makeStorageState(
resources: Resources,
storage: Resources,
performance: Resources
@@ -185,8 +173,8 @@ function createProductionQueueState(
taskEndingTimestamp ? taskEndingTimestamp - currentTimestamp : 0,
0
),
- firstTask: makeResourceBalance(firstTaskResources, resources, performance),
- allTasks: makeResourceBalance(allTaskResources, resources, performance),
+ firstTask: makeResourceState(firstTaskResources, resources, performance),
+ allTasks: makeResourceState(allTaskResources, resources, performance),
taskCount: tasks.length,
};
}
@@ -195,31 +183,30 @@ function createAllProductionQueueStates(
storage: VillageStorage,
taskCollection: VillageTaskCollection
) {
- let result: VillageProductionQueueStateDict = {};
+ let result: Array = [];
for (let taskQueueInfo of taskCollection.getGroupedByQueueTasks()) {
- result[taskQueueInfo.queue] = createProductionQueueState(taskQueueInfo, storage);
+ result.push(createProductionQueueState(taskQueueInfo, storage));
}
return result;
}
function getReadyForProductionTask(
- queues: VillageProductionQueueStateDict,
+ queues: ReadonlyArray,
maxResourcesForTask: Resources
): Task | undefined {
- const firstReadyGroup = Object.values(queues).find(group => group.isWaiting);
- if (!firstReadyGroup) {
+ const firstReadyQueue = queues.find(queue => queue.isWaiting);
+ if (!firstReadyQueue) {
return undefined;
}
- return firstReadyGroup.tasks.find(
- t =>
- t.name === TrainTroopTask.name ||
- !t.args.resources ||
- maxResourcesForTask.allGreaterOrEqual(Resources.fromObject(t.args.resources))
+ return firstReadyQueue.tasks.find(
+ task =>
+ task.name === TrainTroopTask.name ||
+ maxResourcesForTask.allGreaterOrEqual(getTaskResources(task))
);
}
-function getReadyTaskRequiredResources(task: Task | undefined): Resources {
+function getTaskResources(task: Task | undefined): Resources {
if (task && task.args.resources) {
return Resources.fromObject(task.args.resources);
}
@@ -235,30 +222,26 @@ function createVillageOwnState(
const resources = storage.getResources();
const storageResources = Resources.fromStorage(storage.getResourceStorage());
const performance = storage.getResourcesPerformance();
- const upperCriticalLevel = storageResources.sub(performance.scale(1));
const storageOptimumFullness = storageResources.sub(performance.scale(3));
- const isOverflowing = upperCriticalLevel.anyLower(resources);
+ const storageCriticalFullness = storageResources.sub(performance.scale(1));
+ const isOverflowing = storageCriticalFullness.anyLower(resources);
const queues = createAllProductionQueueStates(storage, taskCollection);
const firstReadyTask = getReadyForProductionTask(queues, storageOptimumFullness);
- const requiredResources = getReadyTaskRequiredResources(firstReadyTask);
- const frontierResources = taskCollection.getFrontierTaskResources();
- const totalRequiredResources = taskCollection.getAllTasksResources();
+ const requiredResources = getTaskResources(firstReadyTask);
return {
id: village.id,
village,
resources,
performance,
- storage: makeStorageBalance(resources, storageResources, performance),
- required: makeResourceBalance(requiredResources, resources, performance),
- upperCriticalLevel,
+ storage: makeStorageState(resources, storageResources, performance),
+ required: makeResourceState(requiredResources, resources, performance),
storageOptimumFullness,
+ storageCriticalFullness,
isOverflowing,
queues,
tasks: taskCollection.getTasks(),
firstReadyTask,
- frontierRequired: makeResourceBalance(frontierResources, resources, performance),
- totalRequired: makeResourceBalance(totalRequiredResources, resources, performance),
incomingResources: calcIncomingResources(storage),
settings,
};
diff --git a/src/VillageTaskCollection.ts b/src/VillageTaskCollection.ts
index 3f21dcb..f102c08 100644
--- a/src/VillageTaskCollection.ts
+++ b/src/VillageTaskCollection.ts
@@ -7,7 +7,6 @@ import { Resources } from './Core/Resources';
import { ContractAttributes, ContractType } from './Core/Contract';
import { UpgradeBuildingTask } from './Task/UpgradeBuildingTask';
import { ForgeImprovementTask } from './Task/ForgeImprovementTask';
-import * as _ from 'underscore';
export interface QueueTasks {
queue: ProductionQueue;
@@ -114,21 +113,4 @@ export class VillageTaskCollection {
}
return result;
}
-
- getFrontierTaskResources(): Resources {
- let result = Resources.zero();
- const groups = this.getGroupedByQueueTasks();
- for (let group of groups) {
- const firstTask = _.first(group.tasks);
- if (firstTask && firstTask.args.resources) {
- result = result.add(Resources.fromObject(firstTask.args.resources));
- }
- }
- return result;
- }
-
- getAllTasksResources(): Resources {
- const tasks = this.storage.getTasks().filter(t => t.args.resources);
- return tasks.reduce((acc, t) => acc.add(t.args.resources!), Resources.zero());
- }
}