2025-05-28 15:36:51 -07:00

57 lines
2.6 KiB
JavaScript

import { ActionAccessors } from "../engine/Action";
import { ActivatableTypeEnum } from "../engine/Core";
import { ActionManager, Constants } from "../index";
import { BaseManager } from './BaseManager';
export const activatableManagerMap = new Map();
export const getActivatableManager = (params) => {
const { activatable } = params;
const key = activatable.key;
if (activatableManagerMap.has(key)) {
const activatableManager = activatableManagerMap.get(key);
if (!activatableManager) {
throw new Error(`ActivatableManager for activatable ${key} is null`);
}
if (activatableManager.activatable === activatable) {
return activatableManager;
}
}
const newActivatableManager = new ActivatableManager(params);
activatableManagerMap.set(key, newActivatableManager);
return newActivatableManager;
};
export class ActivatableManager extends BaseManager {
constructor(params) {
super(params);
// Accessors
this.getSortText = () => this.activatable.sortText;
this.getType = () => this.activatable.type;
this.getActivationType = () => this.activatable.activation.activationType;
this.getEntity = () => this.activatable.entity;
this.getEntityAsActionManager = () => {
const action = this.getEntity();
return ActionManager.getActionManager(ActionAccessors.getUniqueKey(action));
};
// Utils
this.isFeature = () => {
const type = this.getType();
return type !== ActivatableTypeEnum.CLASS_SPELL && type !== ActivatableTypeEnum.CHARACTER_SPELL;
};
this.isSpell = () => {
const type = this.getType();
return type === ActivatableTypeEnum.CLASS_SPELL || type === ActivatableTypeEnum.CHARACTER_SPELL;
};
this.isAction = () => this.getType() === ActivatableTypeEnum.ACTION;
this.isActionGroup = () => this.getActivationType() === Constants.ActivationTypeEnum.ACTION && !this.isSpell();
this.isBonusActionGroup = () => this.getActivationType() === Constants.ActivationTypeEnum.BONUS_ACTION;
this.isReactionGroup = () => this.getActivationType() === Constants.ActivationTypeEnum.REACTION;
this.isOtherGroup = () => {
const activationType = this.getActivationType();
return (activationType !== Constants.ActivationTypeEnum.ACTION &&
activationType !== Constants.ActivationTypeEnum.BONUS_ACTION &&
activationType !== Constants.ActivationTypeEnum.REACTION);
};
this.params = params;
this.activatable = params.activatable;
}
}