Rebuild village production queue system

This commit is contained in:
2020-05-24 17:23:13 +03:00
parent f3a1e67906
commit 8bea617f5b
26 changed files with 520 additions and 336 deletions

@ -1,8 +1,7 @@
import { Grabber } from './Grabber';
import { grabActiveVillageId } from '../Page/VillageBlock';
import { getBuildingPageAttributes, isBuildingPage } from '../Page/PageDetectors';
import { grabContractResources, hasContractResources } from '../Page/BuildingPage/BuildingPage';
import { ContractType } from '../Scheduler';
import { ContractType } from '../Core/Contract';
export class BuildingContractGrabber extends Grabber {
grab(): void {
@ -19,12 +18,10 @@ export class BuildingContractGrabber extends Grabber {
return;
}
const villageId = grabActiveVillageId();
const contract = grabContractResources();
this.scheduler.updateResources(contract, {
this.controller.updateResources(contract, {
type: ContractType.UpgradeBuilding,
villageId,
buildId: building.buildId,
});
}

@ -1,9 +1,7 @@
import { Grabber } from './Grabber';
import { grabActiveVillageId } from '../Page/VillageBlock';
import { getBuildingPageAttributes, isForgePage } from '../Page/PageDetectors';
import { ContractType } from '../Scheduler';
import { ContractType } from '../Core/Contract';
import { grabImprovementContracts, grabRemainingSeconds } from '../Page/BuildingPage/ForgePage';
import { VillageStorage } from '../Storage/VillageStorage';
import { ProductionQueue } from '../Core/ProductionQueue';
import { timestamp } from '../utils';
@ -13,29 +11,26 @@ export class ForgePageGrabber extends Grabber {
return;
}
const villageId = grabActiveVillageId();
this.grabContracts(villageId);
this.grabTimer(villageId);
this.grabContracts();
this.grabTimer();
}
private grabContracts(villageId: number): void {
private grabContracts(): void {
const { buildId } = getBuildingPageAttributes();
const contracts = grabImprovementContracts();
for (let { resources, unitId } of contracts) {
this.scheduler.updateResources(resources, {
this.controller.updateResources(resources, {
type: ContractType.ImproveTrooper,
villageId,
buildId,
unitId,
});
}
}
private grabTimer(villageId: number): void {
const state = new VillageStorage(villageId);
private grabTimer(): void {
const storage = this.controller.getStorage();
const seconds = grabRemainingSeconds();
state.storeQueueTaskEnding(ProductionQueue.UpgradeUnit, seconds ? seconds + timestamp() : 0);
storage.storeQueueTaskEnding(ProductionQueue.UpgradeUnit, seconds ? seconds + timestamp() : 0);
}
}

@ -1,10 +1,10 @@
import { Scheduler } from '../Scheduler';
import { VillageController } from '../VillageController';
export abstract class Grabber {
protected scheduler: Scheduler;
protected controller: VillageController;
constructor(scheduler: Scheduler) {
this.scheduler = scheduler;
constructor(controller: VillageController) {
this.controller = controller;
}
abstract grab(): void;

@ -3,28 +3,35 @@ import { VillageResourceGrabber } from './VillageResourceGrabber';
import { VillageOverviewPageGrabber } from './VillageOverviewPageGrabber';
import { HeroPageGrabber } from './HeroPageGrabber';
import { MarketPageGrabber } from './MarketPageGrabber';
import { Scheduler } from '../Scheduler';
import { BuildingContractGrabber } from './BuildingContractGrabber';
import { ForgePageGrabber } from './ForgePageGrabber';
import { GuildHallPageGrabber } from './GuildHallPageGrabber';
import { VillageControllerFactory } from '../VillageControllerFactory';
export class GrabberManager {
private readonly grabbers: Array<Grabber> = [];
private factory: VillageControllerFactory;
constructor(scheduler: Scheduler) {
this.grabbers = [];
this.grabbers.push(new VillageResourceGrabber(scheduler));
this.grabbers.push(new VillageOverviewPageGrabber(scheduler));
this.grabbers.push(new HeroPageGrabber(scheduler));
this.grabbers.push(new MarketPageGrabber(scheduler));
this.grabbers.push(new BuildingContractGrabber(scheduler));
this.grabbers.push(new ForgePageGrabber(scheduler));
this.grabbers.push(new GuildHallPageGrabber(scheduler));
constructor(factory: VillageControllerFactory) {
this.factory = factory;
}
grab() {
for (let grabber of this.grabbers) {
const grabbers = this.createGrabbers();
for (let grabber of grabbers) {
grabber.grab();
}
}
private createGrabbers(): Array<Grabber> {
const controller = this.factory.getActive();
const grabbers: Array<Grabber> = [];
grabbers.push(new VillageResourceGrabber(controller));
grabbers.push(new VillageOverviewPageGrabber(controller));
grabbers.push(new HeroPageGrabber(controller));
grabbers.push(new MarketPageGrabber(controller));
grabbers.push(new BuildingContractGrabber(controller));
grabbers.push(new ForgePageGrabber(controller));
grabbers.push(new GuildHallPageGrabber(controller));
return grabbers;
}
}

@ -1,6 +1,4 @@
import { Grabber } from './Grabber';
import { grabActiveVillageId } from '../Page/VillageBlock';
import { VillageStorage } from '../Storage/VillageStorage';
import { isGuildHallPage } from '../Page/PageDetectors';
import { grabRemainingSeconds } from '../Page/BuildingPage/GuildHallPage';
import { ProductionQueue } from '../Core/ProductionQueue';
@ -12,9 +10,8 @@ export class GuildHallPageGrabber extends Grabber {
return;
}
const villageId = grabActiveVillageId();
const state = new VillageStorage(villageId);
const seconds = grabRemainingSeconds();
state.storeQueueTaskEnding(ProductionQueue.Celebration, seconds ? seconds + timestamp() : 0);
const storage = this.controller.getStorage();
storage.storeQueueTaskEnding(ProductionQueue.Celebration, seconds ? seconds + timestamp() : 0);
}
}

@ -1,6 +1,4 @@
import { Grabber } from './Grabber';
import { grabActiveVillageId } from '../Page/VillageBlock';
import { VillageStorage } from '../Storage/VillageStorage';
import { isMarketSendResourcesPage } from '../Page/PageDetectors';
import { grabIncomingMerchants } from '../Page/BuildingPage/MarketPage';
@ -10,8 +8,7 @@ export class MarketPageGrabber extends Grabber {
return;
}
const villageId = grabActiveVillageId();
const state = new VillageStorage(villageId);
state.storeIncomingMerchants(grabIncomingMerchants());
const storage = this.controller.getStorage();
storage.storeIncomingMerchants(grabIncomingMerchants());
}
}

@ -1,6 +1,5 @@
import { Grabber } from './Grabber';
import { grabActiveVillageId, grabBuildingQueueInfo, grabResourcesPerformance } from '../Page/VillageBlock';
import { VillageStorage } from '../Storage/VillageStorage';
import { grabBuildingQueueInfo, grabResourcesPerformance } from '../Page/VillageBlock';
import { parseLocation, timestamp } from '../utils';
import { GrabError } from '../Errors';
import { BuildingQueueInfo } from '../Game';
@ -13,8 +12,7 @@ export class VillageOverviewPageGrabber extends Grabber {
return;
}
const villageId = grabActiveVillageId();
const storage = new VillageStorage(villageId);
const storage = this.controller.getStorage();
storage.storeResourcesPerformance(grabResourcesPerformance());
storage.storeBuildingQueueInfo(this.grabBuildingQueueInfoOrDefault());

@ -1,13 +1,10 @@
import { Grabber } from './Grabber';
import { grabActiveVillageId } from '../Page/VillageBlock';
import { grabVillageResources, grabVillageResourceStorage } from '../Page/ResourcesBlock';
import { VillageStorage } from '../Storage/VillageStorage';
export class VillageResourceGrabber extends Grabber {
grab(): void {
const villageId = grabActiveVillageId();
const state = new VillageStorage(villageId);
state.storeResources(grabVillageResources());
state.storeResourceStorage(grabVillageResourceStorage());
const storage = this.controller.getStorage();
storage.storeResources(grabVillageResources());
storage.storeResourceStorage(grabVillageResourceStorage());
}
}