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

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;
}