Grabbed dndbeyond's source code
``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user