Add resource performance values
This commit is contained in:
		| @@ -16,7 +16,7 @@ export default { | |||||||
|   }, |   }, | ||||||
|   computed: { |   computed: { | ||||||
|     villageName() { |     villageName() { | ||||||
|       let village = this.shared.village; |       let village = this.shared.activeVillage; | ||||||
|       return village ? village.name : 'Unknown'; |       return village ? village.name : 'Unknown'; | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -24,9 +24,9 @@ export default { | |||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       shared: this.$root.$data, |       shared: this.$root.$data, | ||||||
|  |       activeVillage: this.$root.$data.activeVillage, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   computed: {}, |  | ||||||
|   methods: { |   methods: { | ||||||
|     formatDate(ts) { |     formatDate(ts) { | ||||||
|       const d = new Date(ts * 1000); |       const d = new Date(ts * 1000); | ||||||
| @@ -34,7 +34,7 @@ export default { | |||||||
|     }, |     }, | ||||||
|     isThisVillageTask(task) { |     isThisVillageTask(task) { | ||||||
|       const taskVillageId = (task.args || {}).villageId; |       const taskVillageId = (task.args || {}).villageId; | ||||||
|       const currentVillageId = (this.shared.village || {}).id; |       const currentVillageId = this.activeVillage.id; | ||||||
|       return taskVillageId !== undefined && taskVillageId === currentVillageId; |       return taskVillageId !== undefined && taskVillageId === currentVillageId; | ||||||
|     }, |     }, | ||||||
|     onRemove(taskId) { |     onRemove(taskId) { | ||||||
|   | |||||||
| @@ -1,21 +1,55 @@ | |||||||
| <template> | <template> | ||||||
|   <section> |   <section> | ||||||
|     <table class="village-table"> |     <table class="village-table"> | ||||||
|       <tr v-for="village in shared.villages" :key="village.id"> |       <thead> | ||||||
|         <td :class="{ active: village.active }">{{ village.id }} - {{ village.name }}</td> |         <tr> | ||||||
|         <td>Д: {{ resources(village.id).lumber }}</td> |           <th></th> | ||||||
|         <td>Г: {{ resources(village.id).clay }}</td> |           <th class="right">Дерево</th> | ||||||
|         <td>Ж: {{ resources(village.id).iron }}</td> |           <th class="right">Глина</th> | ||||||
|         <td>З: {{ resources(village.id).crop }}</td> |           <th class="right">Железо</th> | ||||||
|         <td> |           <th class="right">Зерно</th> | ||||||
|           <a |           <th class="right">Склад</th> | ||||||
|             v-if="village.id !== activeVillageId" |           <th class="right">Амбар</th> | ||||||
|             :href="path('/build.php', { newdid: activeVillageId, gid: 17, t: 5, x: village.crd.x, y: village.crd.y })" |         </tr> | ||||||
|             :title="'Отправить ресурсы в ' + village.name" |       </thead> | ||||||
|             >РЕС</a |       <tbody> | ||||||
|           > |         <template v-for="village in shared.villages"> | ||||||
|         </td> |           <tr class="top-line"> | ||||||
|       </tr> |             <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"> | ||||||
|  |               <a :href="warehousePath(village)" v-text="village.warehouse"></a> | ||||||
|  |             </td> | ||||||
|  |             <td class="right" v-text="village.granary"></td> | ||||||
|  |           </tr> | ||||||
|  |           <tr> | ||||||
|  |             <td></td> | ||||||
|  |             <td class="right small">+{{ village.lumber_hour }}</td> | ||||||
|  |             <td class="right small">+{{ village.clay_hour }}</td> | ||||||
|  |             <td class="right small">+{{ village.iron_hour }}</td> | ||||||
|  |             <td class="right small">+{{ village.crop_hour }}</td> | ||||||
|  |             <td></td> | ||||||
|  |             <td></td> | ||||||
|  |           </tr> | ||||||
|  |           <tr> | ||||||
|  |             <td></td> | ||||||
|  |             <td class="right" colspan="6"> | ||||||
|  |               <a | ||||||
|  |                 class="village-quick-link" | ||||||
|  |                 v-for="v in shared.villages" | ||||||
|  |                 v-if="v.id !== village.id" | ||||||
|  |                 :href="marketPath(village, v)" | ||||||
|  |                 :title="'Отправить ресурсы из ' + village.name + ' в ' + v.name" | ||||||
|  |                 >->{{ v.name }}</a | ||||||
|  |               > | ||||||
|  |               <a class="village-quick-link" :href="quartersPath(village)">Казармы</a> | ||||||
|  |             </td> | ||||||
|  |           </tr> | ||||||
|  |         </template> | ||||||
|  |       </tbody> | ||||||
|     </table> |     </table> | ||||||
|   </section> |   </section> | ||||||
| </template> | </template> | ||||||
| @@ -27,20 +61,22 @@ export default { | |||||||
|   data() { |   data() { | ||||||
|     return { |     return { | ||||||
|       shared: this.$root.$data, |       shared: this.$root.$data, | ||||||
|  |       activeVillage: this.$root.$data.activeVillage, | ||||||
|     }; |     }; | ||||||
|   }, |   }, | ||||||
|   computed: { |  | ||||||
|     activeVillageId() { |  | ||||||
|       return this.shared.village.id; |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|   methods: { |   methods: { | ||||||
|     resources(id) { |  | ||||||
|       return this.shared.getVillageResources(id); |  | ||||||
|     }, |  | ||||||
|     path(name, args) { |     path(name, args) { | ||||||
|       return path(name, args); |       return path(name, args); | ||||||
|     }, |     }, | ||||||
|  |     marketPath(fromVillage, toVillage) { | ||||||
|  |       return path('/build.php', { newdid: fromVillage.id, gid: 17, t: 5, x: toVillage.crd.x, y: toVillage.crd.y }); | ||||||
|  |     }, | ||||||
|  |     warehousePath(village) { | ||||||
|  |       return path('/build.php', { newdid: village.id, gid: 10 }); | ||||||
|  |     }, | ||||||
|  |     quartersPath(village) { | ||||||
|  |       return path('/build.php', { newdid: village.id, gid: 19 }); | ||||||
|  |     }, | ||||||
|   }, |   }, | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
| @@ -52,11 +88,30 @@ export default { | |||||||
| } | } | ||||||
|  |  | ||||||
| .village-table td { | .village-table td { | ||||||
|   border-top: 1px solid #ddd; |  | ||||||
|   padding: 4px; |   padding: 4px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .village-table td.active { | .village-table td.active { | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .top-line td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .small { | ||||||
|  |   font-size: 90%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .village-quick-link { | ||||||
|  |   display: inline-block; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .village-quick-link + .village-quick-link { | ||||||
|  |   margin-left: 0.4em; | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ import { getNumber, uniqId, waitForLoad } from '../utils'; | |||||||
| import { Scheduler } from '../Scheduler'; | import { Scheduler } from '../Scheduler'; | ||||||
| import { BuildPage } from '../Page/BuildPage'; | import { BuildPage } from '../Page/BuildPage'; | ||||||
| import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; | import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; | ||||||
| import { grabActiveVillage, grabActiveVillageId, grabVillageList } from '../Page/VillageBlock'; | import { grabActiveVillageId, grabVillageList } from '../Page/VillageBlock'; | ||||||
| import { | import { | ||||||
|     grabResourceDeposits, |     grabResourceDeposits, | ||||||
|     onResourceSlotCtrlClick, |     onResourceSlotCtrlClick, | ||||||
| @@ -14,7 +14,6 @@ import Vue from 'vue'; | |||||||
| import DashboardApp from './Components/DashboardApp.vue'; | import DashboardApp from './Components/DashboardApp.vue'; | ||||||
| import { ResourcesToLevel } from '../Task/ResourcesToLevel'; | import { ResourcesToLevel } from '../Task/ResourcesToLevel'; | ||||||
| import { Logger } from '../Logger'; | import { Logger } from '../Logger'; | ||||||
| import { Resources } from '../Game'; |  | ||||||
| import { VillageState } from '../State/VillageState'; | import { VillageState } from '../State/VillageState'; | ||||||
| import { StateGrabberManager } from '../State/StateGrabberManager'; | import { StateGrabberManager } from '../State/StateGrabberManager'; | ||||||
|  |  | ||||||
| @@ -51,10 +50,10 @@ export class Dashboard { | |||||||
|  |  | ||||||
|         const state = { |         const state = { | ||||||
|             name: 'Dashboard', |             name: 'Dashboard', | ||||||
|             village: grabActiveVillage(), |  | ||||||
|             villages: grabVillageList(), |  | ||||||
|             version: this.version, |             version: this.version, | ||||||
|             taskList: this.scheduler.getTaskItems(), |             activeVillage: {}, | ||||||
|  |             villages: [], | ||||||
|  |             taskList: [], | ||||||
|             quickActions: quickActions, |             quickActions: quickActions, | ||||||
|  |  | ||||||
|             refreshTasks() { |             refreshTasks() { | ||||||
| @@ -66,13 +65,42 @@ export class Dashboard { | |||||||
|                 this.taskList = scheduler.getTaskItems(); |                 this.taskList = scheduler.getTaskItems(); | ||||||
|             }, |             }, | ||||||
|  |  | ||||||
|             getVillageResources(villageId): Resources { |             refreshVillages() { | ||||||
|                 const state = new VillageState(villageId); |                 this.villages = grabVillageList().map(village => { | ||||||
|                 return state.getResources(); |                     const state = new VillageState(village.id); | ||||||
|  |                     const resources = state.getResources(); | ||||||
|  |                     const storage = state.getResourceStorage(); | ||||||
|  |                     const performance = state.getResourcesPerformance(); | ||||||
|  |                     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, | ||||||
|  |                         warehouse: storage.warehouse, | ||||||
|  |                         granary: storage.granary, | ||||||
|  |                     }; | ||||||
|  |                 }); | ||||||
|  |                 for (let village of this.villages) { | ||||||
|  |                     if (village.active) { | ||||||
|  |                         this.activeVillage = village; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             }, |             }, | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         setInterval(() => state.refreshTasks(), 1000); |         state.refreshTasks(); | ||||||
|  |         setInterval(() => state.refreshTasks(), 2000); | ||||||
|  |  | ||||||
|  |         state.refreshVillages(); | ||||||
|  |         setInterval(() => state.refreshVillages(), 5000); | ||||||
|  |  | ||||||
|         const tasks = this.scheduler.getTaskItems(); |         const tasks = this.scheduler.getTaskItems(); | ||||||
|         const buildingsInQueue = tasks |         const buildingsInQueue = tasks | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| import { Coordinates, Village, VillageList } from '../Game'; | import { Coordinates, Resources, Village, VillageList } from '../Game'; | ||||||
| import { GrabError } from '../Errors'; | import { GrabError } from '../Errors'; | ||||||
| import * as URLParse from 'url-parse'; | import * as URLParse from 'url-parse'; | ||||||
| import { getNumber } from '../utils'; | import { getNumber } from '../utils'; | ||||||
| @@ -56,3 +56,19 @@ function grabVillageInfo($el): Village { | |||||||
|     ); |     ); | ||||||
|     return new Village(id, name, active, new Coordinates(x, y)); |     return new Village(id, name, active, new Coordinates(x, y)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export function grabResourcesPerformance(): Resources { | ||||||
|  |     const $el = jQuery('#production'); | ||||||
|  |     if ($el.length !== 1) { | ||||||
|  |         throw new GrabError(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     const $nums = $el.find('td.num'); | ||||||
|  |  | ||||||
|  |     return new Resources( | ||||||
|  |         getNumber($nums.get(0).innerText), | ||||||
|  |         getNumber($nums.get(1).innerText), | ||||||
|  |         getNumber($nums.get(2).innerText), | ||||||
|  |         getNumber($nums.get(3).innerText) | ||||||
|  |     ); | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								src/State/ResourcePerformanceGrabber.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/State/ResourcePerformanceGrabber.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | import * as URLParse from 'url-parse'; | ||||||
|  | import { StateGrabber } from './StateGrabber'; | ||||||
|  | import { grabActiveVillageId, grabResourcesPerformance } from '../Page/VillageBlock'; | ||||||
|  | import { VillageState } from './VillageState'; | ||||||
|  |  | ||||||
|  | export class ResourcePerformanceGrabber extends StateGrabber { | ||||||
|  |     grab(): void { | ||||||
|  |         const p = new URLParse(window.location.href, true); | ||||||
|  |         if (p.pathname !== '/dorf1.php') { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const villageId = grabActiveVillageId(); | ||||||
|  |         const state = new VillageState(villageId); | ||||||
|  |         state.storeResourcesPerformance(grabResourcesPerformance()); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,12 +1,14 @@ | |||||||
| import { StateGrabber } from './StateGrabber'; | import { StateGrabber } from './StateGrabber'; | ||||||
| import { ResourceGrabber } from './ResourceGrabber'; | import { ResourceGrabber } from './ResourceGrabber'; | ||||||
|  | import { ResourcePerformanceGrabber } from './ResourcePerformanceGrabber'; | ||||||
|  |  | ||||||
| export class StateGrabberManager { | export class StateGrabberManager { | ||||||
|     private grabbers: Array<StateGrabber> = []; |     private readonly grabbers: Array<StateGrabber> = []; | ||||||
|  |  | ||||||
|     constructor() { |     constructor() { | ||||||
|         this.grabbers = []; |         this.grabbers = []; | ||||||
|         this.grabbers.push(new ResourceGrabber()); |         this.grabbers.push(new ResourceGrabber()); | ||||||
|  |         this.grabbers.push(new ResourcePerformanceGrabber()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     grab() { |     grab() { | ||||||
|   | |||||||
| @@ -1,6 +1,10 @@ | |||||||
| import { DataStorage } from '../Storage/DataStorage'; | import { DataStorage } from '../Storage/DataStorage'; | ||||||
| import { Resources, ResourceStorage } from '../Game'; | import { Resources, ResourceStorage } from '../Game'; | ||||||
|  |  | ||||||
|  | const RESOURCES_KEY = 'res'; | ||||||
|  | const CAPACITY_KEY = 'cap'; | ||||||
|  | const PERFORMANCE_KEY = 'perf'; | ||||||
|  |  | ||||||
| export class VillageState { | export class VillageState { | ||||||
|     private storage: DataStorage; |     private storage: DataStorage; | ||||||
|     constructor(villageId: number) { |     constructor(villageId: number) { | ||||||
| @@ -8,22 +12,32 @@ export class VillageState { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     storeResources(resources: Resources) { |     storeResources(resources: Resources) { | ||||||
|         this.storage.set('res', resources); |         this.storage.set(RESOURCES_KEY, resources); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     getResources(): Resources { |     getResources(): Resources { | ||||||
|         let plain = this.storage.get('res'); |         let plain = this.storage.get(RESOURCES_KEY); | ||||||
|         let res = new Resources(0, 0, 0, 0); |         let res = new Resources(0, 0, 0, 0); | ||||||
|         return Object.assign(res, plain) as Resources; |         return Object.assign(res, plain) as Resources; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     storeResourceStorage(storage: ResourceStorage) { |     storeResourceStorage(storage: ResourceStorage) { | ||||||
|         this.storage.set('cap', storage); |         this.storage.set(CAPACITY_KEY, storage); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     getResourceStorage(): ResourceStorage { |     getResourceStorage(): ResourceStorage { | ||||||
|         let plain = this.storage.get('res'); |         let plain = this.storage.get(CAPACITY_KEY); | ||||||
|         let res = new ResourceStorage(0, 0); |         let res = new ResourceStorage(0, 0); | ||||||
|         return Object.assign(res, plain) as ResourceStorage; |         return Object.assign(res, plain) as ResourceStorage; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     storeResourcesPerformance(resources: Resources) { | ||||||
|  |         this.storage.set(PERFORMANCE_KEY, resources); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     getResourcesPerformance(): Resources { | ||||||
|  |         let plain = this.storage.get(PERFORMANCE_KEY); | ||||||
|  |         let res = new Resources(0, 0, 0, 0); | ||||||
|  |         return Object.assign(res, plain) as Resources; | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user