``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
94 lines
4.9 KiB
JavaScript
94 lines
4.9 KiB
JavaScript
import { characterActions } from "../actions";
|
|
import { AbilityAccessors } from "../engine/Ability";
|
|
import { AbilityScoreStatTypeEnum } from "../engine/Core";
|
|
import { HelperUtils } from "../engine/Helper";
|
|
import { RuleDataAccessors } from "../engine/RuleData";
|
|
import { rulesEngineSelectors } from "../selectors";
|
|
import { FeaturesManager } from './FeaturesManager';
|
|
export const abilityDefinitionMap = new Map();
|
|
const abilityMangerMap = new Map();
|
|
export const getAbilityManager = (params) => {
|
|
const { ability } = params;
|
|
const abilityId = AbilityAccessors.getId(ability);
|
|
if (abilityMangerMap.has(abilityId)) {
|
|
const abilityManager = abilityMangerMap.get(abilityId);
|
|
if (!abilityManager) {
|
|
throw new Error(`AbilityManager for ability ${abilityId} is null`);
|
|
}
|
|
if (abilityManager.ability === ability) {
|
|
return abilityManager;
|
|
}
|
|
}
|
|
const newAbilityManager = new AbilityManager(params);
|
|
abilityMangerMap.set(abilityId, newAbilityManager);
|
|
return newAbilityManager;
|
|
};
|
|
export class AbilityManager extends FeaturesManager {
|
|
constructor(params) {
|
|
super(params);
|
|
//Accessors
|
|
this.getId = () => AbilityAccessors.getId(this.ability);
|
|
this.getEntityTypeId = () => AbilityAccessors.getEntityTypeId(this.ability);
|
|
this.getName = () => AbilityAccessors.getName(this.ability);
|
|
this.getLabel = () => AbilityAccessors.getLabel(this.ability);
|
|
this.getStatKey = () => AbilityAccessors.getStatKey(this.ability);
|
|
this.getBaseScore = () => AbilityAccessors.getBaseScore(this.ability);
|
|
this.getTotalScore = () => AbilityAccessors.getTotalScore(this.ability);
|
|
this.getModifier = () => AbilityAccessors.getModifier(this.ability);
|
|
this.getMaxStatScore = () => AbilityAccessors.getMaxStatScore(this.ability);
|
|
this.getProficiencyLevel = () => AbilityAccessors.getProficiencyLevel(this.ability);
|
|
this.getIsSaveProficiencyModified = () => AbilityAccessors.getIsSaveProficiencyModified(this.ability);
|
|
this.getSave = () => AbilityAccessors.getSave(this.ability);
|
|
this.getIsSaveModifierModified = () => AbilityAccessors.getIsSaveModifierModified(this.ability);
|
|
this.getOverrideScore = () => AbilityAccessors.getOverrideScore(this.ability);
|
|
this.getOtherBonus = () => AbilityAccessors.getOtherBonus(this.ability);
|
|
this.getRacialBonus = () => AbilityAccessors.getRacialBonus(this.ability);
|
|
this.getClassBonuses = () => AbilityAccessors.getClassBonuses(this.ability);
|
|
this.getMiscBonus = () => AbilityAccessors.getMiscBonus(this.ability);
|
|
this.getSetScore = () => AbilityAccessors.getSetScore(this.ability);
|
|
this.getStackingBonus = () => AbilityAccessors.getStackingBonus(this.ability);
|
|
this.getAllStatBonusSuppliers = () => AbilityAccessors.getAllStatBonusSuppliers(this.ability);
|
|
this.getStatSetScoreSuppliers = () => AbilityAccessors.getStatSetScoreSuppliers(this.ability);
|
|
this.getStatMaxBonusSuppliers = () => AbilityAccessors.getStatMaxBonusSuppliers(this.ability);
|
|
this.getStackingBonusSuppliers = () => AbilityAccessors.getStackingBonusSuppliers(this.ability);
|
|
//handlers
|
|
this.handleScoreChange = (value) => {
|
|
this.dispatch(characterActions.abilityScoreSet(this.getId(), AbilityScoreStatTypeEnum.BASE, value));
|
|
};
|
|
this.handleOverrideScoreChange = (value) => {
|
|
const ruleData = rulesEngineSelectors.getRuleData(this.state);
|
|
const minStatScore = RuleDataAccessors.getMinStatScore(ruleData);
|
|
const maxStatScore = RuleDataAccessors.getMaxStatScore(ruleData);
|
|
if (value !== null) {
|
|
value = HelperUtils.clampInt(value, minStatScore, maxStatScore);
|
|
}
|
|
this.dispatch(characterActions.abilityScoreSet(this.getId(), AbilityScoreStatTypeEnum.OVERRIDE, value));
|
|
return value;
|
|
};
|
|
this.handleOtherBonusChange = (value) => {
|
|
// TODO: lets get a why to this
|
|
const minBonusScore = -10;
|
|
const maxBonusScore = 10;
|
|
if (value !== null) {
|
|
value = HelperUtils.clampInt(value, minBonusScore, maxBonusScore);
|
|
}
|
|
this.dispatch(characterActions.abilityScoreSet(this.getId(), AbilityScoreStatTypeEnum.BONUS, value));
|
|
return value;
|
|
};
|
|
this.params = params;
|
|
this.ability = params.ability;
|
|
}
|
|
//Rule data accessors
|
|
getAbilityRuleData() {
|
|
const ruleData = rulesEngineSelectors.getRuleData(this.state);
|
|
const abilityDataLookup = RuleDataAccessors.getStatsLookup(ruleData);
|
|
return abilityDataLookup[this.getId()];
|
|
}
|
|
getCompendiumText() {
|
|
const abilityRuleData = this.getAbilityRuleData();
|
|
// TODO: we should accessor all the things?
|
|
// maybe gfs will be the time to do it?
|
|
return abilityRuleData.compendiumText;
|
|
}
|
|
}
|