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

87 lines
5.1 KiB
JavaScript

import { orderBy } from 'lodash';
import { RuleDataUtils } from "../engine/RuleData";
import { Constants } from "../index";
import { getActionManager } from "./ActionManager";
import { getActivatableManager } from "./ActivatableManager";
import { getAttackManager } from "./AttackManager";
import { MessageManager } from "./MessageManager";
import { rulesEngineSelectors } from "../selectors";
export var ActivationGroupKeyEnum;
(function (ActivationGroupKeyEnum) {
ActivationGroupKeyEnum["ACTIONS"] = "ACTIONS";
ActivationGroupKeyEnum["BONUS_ACTIONS"] = "BONUS_ACTIONS";
ActivationGroupKeyEnum["REACTIONS"] = "REACTIONS";
ActivationGroupKeyEnum["OTHER"] = "OTHER";
})(ActivationGroupKeyEnum || (ActivationGroupKeyEnum = {}));
export class ActionsManager extends MessageManager {
constructor(params) {
super(params);
this.params = params;
}
getActions() {
const actions = rulesEngineSelectors.getActions(this.state);
return actions.map((action) => getActionManager(Object.assign(Object.assign({}, this.params), { action })));
}
getCustomActions() {
const customActions = rulesEngineSelectors.getCustomActions(this.state);
return customActions.map((action) => getActionManager(Object.assign(Object.assign({}, this.params), { action })));
}
getAttacksPerActionInfo() {
return rulesEngineSelectors.getAttacksPerActionInfo(this.state);
}
getAttackGroups() {
const attackGroups = {};
const attacks = rulesEngineSelectors.getAttacks(this.state);
const attackManagers = attacks.map((attack) => getAttackManager(Object.assign(Object.assign({}, this.params), { attack })));
attackGroups[ActivationGroupKeyEnum.ACTIONS] = attackManagers.filter((manager) => manager.isActionGroup());
attackGroups[ActivationGroupKeyEnum.BONUS_ACTIONS] = attackManagers.filter((manager) => manager.isBonusActionGroup());
attackGroups[ActivationGroupKeyEnum.REACTIONS] = attackManagers.filter((manager) => manager.isReactionGroup());
attackGroups[ActivationGroupKeyEnum.OTHER] = attackManagers.filter((manager) => manager.isOtherGroup());
return attackGroups;
}
getBasicActions() {
const ruleData = rulesEngineSelectors.getRuleData(this.state);
return ruleData.basicActions;
}
getBasicActionGroups() {
const basicActionGroups = {};
const ruleData = rulesEngineSelectors.getRuleData(this.state);
const actionBasicActions = RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.ACTION, ruleData);
const bonusBasicActions = RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.BONUS_ACTION, ruleData);
const reactionBasicActions = RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.REACTION, ruleData);
const otherBasicActions = [
...RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.NO_ACTION, ruleData),
...RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.MINUTE, ruleData),
...RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.HOUR, ruleData),
...RuleDataUtils.getActivationTypeBasicActions(Constants.ActivationTypeEnum.SPECIAL, ruleData),
];
basicActionGroups[ActivationGroupKeyEnum.ACTIONS] = ActionsManager.sortBasicActions(actionBasicActions);
basicActionGroups[ActivationGroupKeyEnum.BONUS_ACTIONS] = ActionsManager.sortBasicActions(bonusBasicActions);
basicActionGroups[ActivationGroupKeyEnum.REACTIONS] = ActionsManager.sortBasicActions(reactionBasicActions);
basicActionGroups[ActivationGroupKeyEnum.OTHER] = ActionsManager.sortBasicActions(otherBasicActions);
return basicActionGroups;
}
static sortBasicActions(basicActions) {
return orderBy(basicActions, [(basicAction) => basicAction.name], ['asc']);
}
getActionGroups() {
const actionGroups = {};
const activatables = rulesEngineSelectors.getActivatables(this.state);
const activatableManagers = activatables.map((activatable) => getActivatableManager(Object.assign(Object.assign({}, this.params), { activatable })));
actionGroups[ActivationGroupKeyEnum.ACTIONS] = activatableManagers.filter((manager) => manager.isActionGroup());
actionGroups[ActivationGroupKeyEnum.BONUS_ACTIONS] = activatableManagers.filter((manager) => manager.isBonusActionGroup());
actionGroups[ActivationGroupKeyEnum.REACTIONS] = activatableManagers.filter((manager) => manager.isReactionGroup());
actionGroups[ActivationGroupKeyEnum.OTHER] = activatableManagers.filter((manager) => manager.isOtherGroup());
return actionGroups;
}
getRitualSpellGroups() {
const ritualSpellGroups = {};
const ritualSpells = rulesEngineSelectors.getRitualSpells(this.state);
ritualSpellGroups[ActivationGroupKeyEnum.ACTIONS] = [];
ritualSpellGroups[ActivationGroupKeyEnum.BONUS_ACTIONS] = [];
ritualSpellGroups[ActivationGroupKeyEnum.REACTIONS] = [];
ritualSpellGroups[ActivationGroupKeyEnum.OTHER] = ritualSpells;
return ritualSpellGroups;
}
}