diff --git a/src/Dashboard/Components/VillageStateList.vue b/src/Dashboard/Components/VillageStateList.vue index 4227060..24859c2 100644 --- a/src/Dashboard/Components/VillageStateList.vue +++ b/src/Dashboard/Components/VillageStateList.vue @@ -16,10 +16,26 @@ <template v-for="village in shared.villages"> <tr class="normal-line top-line"> <td :class="{ active: village.active }" :title="village.id">{{ village.name }}</td> - <td class="right" v-text="village.lumber"></td> - <td class="right" v-text="village.clay"></td> - <td class="right" v-text="village.iron"></td> - <td class="right" v-text="village.crop"></td> + <td + class="right" + v-text="village.lumber" + :title="resourceTitle(village.lumber, village.warehouse, village.lumber_hour)" + ></td> + <td + class="right" + v-text="village.clay" + :title="resourceTitle(village.clay, village.warehouse, village.clay_hour)" + ></td> + <td + class="right" + v-text="village.iron" + :title="resourceTitle(village.iron, village.warehouse, village.iron_hour)" + ></td> + <td + class="right" + v-text="village.crop" + :title="resourceTitle(village.crop, village.granary, village.crop_hour)" + ></td> <td class="right"> <a :href="warehousePath(village)" v-text="village.warehouse"></a> </td> @@ -77,6 +93,21 @@ export default { quartersPath(village) { return path('/build.php', { newdid: village.id, gid: 19 }); }, + resourceTitle(current, max, speed) { + const percent = Math.floor((current / max) * 100); + if (speed < 0) { + const time = this.fractionalHourToTime(current / speed); + return `${current}, ${percent}%, опустеет через ${time}`; + } else { + const time = this.fractionalHourToTime((max - current) / speed); + return `${current}, ${percent}%, заполнится через ${time}`; + } + }, + fractionalHourToTime(value) { + const hours = Math.floor(value); + const minutes = Math.round((value - hours) * 60); + return `${hours}:${String(minutes).padStart(2, '0')}`; + }, }, }; </script> diff --git a/src/Page/VillageBlock.ts b/src/Page/VillageBlock.ts index 3d85503..a22d852 100644 --- a/src/Page/VillageBlock.ts +++ b/src/Page/VillageBlock.ts @@ -40,20 +40,8 @@ function grabVillageInfo($el): Village { const id = getNumber(parsedHref.query.newdid); const name = $el.find('.name').text(); const active = $el.hasClass('active'); - const x = getNumber( - $el - .find('.coordinateX') - .text() - .replace('−', '-') - .replace(/[^0-9-]/gi, '') - ); - const y = getNumber( - $el - .find('.coordinateY') - .text() - .replace('−', '-') - .replace(/[^0-9-]/gi, '') - ); + const x = getNumber($el.find('.coordinateX').text()); + const y = getNumber($el.find('.coordinateY').text()); return new Village(id, name, active, new Coordinates(x, y)); } diff --git a/src/utils.ts b/src/utils.ts index a4ca548..7832798 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -76,7 +76,10 @@ export function* split(n: number) { } export function toNumber(value: any): number | undefined { - const converted = Number(value); + const normalized = String(value) + .replace('−', '-') + .replace(/[^0-9-]/gi, ''); + const converted = Number(normalized); return isNaN(converted) ? undefined : converted; }