diff --git a/src/Action/ActionController.ts b/src/Action/ActionController.ts deleted file mode 100644 index faccd19..0000000 --- a/src/Action/ActionController.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Scheduler } from '../Scheduler'; -import { taskError, TryLaterError } from '../Errors'; -import { grabActiveVillageId } from '../Page/VillageBlock'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { VillageStorage } from '../Storage/VillageStorage'; -import { VillageFactory } from '../Village/VillageFactory'; -import { aroundMinutes } from '../Helpers/Time'; - -const actionMap: { [name: string]: Function | undefined } = {}; - -export function registerAction(constructor: Function) { - actionMap[constructor.name] = constructor; -} - -export function createActionHandler( - name: string, - scheduler: Scheduler, - villageFactory: VillageFactory -): ActionController | undefined { - const storedFunction = actionMap[name]; - if (storedFunction === undefined) { - return undefined; - } - const constructor = (storedFunction as unknown) as typeof ActionController; - return new constructor(scheduler, villageFactory); -} - -export class ActionController { - protected readonly scheduler: Scheduler; - protected readonly villageFactory: VillageFactory; - constructor(scheduler: Scheduler, villageFactory: VillageFactory) { - this.scheduler = scheduler; - this.villageFactory = villageFactory; - } - - async run(args: Args, task: Task) {} - - ensureSameVillage(args: Args, task: Task) { - let villageId = args.villageId || taskError('Undefined village id'); - const activeVillageId = grabActiveVillageId(); - if (villageId !== activeVillageId) { - throw new TryLaterError(aroundMinutes(1), 'Not same village'); - } - } -} diff --git a/src/Action/BuildBuildingAction.ts b/src/Action/BuildBuildingAction.ts deleted file mode 100644 index c24c65e..0000000 --- a/src/Action/BuildBuildingAction.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ActionController, registerAction } from './ActionController'; -import { GrabError, taskError, TryLaterError } from '../Errors'; -import { clickBuildButton } from '../Page/BuildingPage/BuildingPage'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { aroundMinutes } from '../Helpers/Time'; - -@registerAction -export class BuildBuildingAction extends ActionController { - async run(args: Args, task: Task): Promise { - try { - this.ensureSameVillage(args, task); - const buildTypeId = args.buildTypeId || taskError('Undefined build type id'); - clickBuildButton(buildTypeId); - } catch (e) { - if (e instanceof GrabError) { - throw new TryLaterError(aroundMinutes(5), 'No upgrade button, try later'); - } - throw e; - } - } -} diff --git a/src/Action/CelebrationAction.ts b/src/Action/CelebrationAction.ts deleted file mode 100644 index ad0bd7a..0000000 --- a/src/Action/CelebrationAction.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ActionController, registerAction } from './ActionController'; -import { GrabError, TryLaterError } from '../Errors'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { clickCelebrationButton } from '../Page/BuildingPage/GuildHallPage'; -import { aroundMinutes } from '../Helpers/Time'; - -@registerAction -export class CelebrationAction extends ActionController { - async run(args: Args, task: Task): Promise { - try { - this.ensureSameVillage(args, task); - clickCelebrationButton(args.celebrationIndex); - } catch (e) { - if (e instanceof GrabError) { - throw new TryLaterError(aroundMinutes(60), e.message); - } - throw e; - } - } -} diff --git a/src/Action/CompleteTaskAction.ts b/src/Action/CompleteTaskAction.ts deleted file mode 100644 index fecaaa2..0000000 --- a/src/Action/CompleteTaskAction.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; - -@registerAction -export class CompleteTaskAction extends ActionController { - async run(args: Args, task: Task): Promise { - this.scheduler.completeTask(task.id); - } -} diff --git a/src/Action/ForgeImprovementAction.ts b/src/Action/ForgeImprovementAction.ts deleted file mode 100644 index bf4208b..0000000 --- a/src/Action/ForgeImprovementAction.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ActionController, registerAction } from './ActionController'; -import { GrabError, taskError, TryLaterError } from '../Errors'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { clickResearchButton } from '../Page/BuildingPage/ForgePage'; -import { aroundMinutes } from '../Helpers/Time'; - -@registerAction -export class ForgeImprovementAction extends ActionController { - async run(args: Args, task: Task): Promise { - try { - this.ensureSameVillage(args, task); - const unitId = args.unitId || taskError('No unitId in args'); - clickResearchButton(unitId); - } catch (e) { - if (e instanceof GrabError) { - throw new TryLaterError(aroundMinutes(15), e.message); - } - throw e; - } - } -} diff --git a/src/Action/GoToPageAction.ts b/src/Action/GoToPageAction.ts deleted file mode 100644 index aa7748d..0000000 --- a/src/Action/GoToPageAction.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ActionController, registerAction } from './ActionController'; -import { taskError } from '../Errors'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; - -@registerAction -export class GoToPageAction extends ActionController { - async run(args: Args, task: Task): Promise { - const path = args.path || taskError('Empty path'); - window.location.assign(path); - } -} diff --git a/src/Action/UpgradeBuildingAction.ts b/src/Action/UpgradeBuildingAction.ts deleted file mode 100644 index 500c119..0000000 --- a/src/Action/UpgradeBuildingAction.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ActionController, registerAction } from './ActionController'; -import { GrabError, TryLaterError } from '../Errors'; -import { clickUpgradeButton } from '../Page/BuildingPage/BuildingPage'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { aroundMinutes } from '../Helpers/Time'; - -@registerAction -export class UpgradeBuildingAction extends ActionController { - async run(args: Args, task: Task): Promise { - try { - this.ensureSameVillage(args, task); - clickUpgradeButton(); - } catch (e) { - if (e instanceof GrabError) { - throw new TryLaterError(aroundMinutes(5), 'No upgrade button, try later'); - } - throw e; - } - } -} diff --git a/src/ControlPanel.ts b/src/ControlPanel.ts index dafbb2a..0b4efb0 100644 --- a/src/ControlPanel.ts +++ b/src/ControlPanel.ts @@ -1,6 +1,6 @@ import { Scheduler } from './Scheduler'; import { BuildingPageController } from './Page/BuildingPageController'; -import { UpgradeBuildingTask } from './Task/UpgradeBuildingTask'; +import { UpgradeBuildingTask } from './Handler/Task/UpgradeBuildingTask'; import { grabActiveVillageId } from './Page/VillageBlock'; import { onBuildingSlotCtrlClick, diff --git a/src/Executor.ts b/src/Executor.ts index 8a4d05e..69dc24d 100644 --- a/src/Executor.ts +++ b/src/Executor.ts @@ -7,7 +7,6 @@ import { VillageNotFound, } from './Errors'; import { TaskQueueRenderer } from './TaskQueueRenderer'; -import { createActionHandler } from './Action/ActionController'; import { Logger } from './Logger'; import { GrabberManager } from './Grabber/GrabberManager'; import { Scheduler } from './Scheduler'; @@ -15,10 +14,11 @@ import { Statistics } from './Statistics'; import { ExecutionStorage } from './Storage/ExecutionStorage'; import { Action } from './Queue/ActionQueue'; import { Task } from './Queue/TaskProvider'; -import { createTaskHandler } from './Task/TaskMap'; +import { createTaskHandler } from './Handler/TaskMap'; import { VillageFactory } from './Village/VillageFactory'; import { sleepMicro, timestamp } from './Helpers/Time'; import { markPage, waitForLoad } from './Helpers/Browser'; +import { createActionHandler } from './Handler/ActionMap'; export interface ExecutionSettings { pauseTs: number; @@ -27,11 +27,11 @@ export interface ExecutionSettings { export class Executor { private readonly version: string; private readonly scheduler: Scheduler; - private villageFactory: VillageFactory; - private grabberManager: GrabberManager; - private statistics: Statistics; - private executionState: ExecutionStorage; - private logger: Logger; + private readonly villageFactory: VillageFactory; + private readonly grabberManager: GrabberManager; + private readonly statistics: Statistics; + private readonly executionState: ExecutionStorage; + private readonly logger: Logger; constructor( version: string, @@ -101,18 +101,18 @@ export class Executor { try { if (task && action) { - return await this.processActionCommand(action, task); + return await this.processAction(action, task); } if (task) { - return await this.processTaskCommand(task); + return await this.processTask(task); } } catch (e) { this.handleError(e, task); } } - private async processActionCommand(action: Action, task: Task) { + private async processAction(action: Action, task: Task) { const actionHandler = createActionHandler(action.name, this.scheduler, this.villageFactory); this.logger.info('Process action', action.name, actionHandler); if (actionHandler) { @@ -123,7 +123,7 @@ export class Executor { } } - private async processTaskCommand(task: Task) { + private async processTask(task: Task) { const taskHandler = createTaskHandler(task.name, this.scheduler, this.villageFactory); this.logger.info('Process task', task.name, task, taskHandler); if (taskHandler) { diff --git a/src/Action/BalanceHeroResourcesAction.ts b/src/Handler/Action/BalanceHeroResourcesAction.ts similarity index 66% rename from src/Action/BalanceHeroResourcesAction.ts rename to src/Handler/Action/BalanceHeroResourcesAction.ts index 56287cb..64c74f9 100644 --- a/src/Action/BalanceHeroResourcesAction.ts +++ b/src/Handler/Action/BalanceHeroResourcesAction.ts @@ -1,14 +1,15 @@ -import { ActionController, registerAction } from './ActionController'; -import { changeHeroResource, grabCurrentHeroResource } from '../Page/HeroPage'; -import { grabActiveVillageId } from '../Page/VillageBlock'; -import { HeroStorage } from '../Storage/HeroStorage'; -import { calcHeroResource } from '../Core/HeroBalance'; -import { HeroAllResources } from '../Core/Hero'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; +import { BaseAction } from './BaseAction'; +import { changeHeroResource, grabCurrentHeroResource } from '../../Page/HeroPage'; +import { grabActiveVillageId } from '../../Page/VillageBlock'; +import { HeroStorage } from '../../Storage/HeroStorage'; +import { calcHeroResource } from '../../Core/HeroBalance'; +import { HeroAllResources } from '../../Core/Hero'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { registerAction } from '../ActionMap'; @registerAction -export class BalanceHeroResourcesAction extends ActionController { +export class BalanceHeroResourcesAction extends BaseAction { async run(args: Args, task: Task): Promise { const thisVillageId = grabActiveVillageId(); const heroVillageId = new HeroStorage().getVillageId(); diff --git a/src/Handler/Action/BaseAction.ts b/src/Handler/Action/BaseAction.ts new file mode 100644 index 0000000..32a8668 --- /dev/null +++ b/src/Handler/Action/BaseAction.ts @@ -0,0 +1,26 @@ +import { Scheduler } from '../../Scheduler'; +import { taskError, TryLaterError } from '../../Errors'; +import { grabActiveVillageId } from '../../Page/VillageBlock'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { VillageFactory } from '../../Village/VillageFactory'; +import { aroundMinutes } from '../../Helpers/Time'; + +export class BaseAction { + protected readonly scheduler: Scheduler; + protected readonly villageFactory: VillageFactory; + constructor(scheduler: Scheduler, villageFactory: VillageFactory) { + this.scheduler = scheduler; + this.villageFactory = villageFactory; + } + + async run(args: Args, task: Task) {} + + ensureSameVillage(args: Args) { + let villageId = args.villageId || taskError('Undefined village id'); + const activeVillageId = grabActiveVillageId(); + if (villageId !== activeVillageId) { + throw new TryLaterError(aroundMinutes(1), 'Not same village'); + } + } +} diff --git a/src/Handler/Action/BuildBuildingAction.ts b/src/Handler/Action/BuildBuildingAction.ts new file mode 100644 index 0000000..fba8b78 --- /dev/null +++ b/src/Handler/Action/BuildBuildingAction.ts @@ -0,0 +1,23 @@ +import { BaseAction } from './BaseAction'; +import { GrabError, taskError, TryLaterError } from '../../Errors'; +import { clickBuildButton } from '../../Page/BuildingPage/BuildingPage'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { aroundMinutes } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; + +@registerAction +export class BuildBuildingAction extends BaseAction { + async run(args: Args, task: Task): Promise { + try { + this.ensureSameVillage(args); + const buildTypeId = args.buildTypeId || taskError('Undefined build type id'); + clickBuildButton(buildTypeId); + } catch (e) { + if (e instanceof GrabError) { + throw new TryLaterError(aroundMinutes(5), 'No upgrade button, try later'); + } + throw e; + } + } +} diff --git a/src/Handler/Action/CelebrationAction.ts b/src/Handler/Action/CelebrationAction.ts new file mode 100644 index 0000000..99c1dbc --- /dev/null +++ b/src/Handler/Action/CelebrationAction.ts @@ -0,0 +1,22 @@ +import { BaseAction } from './BaseAction'; +import { GrabError, TryLaterError } from '../../Errors'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { clickCelebrationButton } from '../../Page/BuildingPage/GuildHallPage'; +import { aroundMinutes } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; + +@registerAction +export class CelebrationAction extends BaseAction { + async run(args: Args, task: Task): Promise { + try { + this.ensureSameVillage(args); + clickCelebrationButton(args.celebrationIndex); + } catch (e) { + if (e instanceof GrabError) { + throw new TryLaterError(aroundMinutes(60), e.message); + } + throw e; + } + } +} diff --git a/src/Action/CheckBuildingRemainingTimeAction.ts b/src/Handler/Action/CheckBuildingRemainingTimeAction.ts similarity index 55% rename from src/Action/CheckBuildingRemainingTimeAction.ts rename to src/Handler/Action/CheckBuildingRemainingTimeAction.ts index 8690eb7..3c18bf1 100644 --- a/src/Action/CheckBuildingRemainingTimeAction.ts +++ b/src/Handler/Action/CheckBuildingRemainingTimeAction.ts @@ -1,12 +1,13 @@ -import { ActionController, registerAction } from './ActionController'; -import { GrabError, TryLaterError } from '../Errors'; -import { grabBuildingQueueInfo } from '../Page/VillageBlock'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { BuildingQueueInfo } from '../Core/BuildingQueueInfo'; +import { BaseAction } from './BaseAction'; +import { GrabError, TryLaterError } from '../../Errors'; +import { grabBuildingQueueInfo } from '../../Page/VillageBlock'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { BuildingQueueInfo } from '../../Core/BuildingQueueInfo'; +import { registerAction } from '../ActionMap'; @registerAction -export class CheckBuildingRemainingTimeAction extends ActionController { +export class CheckBuildingRemainingTimeAction extends BaseAction { async run(args: Args, task: Task): Promise { const info = this.grabBuildingQueueInfoOrDefault(); if (info.seconds > 0) { diff --git a/src/Action/ClickButtonAction.ts b/src/Handler/Action/ClickButtonAction.ts similarity index 52% rename from src/Action/ClickButtonAction.ts rename to src/Handler/Action/ClickButtonAction.ts index ef616e0..56b6059 100644 --- a/src/Action/ClickButtonAction.ts +++ b/src/Handler/Action/ClickButtonAction.ts @@ -1,10 +1,11 @@ -import { ActionController, registerAction } from './ActionController'; -import { taskError } from '../Errors'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; +import { BaseAction } from './BaseAction'; +import { taskError } from '../../Errors'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { registerAction } from '../ActionMap'; @registerAction -export class ClickButtonAction extends ActionController { +export class ClickButtonAction extends BaseAction { async run(args: Args, task: Task): Promise { const selector = args.selector || taskError('No selector'); const el = jQuery(selector); diff --git a/src/Handler/Action/CompleteTaskAction.ts b/src/Handler/Action/CompleteTaskAction.ts new file mode 100644 index 0000000..1d569f2 --- /dev/null +++ b/src/Handler/Action/CompleteTaskAction.ts @@ -0,0 +1,11 @@ +import { BaseAction } from './BaseAction'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { registerAction } from '../ActionMap'; + +@registerAction +export class CompleteTaskAction extends BaseAction { + async run(args: Args, task: Task): Promise { + this.scheduler.completeTask(task.id); + } +} diff --git a/src/Action/FindSendResourcesPath.ts b/src/Handler/Action/FindSendResourcesPathAction.ts similarity index 57% rename from src/Action/FindSendResourcesPath.ts rename to src/Handler/Action/FindSendResourcesPathAction.ts index 53e0a3d..20dd295 100644 --- a/src/Action/FindSendResourcesPath.ts +++ b/src/Handler/Action/FindSendResourcesPathAction.ts @@ -1,25 +1,26 @@ -import { ActionController, registerAction } from './ActionController'; -import { FailTaskError, taskError, TryLaterError } from '../Errors'; -import { Resources } from '../Core/Resources'; -import { Coordinates } from '../Core/Village'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { clickSendButton, fillSendResourcesForm } from '../Page/BuildingPage/MarketPage'; -import { VillageState } from '../Village/VillageState'; -import { MerchantsInfo } from '../Core/Market'; -import { goToMarketSendResourcesPage, goToResourceViewPage } from '../Task/ActionBundles'; +import { BaseAction } from './BaseAction'; +import { FailTaskError, taskError, TryLaterError } from '../../Errors'; +import { Resources } from '../../Core/Resources'; +import { Coordinates } from '../../Core/Village'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage'; +import { VillageState } from '../../Village/VillageState'; +import { MerchantsInfo } from '../../Core/Market'; +import { goToMarketSendResourcesPage, goToResourceViewPage } from '../ActionBundles'; import { compareReports, ResourceTransferCalculator, ResourceTransferReport, -} from '../Village/ResourceTransfer'; -import { ResourceTransferStorage } from '../Storage/ResourceTransferStorage'; -import { path } from '../Helpers/Path'; -import { MARKET_ID } from '../Core/Buildings'; -import { aroundMinutes, timestamp } from '../Helpers/Time'; +} from '../../Village/ResourceTransfer'; +import { ResourceTransferStorage } from '../../Storage/ResourceTransferStorage'; +import { path } from '../../Helpers/Path'; +import { MARKET_ID } from '../../Core/Buildings'; +import { aroundMinutes, timestamp } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; @registerAction -export class FindSendResourcesPath extends ActionController { +export class FindSendResourcesPathAction extends BaseAction { async run(args: Args, task: Task): Promise { const reports: Array = []; const calculator = new ResourceTransferCalculator(this.villageFactory); diff --git a/src/Handler/Action/ForgeImprovementAction.ts b/src/Handler/Action/ForgeImprovementAction.ts new file mode 100644 index 0000000..ed4e0de --- /dev/null +++ b/src/Handler/Action/ForgeImprovementAction.ts @@ -0,0 +1,23 @@ +import { BaseAction } from './BaseAction'; +import { GrabError, taskError, TryLaterError } from '../../Errors'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { clickResearchButton } from '../../Page/BuildingPage/ForgePage'; +import { aroundMinutes } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; + +@registerAction +export class ForgeImprovementAction extends BaseAction { + async run(args: Args, task: Task): Promise { + try { + this.ensureSameVillage(args); + const unitId = args.unitId || taskError('No unitId in args'); + clickResearchButton(unitId); + } catch (e) { + if (e instanceof GrabError) { + throw new TryLaterError(aroundMinutes(15), e.message); + } + throw e; + } + } +} diff --git a/src/Action/GoToHeroVillageAction.ts b/src/Handler/Action/GoToHeroVillageAction.ts similarity index 57% rename from src/Action/GoToHeroVillageAction.ts rename to src/Handler/Action/GoToHeroVillageAction.ts index 5eaed5d..e33491c 100644 --- a/src/Action/GoToHeroVillageAction.ts +++ b/src/Handler/Action/GoToHeroVillageAction.ts @@ -1,13 +1,14 @@ -import { ActionController, registerAction } from './ActionController'; -import { grabVillageList } from '../Page/VillageBlock'; -import { grabHeroVillage } from '../Page/HeroPage'; -import { HeroStorage } from '../Storage/HeroStorage'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; +import { BaseAction } from './BaseAction'; +import { grabVillageList } from '../../Page/VillageBlock'; +import { grabHeroVillage } from '../../Page/HeroPage'; +import { HeroStorage } from '../../Storage/HeroStorage'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; +import { registerAction } from '../ActionMap'; @registerAction -export class GoToHeroVillageAction extends ActionController { +export class GoToHeroVillageAction extends BaseAction { async run(args: Args, task: Task): Promise { const heroVillageId = this.getHeroVillageId(); if (heroVillageId) { diff --git a/src/Handler/Action/GoToPageAction.ts b/src/Handler/Action/GoToPageAction.ts new file mode 100644 index 0000000..35330d4 --- /dev/null +++ b/src/Handler/Action/GoToPageAction.ts @@ -0,0 +1,13 @@ +import { BaseAction } from './BaseAction'; +import { taskError } from '../../Errors'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { registerAction } from '../ActionMap'; + +@registerAction +export class GoToPageAction extends BaseAction { + async run(args: Args, task: Task): Promise { + const path = args.path || taskError('Empty path'); + window.location.assign(path); + } +} diff --git a/src/Action/SendOnAdventureAction.ts b/src/Handler/Action/SendOnAdventureAction.ts similarity index 83% rename from src/Action/SendOnAdventureAction.ts rename to src/Handler/Action/SendOnAdventureAction.ts index c46d428..f0961ee 100644 --- a/src/Action/SendOnAdventureAction.ts +++ b/src/Handler/Action/SendOnAdventureAction.ts @@ -1,8 +1,9 @@ -import { ActionController, registerAction } from './ActionController'; -import { AbortTaskError } from '../Errors'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { trimPrefix } from '../Helpers/Convert'; +import { BaseAction } from './BaseAction'; +import { AbortTaskError } from '../../Errors'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { trimPrefix } from '../../Helpers/Convert'; +import { registerAction } from '../ActionMap'; const CONFIG = [ { level: 0, health: 60 }, @@ -19,7 +20,7 @@ interface Adventure { } @registerAction -export class SendOnAdventureAction extends ActionController { +export class SendOnAdventureAction extends BaseAction { async run(args: Args, task: Task): Promise { const adventures = this.findAdventures(); diff --git a/src/Action/SendResourcesAction.ts b/src/Handler/Action/SendResourcesAction.ts similarity index 58% rename from src/Action/SendResourcesAction.ts rename to src/Handler/Action/SendResourcesAction.ts index ae784da..daa1cbf 100644 --- a/src/Action/SendResourcesAction.ts +++ b/src/Handler/Action/SendResourcesAction.ts @@ -1,14 +1,15 @@ -import { ActionController, registerAction } from './ActionController'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { clickSendButton, fillSendResourcesForm } from '../Page/BuildingPage/MarketPage'; -import { ResourceTransferCalculator } from '../Village/ResourceTransfer'; -import { ResourceTransferStorage } from '../Storage/ResourceTransferStorage'; -import { Resources } from '../Core/Resources'; -import { AbortTaskError } from '../Errors'; +import { BaseAction } from './BaseAction'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { clickSendButton, fillSendResourcesForm } from '../../Page/BuildingPage/MarketPage'; +import { ResourceTransferCalculator } from '../../Village/ResourceTransfer'; +import { ResourceTransferStorage } from '../../Storage/ResourceTransferStorage'; +import { Resources } from '../../Core/Resources'; +import { AbortTaskError } from '../../Errors'; +import { registerAction } from '../ActionMap'; @registerAction -export class SendResourcesAction extends ActionController { +export class SendResourcesAction extends BaseAction { async run(args: Args, task: Task): Promise { const storage = new ResourceTransferStorage(); const savedReport = storage.getReport(); diff --git a/src/Action/TrainTrooperAction.ts b/src/Handler/Action/TrainTrooperAction.ts similarity index 71% rename from src/Action/TrainTrooperAction.ts rename to src/Handler/Action/TrainTrooperAction.ts index 9e8b727..727f808 100644 --- a/src/Action/TrainTrooperAction.ts +++ b/src/Handler/Action/TrainTrooperAction.ts @@ -1,19 +1,20 @@ -import { ActionController, registerAction } from './ActionController'; -import { taskError, TryLaterError } from '../Errors'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; +import { BaseAction } from './BaseAction'; +import { taskError, TryLaterError } from '../../Errors'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; import { clickTrainButton, fillTrainCount, getAvailableCount, -} from '../Page/BuildingPage/TrooperPage'; +} from '../../Page/BuildingPage/TrooperPage'; import { TrainTroopTask } from '../Task/TrainTroopTask'; -import { Resources } from '../Core/Resources'; -import { randomInRange } from '../Helpers/Random'; -import { aroundMinutes } from '../Helpers/Time'; +import { Resources } from '../../Core/Resources'; +import { randomInRange } from '../../Helpers/Random'; +import { aroundMinutes } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; @registerAction -export class TrainTrooperAction extends ActionController { +export class TrainTrooperAction extends BaseAction { async run(args: Args, task: Task): Promise { const troopId = args.troopId || taskError('No troop id'); const trainCount = args.trainCount || taskError('No troop train count'); diff --git a/src/Handler/Action/UpgradeBuildingAction.ts b/src/Handler/Action/UpgradeBuildingAction.ts new file mode 100644 index 0000000..5e494bc --- /dev/null +++ b/src/Handler/Action/UpgradeBuildingAction.ts @@ -0,0 +1,22 @@ +import { BaseAction } from './BaseAction'; +import { GrabError, TryLaterError } from '../../Errors'; +import { clickUpgradeButton } from '../../Page/BuildingPage/BuildingPage'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { aroundMinutes } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; + +@registerAction +export class UpgradeBuildingAction extends BaseAction { + async run(args: Args, task: Task): Promise { + try { + this.ensureSameVillage(args); + clickUpgradeButton(); + } catch (e) { + if (e instanceof GrabError) { + throw new TryLaterError(aroundMinutes(5), 'No upgrade button, try later'); + } + throw e; + } + } +} diff --git a/src/Action/UpgradeResourceToLevel.ts b/src/Handler/Action/UpgradeResourceToLevelAction.ts similarity index 78% rename from src/Action/UpgradeResourceToLevel.ts rename to src/Handler/Action/UpgradeResourceToLevelAction.ts index b1b4664..9a77f76 100644 --- a/src/Action/UpgradeResourceToLevel.ts +++ b/src/Handler/Action/UpgradeResourceToLevelAction.ts @@ -1,15 +1,16 @@ -import { ActionController, registerAction } from './ActionController'; -import { ActionError, taskError, TryLaterError } from '../Errors'; -import { grabResourceSlots } from '../Page/SlotBlock'; +import { BaseAction } from './BaseAction'; +import { ActionError, taskError, TryLaterError } from '../../Errors'; +import { grabResourceSlots } from '../../Page/SlotBlock'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { ResourceSlot } from '../Core/Slot'; -import { getNumber } from '../Helpers/Convert'; -import { aroundMinutes } from '../Helpers/Time'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { ResourceSlot } from '../../Core/Slot'; +import { getNumber } from '../../Helpers/Convert'; +import { aroundMinutes } from '../../Helpers/Time'; +import { registerAction } from '../ActionMap'; @registerAction -export class UpgradeResourceToLevel extends ActionController { +export class UpgradeResourceToLevelAction extends BaseAction { async run(args: Args, task: Task): Promise { const deposits = grabResourceSlots(); if (deposits.length === 0) { diff --git a/src/Task/ActionBundles.ts b/src/Handler/ActionBundles.ts similarity index 94% rename from src/Task/ActionBundles.ts rename to src/Handler/ActionBundles.ts index 0534f0b..85917aa 100644 --- a/src/Task/ActionBundles.ts +++ b/src/Handler/ActionBundles.ts @@ -1,5 +1,5 @@ -import { ActionDefinition } from './TaskController'; -import { GoToPageAction } from '../Action/GoToPageAction'; +import { ActionDefinition } from './Task/BaseTask'; +import { GoToPageAction } from './Action/GoToPageAction'; import { FORGE_ID, GUILD_HALL_ID, MARKET_ID } from '../Core/Buildings'; import { path } from '../Helpers/Path'; import { Village } from '../Core/Village'; diff --git a/src/Handler/ActionMap.ts b/src/Handler/ActionMap.ts new file mode 100644 index 0000000..7c742e4 --- /dev/null +++ b/src/Handler/ActionMap.ts @@ -0,0 +1,22 @@ +import { Scheduler } from '../Scheduler'; +import { VillageFactory } from '../Village/VillageFactory'; +import { BaseAction } from './Action/BaseAction'; + +const actionMap: { [name: string]: Function | undefined } = {}; + +export function registerAction(constructor: Function) { + actionMap[constructor.name] = constructor; +} + +export function createActionHandler( + name: string, + scheduler: Scheduler, + villageFactory: VillageFactory +): BaseAction | undefined { + const storedFunction = actionMap[name]; + if (storedFunction === undefined) { + return undefined; + } + const constructor = (storedFunction as unknown) as typeof BaseAction; + return new constructor(scheduler, villageFactory); +} diff --git a/src/Task/BalanceHeroResourcesTask.ts b/src/Handler/Task/BalanceHeroResourcesTask.ts similarity index 71% rename from src/Task/BalanceHeroResourcesTask.ts rename to src/Handler/Task/BalanceHeroResourcesTask.ts index a9330a2..94a7027 100644 --- a/src/Task/BalanceHeroResourcesTask.ts +++ b/src/Handler/Task/BalanceHeroResourcesTask.ts @@ -1,14 +1,14 @@ -import { ActionDefinition, TaskController } from './TaskController'; +import { ActionDefinition, BaseTask } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; import { BalanceHeroResourcesAction } from '../Action/BalanceHeroResourcesAction'; import { GoToHeroVillageAction } from '../Action/GoToHeroVillageAction'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; @registerTask() -export class BalanceHeroResourcesTask extends TaskController { +export class BalanceHeroResourcesTask extends BaseTask { defineActions(task: Task): Array { return [ { diff --git a/src/Task/TaskController.ts b/src/Handler/Task/BaseTask.ts similarity index 79% rename from src/Task/TaskController.ts rename to src/Handler/Task/BaseTask.ts index 4c69d67..f6c5bc5 100644 --- a/src/Task/TaskController.ts +++ b/src/Handler/Task/BaseTask.ts @@ -1,16 +1,16 @@ -import { Scheduler } from '../Scheduler'; +import { Scheduler } from '../../Scheduler'; import { CompleteTaskAction } from '../Action/CompleteTaskAction'; -import { Action } from '../Queue/ActionQueue'; -import { Args } from '../Queue/Args'; -import { Task } from '../Queue/TaskProvider'; -import { VillageFactory } from '../Village/VillageFactory'; +import { Action } from '../../Queue/ActionQueue'; +import { Args } from '../../Queue/Args'; +import { Task } from '../../Queue/TaskProvider'; +import { VillageFactory } from '../../Village/VillageFactory'; export interface ActionDefinition { name: string; args?: Args; } -export class TaskController { +export class BaseTask { protected readonly scheduler: Scheduler; protected readonly factory: VillageFactory; diff --git a/src/Task/BuildBuildingTask.ts b/src/Handler/Task/BuildBuildingTask.ts similarity index 67% rename from src/Task/BuildBuildingTask.ts rename to src/Handler/Task/BuildBuildingTask.ts index c586cdd..68758d1 100644 --- a/src/Task/BuildBuildingTask.ts +++ b/src/Handler/Task/BuildBuildingTask.ts @@ -1,15 +1,15 @@ import { BuildBuildingAction } from '../Action/BuildBuildingAction'; import { GoToPageAction } from '../Action/GoToPageAction'; -import { ActionDefinition, TaskController } from './TaskController'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; -import { taskError } from '../Errors'; -import { goToResourceViewPage } from './ActionBundles'; -import { ProductionQueue } from '../Core/ProductionQueue'; +import { ActionDefinition, BaseTask } from './BaseTask'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; +import { taskError } from '../../Errors'; +import { goToResourceViewPage } from '../ActionBundles'; +import { ProductionQueue } from '../../Core/ProductionQueue'; @registerTask({ queue: ProductionQueue.Building }) -export class BuildBuildingTask extends TaskController { +export class BuildBuildingTask extends BaseTask { defineActions(task: Task): Array { const args = task.args; const villageId = args.villageId || taskError('No village id'); diff --git a/src/Task/CelebrationTask.ts b/src/Handler/Task/CelebrationTask.ts similarity index 68% rename from src/Task/CelebrationTask.ts rename to src/Handler/Task/CelebrationTask.ts index b6ae24a..5199e45 100644 --- a/src/Task/CelebrationTask.ts +++ b/src/Handler/Task/CelebrationTask.ts @@ -1,13 +1,13 @@ -import { ActionDefinition, TaskController } from './TaskController'; +import { ActionDefinition, BaseTask } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; import { CelebrationAction } from '../Action/CelebrationAction'; -import { registerTask } from './TaskMap'; -import { ProductionQueue } from '../Core/ProductionQueue'; +import { registerTask } from '../TaskMap'; +import { ProductionQueue } from '../../Core/ProductionQueue'; @registerTask({ queue: ProductionQueue.Celebration }) -export class CelebrationTask extends TaskController { +export class CelebrationTask extends BaseTask { defineActions(task: Task): Array { const args = task.args; diff --git a/src/Task/ForgeImprovementTask.ts b/src/Handler/Task/ForgeImprovementTask.ts similarity index 68% rename from src/Task/ForgeImprovementTask.ts rename to src/Handler/Task/ForgeImprovementTask.ts index 4db083c..959ba8a 100644 --- a/src/Task/ForgeImprovementTask.ts +++ b/src/Handler/Task/ForgeImprovementTask.ts @@ -1,13 +1,13 @@ -import { ActionDefinition, TaskController } from './TaskController'; +import { ActionDefinition, BaseTask } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; -import { Task } from '../Queue/TaskProvider'; +import { Task } from '../../Queue/TaskProvider'; import { ForgeImprovementAction } from '../Action/ForgeImprovementAction'; -import { path } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; -import { ProductionQueue } from '../Core/ProductionQueue'; +import { path } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; +import { ProductionQueue } from '../../Core/ProductionQueue'; @registerTask({ queue: ProductionQueue.UpgradeUnit }) -export class ForgeImprovementTask extends TaskController { +export class ForgeImprovementTask extends BaseTask { defineActions(task: Task): Array { const args = task.args; diff --git a/src/Handler/Task/GrabVillageStateTask.ts b/src/Handler/Task/GrabVillageStateTask.ts new file mode 100644 index 0000000..083c4c2 --- /dev/null +++ b/src/Handler/Task/GrabVillageStateTask.ts @@ -0,0 +1,12 @@ +import { BaseTask, ActionDefinition } from './BaseTask'; +import { scanAllVillagesBundle } from '../ActionBundles'; +import { Task } from '../../Queue/TaskProvider'; +import { registerTask } from '../TaskMap'; + +@registerTask() +export class GrabVillageStateTask extends BaseTask { + defineActions(task: Task): Array { + const villages = this.factory.getAllVillages(); + return scanAllVillagesBundle(villages); + } +} diff --git a/src/Handler/Task/ResourcesToLevelTask.ts b/src/Handler/Task/ResourcesToLevelTask.ts new file mode 100644 index 0000000..db272b6 --- /dev/null +++ b/src/Handler/Task/ResourcesToLevelTask.ts @@ -0,0 +1,15 @@ +import { BaseTask, ActionDefinition } from './BaseTask'; +import { UpgradeResourceToLevelAction } from '../Action/UpgradeResourceToLevelAction'; +import { Task } from '../../Queue/TaskProvider'; +import { registerTask } from '../TaskMap'; +import { goToResourceViewPage } from '../ActionBundles'; +import { taskError } from '../../Errors'; + +@registerTask() +export class ResourcesToLevelTask extends BaseTask { + defineActions(task: Task): Array { + const villageId = task.args.villageId || taskError('No village id'); + + return [goToResourceViewPage(villageId), { name: UpgradeResourceToLevelAction.name }]; + } +} diff --git a/src/Handler/Task/RunVillageProductionTask.ts b/src/Handler/Task/RunVillageProductionTask.ts new file mode 100644 index 0000000..a259a66 --- /dev/null +++ b/src/Handler/Task/RunVillageProductionTask.ts @@ -0,0 +1,10 @@ +import { BaseTask, ActionDefinition } from './BaseTask'; +import { Task } from '../../Queue/TaskProvider'; +import { registerTask } from '../TaskMap'; + +@registerTask() +export class RunVillageProductionTask extends BaseTask { + defineActions(task: Task): Array { + return []; + } +} diff --git a/src/Task/SendOnAdventureTask.ts b/src/Handler/Task/SendOnAdventureTask.ts similarity index 77% rename from src/Task/SendOnAdventureTask.ts rename to src/Handler/Task/SendOnAdventureTask.ts index 2200e87..dd8184b 100644 --- a/src/Task/SendOnAdventureTask.ts +++ b/src/Handler/Task/SendOnAdventureTask.ts @@ -1,13 +1,13 @@ -import { ActionDefinition, TaskController } from './TaskController'; +import { ActionDefinition, BaseTask } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; import { SendOnAdventureAction } from '../Action/SendOnAdventureAction'; import { ClickButtonAction } from '../Action/ClickButtonAction'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; @registerTask() -export class SendOnAdventureTask extends TaskController { +export class SendOnAdventureTask extends BaseTask { defineActions(task: Task): Array { return [ { diff --git a/src/Task/SendResourcesTask.ts b/src/Handler/Task/SendResourcesTask.ts similarity index 68% rename from src/Task/SendResourcesTask.ts rename to src/Handler/Task/SendResourcesTask.ts index 881a1a3..9755862 100644 --- a/src/Task/SendResourcesTask.ts +++ b/src/Handler/Task/SendResourcesTask.ts @@ -1,13 +1,13 @@ -import { TaskController, ActionDefinition } from './TaskController'; +import { BaseTask, ActionDefinition } from './BaseTask'; import { SendResourcesAction } from '../Action/SendResourcesAction'; import { ClickButtonAction } from '../Action/ClickButtonAction'; -import { goToMarketSendResourcesPage, goToResourceViewPage } from './ActionBundles'; -import { Task } from '../Queue/TaskProvider'; -import { registerTask } from './TaskMap'; -import { FindSendResourcesPath } from '../Action/FindSendResourcesPath'; +import { goToMarketSendResourcesPage, goToResourceViewPage } from '../ActionBundles'; +import { Task } from '../../Queue/TaskProvider'; +import { registerTask } from '../TaskMap'; +import { FindSendResourcesPathAction } from '../Action/FindSendResourcesPathAction'; @registerTask() -export class SendResourcesTask extends TaskController { +export class SendResourcesTask extends BaseTask { defineActions(task: Task): Array { const actions: Array = []; @@ -17,7 +17,7 @@ export class SendResourcesTask extends TaskController { actions.push(goToMarketSendResourcesPage(village.id)); } - actions.push({ name: FindSendResourcesPath.name }); + actions.push({ name: FindSendResourcesPathAction.name }); actions.push({ name: SendResourcesAction.name }); actions.push({ name: ClickButtonAction.name, diff --git a/src/Task/TrainTroopTask.ts b/src/Handler/Task/TrainTroopTask.ts similarity index 69% rename from src/Task/TrainTroopTask.ts rename to src/Handler/Task/TrainTroopTask.ts index 9f17d5b..0143c01 100644 --- a/src/Task/TrainTroopTask.ts +++ b/src/Handler/Task/TrainTroopTask.ts @@ -1,13 +1,13 @@ -import { ActionDefinition, TaskController } from './TaskController'; +import { ActionDefinition, BaseTask } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; import { TrainTrooperAction } from '../Action/TrainTrooperAction'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; -import { ProductionQueue } from '../Core/ProductionQueue'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; +import { ProductionQueue } from '../../Core/ProductionQueue'; @registerTask({ queue: ProductionQueue.TrainUnit }) -export class TrainTroopTask extends TaskController { +export class TrainTroopTask extends BaseTask { defineActions(task: Task): Array { const args = task.args; diff --git a/src/Task/UpdateResourceContracts.ts b/src/Handler/Task/UpdateResourceContractsTask.ts similarity index 83% rename from src/Task/UpdateResourceContracts.ts rename to src/Handler/Task/UpdateResourceContractsTask.ts index f34a759..d64f97a 100644 --- a/src/Task/UpdateResourceContracts.ts +++ b/src/Handler/Task/UpdateResourceContractsTask.ts @@ -1,13 +1,13 @@ -import { ActionDefinition, TaskController } from './TaskController'; +import { ActionDefinition, BaseTask } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; import { UpgradeBuildingTask } from './UpgradeBuildingTask'; -import { ImmutableTaskList, Task } from '../Queue/TaskProvider'; +import { ImmutableTaskList, Task } from '../../Queue/TaskProvider'; import { ForgeImprovementTask } from './ForgeImprovementTask'; -import { path, PathList, uniqPaths } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; +import { path, PathList, uniqPaths } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; @registerTask() -export class UpdateResourceContracts extends TaskController { +export class UpdateResourceContractsTask extends BaseTask { defineActions(task: Task): Array { const villages = this.factory.getAllVillages(); diff --git a/src/Task/UpgradeBuildingTask.ts b/src/Handler/Task/UpgradeBuildingTask.ts similarity index 62% rename from src/Task/UpgradeBuildingTask.ts rename to src/Handler/Task/UpgradeBuildingTask.ts index 3d8e1c5..95399a0 100644 --- a/src/Task/UpgradeBuildingTask.ts +++ b/src/Handler/Task/UpgradeBuildingTask.ts @@ -1,15 +1,15 @@ import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction'; -import { TaskController, ActionDefinition } from './TaskController'; +import { BaseTask, ActionDefinition } from './BaseTask'; import { GoToPageAction } from '../Action/GoToPageAction'; -import { Task } from '../Queue/TaskProvider'; -import { path } from '../Helpers/Path'; -import { registerTask } from './TaskMap'; -import { goToResourceViewPage } from './ActionBundles'; -import { taskError } from '../Errors'; -import { ProductionQueue } from '../Core/ProductionQueue'; +import { Task } from '../../Queue/TaskProvider'; +import { path } from '../../Helpers/Path'; +import { registerTask } from '../TaskMap'; +import { goToResourceViewPage } from '../ActionBundles'; +import { taskError } from '../../Errors'; +import { ProductionQueue } from '../../Core/ProductionQueue'; @registerTask({ queue: ProductionQueue.Building }) -export class UpgradeBuildingTask extends TaskController { +export class UpgradeBuildingTask extends BaseTask { defineActions(task: Task): Array { const args = task.args; const villageId = args.villageId || taskError('No village id'); diff --git a/src/Task/TaskMap.ts b/src/Handler/TaskMap.ts similarity index 94% rename from src/Task/TaskMap.ts rename to src/Handler/TaskMap.ts index 4bf3021..bcf7dfc 100644 --- a/src/Task/TaskMap.ts +++ b/src/Handler/TaskMap.ts @@ -1,5 +1,5 @@ import { Scheduler } from '../Scheduler'; -import { TaskController } from './TaskController'; +import { BaseTask } from './Task/BaseTask'; import { OrderedProductionQueues, ProductionQueue, @@ -43,12 +43,12 @@ export function createTaskHandler( name: string, scheduler: Scheduler, factory: VillageFactory -): TaskController | undefined { +): BaseTask | undefined { const taskDescription = taskMap[name]; if (taskDescription === undefined) { return undefined; } - const constructor = (taskDescription.ctor as unknown) as typeof TaskController; + const constructor = (taskDescription.ctor as unknown) as typeof BaseTask; return new constructor(scheduler, factory); } diff --git a/src/Page/BuildingPageController.ts b/src/Page/BuildingPageController.ts index b88d8f4..78c9a30 100644 --- a/src/Page/BuildingPageController.ts +++ b/src/Page/BuildingPageController.ts @@ -1,13 +1,13 @@ -import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; +import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask'; import { Scheduler } from '../Scheduler'; -import { TrainTroopTask } from '../Task/TrainTroopTask'; +import { TrainTroopTask } from '../Handler/Task/TrainTroopTask'; import { grabActiveVillageId, grabVillageList } from './VillageBlock'; import { ConsoleLogger, Logger } from '../Logger'; import { createBuildButton, createUpgradeButton } from './BuildingPage/BuildingPage'; -import { BuildBuildingTask } from '../Task/BuildBuildingTask'; +import { BuildBuildingTask } from '../Handler/Task/BuildBuildingTask'; import { Resources } from '../Core/Resources'; import { Coordinates } from '../Core/Village'; -import { SendResourcesTask } from '../Task/SendResourcesTask'; +import { SendResourcesTask } from '../Handler/Task/SendResourcesTask'; import { EMBASSY_ID, HORSE_STABLE_ID, PALACE_ID, QUARTERS_ID } from '../Core/Buildings'; import { BuildingPageAttributes, @@ -18,9 +18,9 @@ import { import { createTrainTroopButtons } from './BuildingPage/TrooperPage'; import { createSendResourcesButton } from './BuildingPage/MarketPage'; import { createResearchButtons } from './BuildingPage/ForgePage'; -import { ForgeImprovementTask } from '../Task/ForgeImprovementTask'; +import { ForgeImprovementTask } from '../Handler/Task/ForgeImprovementTask'; import { createCelebrationButtons } from './BuildingPage/GuildHallPage'; -import { CelebrationTask } from '../Task/CelebrationTask'; +import { CelebrationTask } from '../Handler/Task/CelebrationTask'; import { VillageController } from '../Village/VillageController'; import { notify } from '../Helpers/Browser'; diff --git a/src/Queue/TaskProvider.ts b/src/Queue/TaskProvider.ts index ae65021..1ee1110 100644 --- a/src/Queue/TaskProvider.ts +++ b/src/Queue/TaskProvider.ts @@ -1,7 +1,7 @@ import { Args } from './Args'; import { ResourcesInterface } from '../Core/Resources'; import { ProductionQueue } from '../Core/ProductionQueue'; -import { getProductionQueue } from '../Task/TaskMap'; +import { getProductionQueue } from '../Handler/TaskMap'; import { uniqId } from '../Helpers/Identity'; export type TaskId = string; diff --git a/src/Scheduler.ts b/src/Scheduler.ts index 9fab28a..a1f7139 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -1,16 +1,16 @@ import { TaskQueue } from './Queue/TaskQueue'; -import { BalanceHeroResourcesTask } from './Task/BalanceHeroResourcesTask'; +import { BalanceHeroResourcesTask } from './Handler/Task/BalanceHeroResourcesTask'; import { Logger } from './Logger'; -import { GrabVillageState } from './Task/GrabVillageState'; +import { GrabVillageStateTask } from './Handler/Task/GrabVillageStateTask'; import { Action, ActionQueue, ImmutableActionList } from './Queue/ActionQueue'; -import { UpdateResourceContracts } from './Task/UpdateResourceContracts'; -import { SendResourcesTask } from './Task/SendResourcesTask'; +import { UpdateResourceContractsTask } from './Handler/Task/UpdateResourceContractsTask'; +import { SendResourcesTask } from './Handler/Task/SendResourcesTask'; import { Args } from './Queue/Args'; import { ImmutableTaskList, Task, TaskId, uniqTaskId, withTime } from './Queue/TaskProvider'; import { VillageRepositoryInterface } from './Village/VillageRepository'; import { VillageFactory } from './Village/VillageFactory'; -import { RunVillageProductionTask } from './Task/RunVillageProductionTask'; -import { isProductionTask } from './Task/TaskMap'; +import { RunVillageProductionTask } from './Handler/Task/RunVillageProductionTask'; +import { isProductionTask } from './Handler/TaskMap'; import { around } from './Helpers/Random'; import { timestamp } from './Helpers/Time'; @@ -39,8 +39,8 @@ export class Scheduler { this.villageControllerFactory = villageControllerFactory; this.logger = logger; - // this.taskQueue.push(GrabVillageState.name, {}, timestamp()); - // this.taskQueue.push(UpdateResourceContracts.name, {}, timestamp()); + // this.taskQueue.push(GrabVillageStateTask.name, {}, timestamp()); + // this.taskQueue.push(UpdateResourceContractsTask.name, {}, timestamp()); // this.taskQueue.push(BalanceHeroResourcesTask.name, {}, timestamp()); const villages = this.villageRepository.all(); @@ -50,10 +50,10 @@ export class Scheduler { }); } - this.createUniqTaskTimer(10 * 60, GrabVillageState.name); + this.createUniqTaskTimer(10 * 60, GrabVillageStateTask.name); this.createUniqTaskTimer(10 * 60, SendResourcesTask.name); this.createUniqTaskTimer(10 * 60, BalanceHeroResourcesTask.name); - this.createUniqTaskTimer(20 * 60, UpdateResourceContracts.name); + this.createUniqTaskTimer(20 * 60, UpdateResourceContractsTask.name); // this.createUniqTaskTimer(60 * 60, SendOnAdventureTask.name); } diff --git a/src/Task/GrabVillageState.ts b/src/Task/GrabVillageState.ts deleted file mode 100644 index 5f03be9..0000000 --- a/src/Task/GrabVillageState.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TaskController, ActionDefinition } from './TaskController'; -import { scanAllVillagesBundle } from './ActionBundles'; -import { Task } from '../Queue/TaskProvider'; -import { registerTask } from './TaskMap'; - -@registerTask() -export class GrabVillageState extends TaskController { - defineActions(task: Task): Array { - const villages = this.factory.getAllVillages(); - return scanAllVillagesBundle(villages); - } -} diff --git a/src/Task/ResourcesToLevel.ts b/src/Task/ResourcesToLevel.ts deleted file mode 100644 index f19b132..0000000 --- a/src/Task/ResourcesToLevel.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TaskController, ActionDefinition } from './TaskController'; -import { UpgradeResourceToLevel } from '../Action/UpgradeResourceToLevel'; -import { Task } from '../Queue/TaskProvider'; -import { registerTask } from './TaskMap'; -import { goToResourceViewPage } from './ActionBundles'; -import { taskError } from '../Errors'; - -@registerTask() -export class ResourcesToLevel extends TaskController { - defineActions(task: Task): Array { - const villageId = task.args.villageId || taskError('No village id'); - - return [goToResourceViewPage(villageId), { name: UpgradeResourceToLevel.name }]; - } -} diff --git a/src/Task/RunVillageProductionTask.ts b/src/Task/RunVillageProductionTask.ts deleted file mode 100644 index 90c84cb..0000000 --- a/src/Task/RunVillageProductionTask.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TaskController, ActionDefinition } from './TaskController'; -import { Task } from '../Queue/TaskProvider'; -import { registerTask } from './TaskMap'; - -@registerTask() -export class RunVillageProductionTask extends TaskController { - defineActions(task: Task): Array { - return []; - } -} diff --git a/src/Village/VillageController.ts b/src/Village/VillageController.ts index 6ff6d97..2b52856 100644 --- a/src/Village/VillageController.ts +++ b/src/Village/VillageController.ts @@ -7,7 +7,7 @@ import { MerchantsInfo } from '../Core/Market'; import { VillageStorage } from '../Storage/VillageStorage'; import { ReceiveResourcesMode } from '../Core/Village'; import { ResourceType } from '../Core/ResourceType'; -import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; +import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask'; import { GARNER_ID, WAREHOUSE_ID } from '../Core/Buildings'; import { first } from '../Helpers/Collection'; diff --git a/src/Village/VillageState.ts b/src/Village/VillageState.ts index a29f0ea..d9cea06 100644 --- a/src/Village/VillageState.ts +++ b/src/Village/VillageState.ts @@ -7,7 +7,7 @@ import { VillageNotFound } from '../Errors'; import { OrderedProductionQueues, ProductionQueue } from '../Core/ProductionQueue'; import { isInQueue, TaskCore, TaskId } from '../Queue/TaskProvider'; import { VillageTaskCollection } from './VillageTaskCollection'; -import { TrainTroopTask } from '../Task/TrainTroopTask'; +import { TrainTroopTask } from '../Handler/Task/TrainTroopTask'; import { Args } from '../Queue/Args'; import { timestamp } from '../Helpers/Time'; diff --git a/src/Village/VillageTaskCollection.ts b/src/Village/VillageTaskCollection.ts index 30e9abd..955bb94 100644 --- a/src/Village/VillageTaskCollection.ts +++ b/src/Village/VillageTaskCollection.ts @@ -3,9 +3,9 @@ import { Task, TaskId, uniqTaskId, withResources, withTime } from '../Queue/Task import { Args } from '../Queue/Args'; import { Resources } from '../Core/Resources'; import { ContractAttributes, ContractType } from '../Core/Contract'; -import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; -import { ForgeImprovementTask } from '../Task/ForgeImprovementTask'; -import { isProductionTask } from '../Task/TaskMap'; +import { UpgradeBuildingTask } from '../Handler/Task/UpgradeBuildingTask'; +import { ForgeImprovementTask } from '../Handler/Task/ForgeImprovementTask'; +import { isProductionTask } from '../Handler/TaskMap'; import { timestamp } from '../Helpers/Time'; export class VillageTaskCollection {