Add timings
This commit is contained in:
parent
8d1b6cc13f
commit
217b653e5b
@ -14,6 +14,7 @@ import DashboardApp from './DashboardView/Dashboard.vue';
|
||||
import { ResourcesToLevel } from './Task/ResourcesToLevel';
|
||||
import { ConsoleLogger, Logger } from './Logger';
|
||||
import { VillageState } from './State/VillageState';
|
||||
import { Resources, Village } from './Game';
|
||||
|
||||
interface QuickAction {
|
||||
label: string;
|
||||
@ -63,38 +64,7 @@ export class ControlPanel {
|
||||
|
||||
refreshVillages() {
|
||||
this.villages = grabVillageList().map(village => {
|
||||
const state = new VillageState(village.id);
|
||||
const resources = state.getResources();
|
||||
const storage = state.getResourceStorage();
|
||||
const performance = state.getResourcesPerformance();
|
||||
const buildQueueInfo = state.getBuildingQueueInfo();
|
||||
const requiredResources = scheduler.getVillageRequiredResources(village.id);
|
||||
const totalRequiredResources = scheduler.getTotalVillageRequiredResources(village.id);
|
||||
return {
|
||||
id: village.id,
|
||||
name: village.name,
|
||||
crd: village.crd,
|
||||
active: village.active,
|
||||
lumber: resources.lumber,
|
||||
clay: resources.clay,
|
||||
iron: resources.iron,
|
||||
crop: resources.crop,
|
||||
lumber_hour: performance.lumber,
|
||||
clay_hour: performance.clay,
|
||||
iron_hour: performance.iron,
|
||||
crop_hour: performance.crop,
|
||||
lumber_need: requiredResources && requiredResources.lumber,
|
||||
clay_need: requiredResources && requiredResources.clay,
|
||||
iron_need: requiredResources && requiredResources.iron,
|
||||
crop_need: requiredResources && requiredResources.crop,
|
||||
lumber_total_need: totalRequiredResources.lumber,
|
||||
clay_total_need: totalRequiredResources.clay,
|
||||
iron_total_need: totalRequiredResources.iron,
|
||||
crop_total_need: totalRequiredResources.crop,
|
||||
warehouse: storage.warehouse,
|
||||
granary: storage.granary,
|
||||
buildRemainingSeconds: buildQueueInfo.seconds,
|
||||
};
|
||||
return new VillageController(village, new VillageState(village.id), scheduler);
|
||||
});
|
||||
for (let village of this.villages) {
|
||||
if (village.active) {
|
||||
@ -175,3 +145,110 @@ export class ControlPanel {
|
||||
setTimeout(() => n && n.close(), 4000);
|
||||
}
|
||||
}
|
||||
|
||||
class VillageController {
|
||||
public readonly id;
|
||||
public readonly name;
|
||||
public readonly crd;
|
||||
public readonly active;
|
||||
public readonly lumber;
|
||||
public readonly clay;
|
||||
public readonly iron;
|
||||
public readonly crop;
|
||||
public readonly resources;
|
||||
public readonly performance;
|
||||
public readonly requiredResources;
|
||||
public readonly totalRequiredResources;
|
||||
public readonly storage;
|
||||
public readonly lumber_hour;
|
||||
public readonly clay_hour;
|
||||
public readonly iron_hour;
|
||||
public readonly crop_hour;
|
||||
public readonly lumber_need;
|
||||
public readonly clay_need;
|
||||
public readonly iron_need;
|
||||
public readonly crop_need;
|
||||
public readonly lumber_total_need;
|
||||
public readonly clay_total_need;
|
||||
public readonly iron_total_need;
|
||||
public readonly crop_total_need;
|
||||
public readonly warehouse;
|
||||
public readonly granary;
|
||||
public readonly buildRemainingSeconds;
|
||||
|
||||
constructor(village: Village, state: VillageState, scheduler: Scheduler) {
|
||||
const resources = state.getResources();
|
||||
const storage = state.getResourceStorage();
|
||||
const performance = state.getResourcesPerformance();
|
||||
const buildQueueInfo = state.getBuildingQueueInfo();
|
||||
const requiredResources = scheduler.getVillageRequiredResources(village.id);
|
||||
const totalRequiredResources = scheduler.getTotalVillageRequiredResources(village.id);
|
||||
this.id = village.id;
|
||||
this.name = village.name;
|
||||
this.crd = village.crd;
|
||||
this.active = village.active;
|
||||
this.lumber = resources.lumber;
|
||||
this.clay = resources.clay;
|
||||
this.iron = resources.iron;
|
||||
this.crop = resources.crop;
|
||||
this.resources = resources;
|
||||
this.performance = performance;
|
||||
this.requiredResources = requiredResources;
|
||||
this.totalRequiredResources = totalRequiredResources;
|
||||
this.storage = storage;
|
||||
this.lumber_hour = performance.lumber;
|
||||
this.clay_hour = performance.clay;
|
||||
this.iron_hour = performance.iron;
|
||||
this.crop_hour = performance.crop;
|
||||
this.lumber_need = requiredResources && requiredResources.lumber;
|
||||
this.clay_need = requiredResources && requiredResources.clay;
|
||||
this.iron_need = requiredResources && requiredResources.iron;
|
||||
this.crop_need = requiredResources && requiredResources.crop;
|
||||
this.lumber_total_need = totalRequiredResources.lumber;
|
||||
this.clay_total_need = totalRequiredResources.clay;
|
||||
this.iron_total_need = totalRequiredResources.iron;
|
||||
this.crop_total_need = totalRequiredResources.crop;
|
||||
this.warehouse = storage.warehouse;
|
||||
this.granary = storage.granary;
|
||||
this.buildRemainingSeconds = buildQueueInfo.seconds;
|
||||
}
|
||||
|
||||
timeToRequired() {
|
||||
return this.timeToResources(this.requiredResources);
|
||||
}
|
||||
|
||||
timeToTotalRequired() {
|
||||
return this.timeToResources(this.totalRequiredResources);
|
||||
}
|
||||
|
||||
private timeToResources(resources: Resources | undefined): number {
|
||||
if (resources === undefined) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
const time_to_lumber = this.timeToRes(this.resources.lumber, resources.lumber, this.performance.lumber);
|
||||
|
||||
const time_to_clay = this.timeToRes(this.resources.clay, resources.clay, this.performance.clay);
|
||||
const time_to_iron = this.timeToRes(this.resources.iron, resources.iron, this.performance.iron);
|
||||
const time_to_crop = this.timeToRes(this.resources.crop, resources.crop, this.performance.crop);
|
||||
|
||||
const min = Math.max(time_to_lumber, time_to_clay, time_to_iron, time_to_crop);
|
||||
|
||||
if (min === -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return Math.max(time_to_lumber, time_to_clay, time_to_iron, time_to_crop);
|
||||
}
|
||||
|
||||
private timeToRes(current: number, desired: number, speed: number) {
|
||||
if (current >= desired) {
|
||||
return 0;
|
||||
}
|
||||
if (current < desired && speed <= 0) {
|
||||
return -1;
|
||||
}
|
||||
const diff = desired - current;
|
||||
return (diff / speed) * 3600;
|
||||
}
|
||||
}
|
||||
|
@ -33,34 +33,43 @@
|
||||
</td>
|
||||
<td class="right" v-text="village.granary"></td>
|
||||
</tr>
|
||||
<tr class="performance-line">
|
||||
<td class="right">Прирост:</td>
|
||||
<td class="right">+{{ village.lumber_hour }}</td>
|
||||
<td class="right">+{{ village.clay_hour }}</td>
|
||||
<td class="right">+{{ village.iron_hour }}</td>
|
||||
<td class="right">+{{ village.crop_hour }}</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="required-line">
|
||||
<td class="right">След:</td>
|
||||
<td class="right" v-text="village.lumber_need || ''"></td>
|
||||
<td class="right" v-text="village.clay_need || ''"></td>
|
||||
<td class="right" v-text="village.iron_need || ''"></td>
|
||||
<td class="right" v-text="village.crop_need || ''"></td>
|
||||
<td></td>
|
||||
<td class="right" v-text="secondsToTime(village.buildRemainingSeconds)"></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="required-line">
|
||||
<td class="right">Баланс:</td>
|
||||
<td class="right">
|
||||
<resource :value="village.lumber - village.lumber_need"></resource>
|
||||
<resource :value="village.lumber - (village.lumber_need || 0)"></resource>
|
||||
</td>
|
||||
<td class="right">
|
||||
<resource :value="village.clay - village.clay_need"></resource>
|
||||
<resource :value="village.clay - (village.clay_need || 0)"></resource>
|
||||
</td>
|
||||
<td class="right">
|
||||
<resource :value="village.iron - village.iron_need"></resource>
|
||||
<resource :value="village.iron - (village.iron_need || 0)"></resource>
|
||||
</td>
|
||||
<td class="right">
|
||||
<resource :value="village.crop - village.crop_need"></resource>
|
||||
<resource :value="village.crop - (village.crop_need || 0)"></resource>
|
||||
</td>
|
||||
<td></td>
|
||||
<td class="right" v-text="timeToRequired(village)"></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="required-line">
|
||||
<td class="right"></td>
|
||||
<td class="right">Баланс очереди:</td>
|
||||
<td class="right">
|
||||
<resource :value="village.lumber - village.lumber_total_need"></resource>
|
||||
</td>
|
||||
@ -73,16 +82,7 @@
|
||||
<td class="right">
|
||||
<resource :value="village.crop - village.crop_total_need"></resource>
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="performance-line">
|
||||
<td class="right" v-text="secondsToTime(village.buildRemainingSeconds)"></td>
|
||||
<td class="right">+{{ village.lumber_hour }}</td>
|
||||
<td class="right">+{{ village.clay_hour }}</td>
|
||||
<td class="right">+{{ village.iron_hour }}</td>
|
||||
<td class="right">+{{ village.crop_hour }}</td>
|
||||
<td></td>
|
||||
<td class="right" v-text="timeToTotalRequired(village)"></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="normal-line">
|
||||
@ -135,11 +135,29 @@ export default {
|
||||
return path('/build.php', { newdid: village.id, gid: 19 });
|
||||
},
|
||||
secondsToTime(value) {
|
||||
if (value === 0) {
|
||||
return '';
|
||||
}
|
||||
const hours = Math.floor(value / 3600);
|
||||
const minutes = Math.floor((value % 3600) / 60);
|
||||
const seconds = value % 60;
|
||||
const seconds = Math.floor(value % 60);
|
||||
return `${hours}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
|
||||
},
|
||||
secondsToRequiredTime(value) {
|
||||
if (value === -1) {
|
||||
return '-';
|
||||
}
|
||||
if (value === -2) {
|
||||
return '';
|
||||
}
|
||||
return this.secondsToTime(value);
|
||||
},
|
||||
timeToRequired(village) {
|
||||
return this.secondsToRequiredTime(village.timeToRequired());
|
||||
},
|
||||
timeToTotalRequired(village) {
|
||||
return this.secondsToRequiredTime(village.timeToTotalRequired());
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
Loading…
Reference in New Issue
Block a user