diff --git a/src/Page/BuildingPage.ts b/src/Page/BuildingPage.ts index d8f4040..f130574 100644 --- a/src/Page/BuildingPage.ts +++ b/src/Page/BuildingPage.ts @@ -16,16 +16,18 @@ export function clickBuildButton(typeId: number) { btn.trigger('click'); } -export function createBuildButton(onClickHandler: (buildTypeId: number) => void) { +export function createBuildButton(onClickHandler: (buildTypeId: number, resources: Resources) => void) { const $els = jQuery('[id^=contract_building]'); $els.each((idx, el) => { const $el = jQuery(el); - const id = getNumber(trimPrefix($el.attr('id') || '', 'contract_building')); + const buildTypeId = getNumber(trimPrefix($el.attr('id') || '', 'contract_building')); const btnId = uniqId(); + const resElement = $el.find('.resourceWrapper .resource'); + const resources = grabResourcesFromList(resElement); $el.append(`
`); jQuery(`#${btnId}`).on('click', evt => { evt.preventDefault(); - onClickHandler(id); + onClickHandler(buildTypeId, resources); }); }); } @@ -43,14 +45,15 @@ export function clickUpgradeButton() { btn.trigger('click'); } -export function createUpgradeButton(onClickHandler: () => void) { +export function createUpgradeButton(onClickHandler: (resources: Resources) => void) { const id = uniqId(); jQuery('.upgradeButtonsContainer .section1').append( `` ); + const resources = grabContractResources(); jQuery(`#${id}`).on('click', evt => { evt.preventDefault(); - onClickHandler(); + onClickHandler(resources); }); } diff --git a/src/Page/BuildingPageController.ts b/src/Page/BuildingPageController.ts index 50b7b91..178dd4b 100644 --- a/src/Page/BuildingPageController.ts +++ b/src/Page/BuildingPageController.ts @@ -1,10 +1,10 @@ -import { elClassId, notify, split, uniqId } from '../utils'; +import { notify, split } from '../utils'; import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask'; import { Scheduler } from '../Scheduler'; import { TrainTroopTask } from '../Task/TrainTroopTask'; import { grabActiveVillageId } from './VillageBlock'; -import { ConsoleLogger, Logger } from '../Logger'; -import { createBuildButton, createTrainTroopButtons, createUpgradeButton, grabContractResources } from './BuildingPage'; +import { ConsoleLogger } from '../Logger'; +import { createBuildButton, createTrainTroopButtons, createUpgradeButton } from './BuildingPage'; import { BuildBuildingTask } from '../Task/BuildBuildingTask'; import { Resources } from '../Game'; @@ -34,8 +34,11 @@ export class BuildingPageController { const buildTypeId = this.attributes.buildTypeId; this.logger.log('BUILD PAGE DETECTED', 'ID', this.attributes.buildId, 'TYPE', buildTypeId); - createBuildButton(buildTypeId => this.onScheduleBuildBuilding(buildTypeId)); - createUpgradeButton(() => this.onScheduleUpgradeBuilding()); + if (buildTypeId) { + createUpgradeButton(res => this.onScheduleUpgradeBuilding(res)); + } else { + createBuildButton((buildTypeId, res) => this.onScheduleBuildBuilding(buildTypeId, res)); + } if (buildTypeId === QUARTERS_ID) { createTrainTroopButtons((troopId, res, count) => this.onScheduleTrainTroopers(troopId, res, count)); @@ -50,19 +53,17 @@ export class BuildingPageController { } } - private onScheduleBuildBuilding(buildTypeId: number) { + private onScheduleBuildBuilding(buildTypeId: number, resources: Resources) { const buildId = this.attributes.buildId; const categoryId = this.attributes.categoryId; const villageId = grabActiveVillageId(); - const resources = grabContractResources(); this.scheduler.scheduleTask(BuildBuildingTask.name, { villageId, buildId, categoryId, buildTypeId, resources }); notify(`Building ${buildId} scheduled`); } - private onScheduleUpgradeBuilding() { + private onScheduleUpgradeBuilding(resources: Resources) { const buildId = this.attributes.buildId; const villageId = grabActiveVillageId(); - const resources = grabContractResources(); this.scheduler.scheduleTask(UpgradeBuildingTask.name, { villageId, buildId, resources }); notify(`Upgrading ${buildId} scheduled`); } diff --git a/src/Scheduler.ts b/src/Scheduler.ts index d6f2948..951f4d1 100644 --- a/src/Scheduler.ts +++ b/src/Scheduler.ts @@ -55,19 +55,10 @@ export class Scheduler { scheduleTask(name: string, args: Args, ts?: number | undefined): void { this.logger.log('PUSH TASK', name, args, ts); - const villageId = args.villageId; - let insertedTs = ts; - if (villageId && !insertedTs) { - const tasks = this.taskQueue.seeItems(); - const sameNamePred = t => sameVillage(villageId, t.args) && t.name === name; - insertedTs = lastTaskTime(tasks, sameNamePred); - if (insertedTs) { - insertedTs += 1; - } - } - this.taskQueue.push(name, args, insertedTs || timestamp()); - if (villageId) { - this.reorderVillageTasks(villageId); + let insertedTs = calculateInsertTime(this.taskQueue.seeItems(), name, args, ts); + this.taskQueue.push(name, args, insertedTs); + if (args.villageId) { + this.reorderVillageTasks(args.villageId); } } @@ -152,6 +143,10 @@ export class Scheduler { } } +interface TaskNamePredicate { + (name: string): boolean; +} + function isTrainTroopTask(taskName: string) { return taskName === TrainTroopTask.name; } @@ -160,6 +155,8 @@ function isBuildingTask(taskName: string) { return taskName === BuildBuildingTask.name || taskName === UpgradeBuildingTask.name; } +const TASK_TYPE_PREDICATES: Array