``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
53 lines
2.1 KiB
JavaScript
53 lines
2.1 KiB
JavaScript
import { orderBy } from 'lodash';
|
|
import { ClassAccessors } from '../Class';
|
|
import { DataOriginTypeEnum } from '../DataOrigin';
|
|
import { InfusionAccessors, InfusionModifierDataTypeEnum, InfusionTypeEnum } from '../Infusion';
|
|
import { KnownInfusionAccessors } from '../KnownInfusion';
|
|
import { getKnownInfusion, getDataOrigin, getDataOriginType } from './accessors';
|
|
/**
|
|
*
|
|
* @param infusionChoice
|
|
*/
|
|
export function deriveForcedModifierData(infusionChoice) {
|
|
const knownInfusion = getKnownInfusion(infusionChoice);
|
|
if (knownInfusion === null) {
|
|
return null;
|
|
}
|
|
const simulatedInfusion = KnownInfusionAccessors.getSimulatedInfusion(knownInfusion);
|
|
if (simulatedInfusion === null) {
|
|
return null;
|
|
}
|
|
const modifierData = InfusionAccessors.getModifierData(simulatedInfusion);
|
|
const modifierDataType = InfusionAccessors.getModifierDataType(simulatedInfusion);
|
|
const dataOriginType = getDataOriginType(infusionChoice);
|
|
if (dataOriginType === DataOriginTypeEnum.CLASS_FEATURE &&
|
|
modifierDataType === InfusionModifierDataTypeEnum.CLASS_LEVEL) {
|
|
const dataOrigin = getDataOrigin(infusionChoice);
|
|
const charClass = dataOrigin.parent;
|
|
const classLevel = ClassAccessors.getLevel(charClass);
|
|
const orderedModifierData = orderBy(modifierData, (data) => data.value, 'desc');
|
|
const foundModifierData = orderedModifierData.find((data) => data.value !== null && classLevel >= data.value);
|
|
return foundModifierData ? foundModifierData : null;
|
|
}
|
|
return null;
|
|
}
|
|
/**
|
|
*
|
|
* @param infusionChoice
|
|
*/
|
|
export function deriveCanInfuse(infusionChoice) {
|
|
const knownInfusion = getKnownInfusion(infusionChoice);
|
|
if (knownInfusion === null) {
|
|
return false;
|
|
}
|
|
const simulatedInfusion = KnownInfusionAccessors.getSimulatedInfusion(knownInfusion);
|
|
if (simulatedInfusion === null) {
|
|
return false;
|
|
}
|
|
if (InfusionAccessors.getType(simulatedInfusion) === InfusionTypeEnum.REPLICATE) {
|
|
const itemId = KnownInfusionAccessors.getItemId(knownInfusion);
|
|
return itemId !== null;
|
|
}
|
|
return true;
|
|
}
|