Store incoming merchants

This commit is contained in:
2020-04-25 12:01:07 +03:00
parent 6bd04ee6e2
commit f005072d9c
13 changed files with 227 additions and 52 deletions

View File

@ -1,12 +1,18 @@
import { DataStorage } from '../DataStorage';
import { BuildingQueueInfo } from '../Game';
import { Resources } from '../Core/Resources';
import { Resources, ResourcesInterface } from '../Core/Resources';
import { ResourceStorage } from '../Core/ResourceStorage';
import { IncomingMerchant } from '../Core/Market';
const RESOURCES_KEY = 'res';
const CAPACITY_KEY = 'cap';
const PERFORMANCE_KEY = 'perf';
const BUILDING_QUEUE_KEY = 'bq';
const INCOMING_MERCHANTS_KEY = 'im';
const ResourceOptions = {
factory: () => new Resources(0, 0, 0, 0),
};
export class VillageState {
private storage: DataStorage;
@ -19,9 +25,7 @@ export class VillageState {
}
getResources(): Resources {
let plain = this.storage.get(RESOURCES_KEY);
let res = new Resources(0, 0, 0, 0);
return Object.assign(res, plain) as Resources;
return this.storage.getTyped(RESOURCES_KEY, ResourceOptions);
}
storeResourceStorage(storage: ResourceStorage) {
@ -39,9 +43,7 @@ export class VillageState {
}
getResourcesPerformance(): Resources {
let plain = this.storage.get(PERFORMANCE_KEY);
let res = new Resources(0, 0, 0, 0);
return Object.assign(res, plain) as Resources;
return this.storage.getTyped(PERFORMANCE_KEY, ResourceOptions);
}
storeBuildingQueueInfo(info: BuildingQueueInfo): void {
@ -53,4 +55,23 @@ export class VillageState {
let res = new BuildingQueueInfo(0);
return Object.assign(res, plain) as BuildingQueueInfo;
}
storeIncomingMerchants(merchants: ReadonlyArray<IncomingMerchant>): void {
this.storage.set(
INCOMING_MERCHANTS_KEY,
merchants.map(m => ({ ...m.resources, ts: m.ts }))
);
}
getIncomingMerchants(): ReadonlyArray<IncomingMerchant> {
const objects = this.storage.getTypedList<object>(INCOMING_MERCHANTS_KEY, { factory: () => ({}) });
return objects.map((plain: object) => {
const m = new IncomingMerchant(new Resources(0, 0, 0, 0), 0);
if (typeof plain !== 'object') {
return m;
}
const norm = plain as ResourcesInterface & { ts: number };
return new IncomingMerchant(Resources.fromObject(norm), Number(norm.ts || 0));
});
}
}