Rebuild village production queue system
This commit is contained in:
src
Action
Container.tsControlPanel.tsCore
Executor.tsGrabber
BuildingContractGrabber.tsForgePageGrabber.tsGrabber.tsGrabberManager.tsGuildHallPageGrabber.tsMarketPageGrabber.tsVillageOverviewPageGrabber.tsVillageResourceGrabber.ts
Page
Queue
Scheduler.tsStorage
Task
VillageController.tsVillageControllerFactory.tsVillageRepository.tsVillageState.ts@ -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());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user