Improve village state management

This commit is contained in:
2020-05-24 19:30:03 +03:00
parent 8bea617f5b
commit 301b1a6ca9
25 changed files with 328 additions and 275 deletions

View File

@ -5,7 +5,7 @@ import { aroundMinutes } from '../utils';
import { Args } from '../Queue/Args';
import { Task } from '../Queue/TaskProvider';
import { VillageStorage } from '../Storage/VillageStorage';
import { VillageStateRepository } from '../VillageState';
import { VillageFactory } from '../VillageFactory';
const actionMap: { [name: string]: Function | undefined } = {};
@ -16,22 +16,22 @@ export function registerAction(constructor: Function) {
export function createActionHandler(
name: string,
scheduler: Scheduler,
villageStateRepository: VillageStateRepository
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, villageStateRepository);
return new constructor(scheduler, villageFactory);
}
export class ActionController {
protected scheduler: Scheduler;
protected villageStateRepository: VillageStateRepository;
constructor(scheduler: Scheduler, villageStateRepository: VillageStateRepository) {
protected readonly scheduler: Scheduler;
protected readonly villageFactory: VillageFactory;
constructor(scheduler: Scheduler, villageFactory: VillageFactory) {
this.scheduler = scheduler;
this.villageStateRepository = villageStateRepository;
this.villageFactory = villageFactory;
}
async run(args: Args, task: Task) {}

View File

@ -18,7 +18,7 @@ export class BalanceHeroResourcesAction extends ActionController {
return;
}
const thisVillageState = this.villageStateRepository.getVillageState(thisVillageId);
const thisVillageState = this.villageFactory.createState(thisVillageId);
const requirements = [
thisVillageState.required.balance,

View File

@ -1,5 +1,5 @@
import { ActionController, registerAction } from './ActionController';
import { AbortTaskError, taskError } from '../Errors';
import { taskError } from '../Errors';
import { Args } from '../Queue/Args';
import { Task } from '../Queue/TaskProvider';

View File

@ -18,8 +18,8 @@ export class SendResourcesAction extends ActionController {
const coordinates = Coordinates.fromObject(args.coordinates || taskError('No coordinates'));
const senderVillage = this.villageStateRepository.getVillageState(senderVillageId);
const recipientVillage = this.villageStateRepository.getVillageState(targetVillageId);
const senderVillage = this.villageFactory.createState(senderVillageId);
const recipientVillage = this.villageFactory.createState(targetVillageId);
const readyToTransfer = this.getResourcesForTransfer(senderVillage, recipientVillage);

View File

@ -1,5 +1,5 @@
import { ActionController, registerAction } from './ActionController';
import { AbortTaskError, ActionError, taskError, TryLaterError } from '../Errors';
import { ActionError, taskError, TryLaterError } from '../Errors';
import { grabResourceDeposits } from '../Page/SlotBlock';
import { UpgradeBuildingTask } from '../Task/UpgradeBuildingTask';
import { ResourceDeposit } from '../Game';