``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
155 lines
4.4 KiB
JavaScript
155 lines
4.4 KiB
JavaScript
import sortBy from 'lodash/sortBy';
|
|
import { CreatureAccessors, CreatureUtils } from '../Creature';
|
|
import { RuleDataUtils } from '../RuleData';
|
|
import { VehicleAccessors, VehicleConfigurationKeyEnum, VehicleUtils } from '../Vehicle';
|
|
import { VehicleComponentAccessors } from '../VehicleComponent';
|
|
/**
|
|
*
|
|
* @param creature
|
|
*/
|
|
export function deriveCreatureArmorClassInfo(creature) {
|
|
return {
|
|
value: CreatureAccessors.getArmorClass(creature),
|
|
showTooltip: false,
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* @param creature
|
|
*/
|
|
export function deriveCreatureHitPointInfo(creature) {
|
|
return {
|
|
data: CreatureAccessors.getHitPointInfo(creature),
|
|
showTooltip: false,
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* @param creature
|
|
* @param ruleData
|
|
*/
|
|
export function deriveCreatureMovementInfo(creature, ruleData) {
|
|
let highestMovementInfo = CreatureUtils.getHighestMovementInfo(creature);
|
|
let data = null;
|
|
let label = null;
|
|
if (highestMovementInfo) {
|
|
data = highestMovementInfo;
|
|
label = RuleDataUtils.getMovementDescription(highestMovementInfo.movementId, ruleData);
|
|
}
|
|
return {
|
|
data,
|
|
label,
|
|
showTooltip: false,
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* @param vehicle
|
|
*/
|
|
export function deriveVehiclePrimaryArmorClassInfo(vehicle) {
|
|
const allComponents = VehicleAccessors.getAllComponentsData(vehicle);
|
|
const primaryComponent = VehicleAccessors.getPrimaryComponent(vehicle);
|
|
let value = null;
|
|
let showTooltip = true;
|
|
if (primaryComponent) {
|
|
showTooltip = allComponents.length !== 1;
|
|
const armorClassInfo = VehicleComponentAccessors.getArmorClassInfo(primaryComponent);
|
|
value = armorClassInfo.base;
|
|
if (armorClassInfo.moving !== null) {
|
|
value = armorClassInfo.moving;
|
|
showTooltip = armorClassInfo.moving !== armorClassInfo.base;
|
|
}
|
|
}
|
|
return {
|
|
value,
|
|
showTooltip,
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* @param vehicle
|
|
*/
|
|
export function deriveVehiclePrimaryHitPointInfo(vehicle) {
|
|
const allComponents = VehicleAccessors.getAllComponentsData(vehicle);
|
|
let showTooltip = false;
|
|
if (VehicleUtils.getConfigurationValue(VehicleConfigurationKeyEnum.ENABLE_COMPONENT_HIT_POINTS, vehicle)) {
|
|
let count = 0;
|
|
allComponents.forEach((component) => {
|
|
if (count > 1) {
|
|
return;
|
|
}
|
|
const hitPointInfo = VehicleComponentAccessors.getHitPointInfo(component);
|
|
if (hitPointInfo !== null) {
|
|
count += 1;
|
|
}
|
|
});
|
|
showTooltip = count > 1;
|
|
}
|
|
const primaryComponent = VehicleAccessors.getPrimaryComponent(vehicle);
|
|
return {
|
|
data: VehicleComponentAccessors.getHitPointInfo(primaryComponent),
|
|
showTooltip,
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* @param vehicle
|
|
* @param ruleData
|
|
*/
|
|
export function deriveVehicleMovementInfo(vehicle, ruleData) {
|
|
let allSpeeds = [];
|
|
VehicleAccessors.getAllComponentsData(vehicle).forEach((component) => {
|
|
const speedInfos = VehicleComponentAccessors.getSpeedInfos(component);
|
|
if (speedInfos.length > 0) {
|
|
allSpeeds.push(...speedInfos);
|
|
}
|
|
});
|
|
let allModes = [];
|
|
allSpeeds.forEach((speedInfo) => {
|
|
if (speedInfo.modes !== null) {
|
|
speedInfo.modes.forEach((mode) => {
|
|
allModes.push(Object.assign(Object.assign({}, mode), { type: speedInfo.type }));
|
|
});
|
|
}
|
|
});
|
|
let highestMovementInfo = sortBy(allModes, [
|
|
(mode) => !mode.restrictionsText,
|
|
(mode) => !mode.description,
|
|
(mode) => mode.value,
|
|
]).pop();
|
|
let showTooltip = true;
|
|
let data = null;
|
|
let label = null;
|
|
if (highestMovementInfo) {
|
|
if (allModes.length === 1 && !highestMovementInfo.restrictionsText && !highestMovementInfo.description) {
|
|
showTooltip = false;
|
|
}
|
|
data = {
|
|
movementId: highestMovementInfo.type,
|
|
speed: highestMovementInfo.value,
|
|
notes: '',
|
|
};
|
|
label = highestMovementInfo.type
|
|
? RuleDataUtils.getVehicleMovementName(highestMovementInfo.type, ruleData)
|
|
: null;
|
|
}
|
|
return {
|
|
data,
|
|
label,
|
|
showTooltip,
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* @param creature
|
|
* @param ruleData
|
|
*/
|
|
export function deriveCreatureFilterTypes(creature, ruleData) {
|
|
let filterTypes = [];
|
|
const name = RuleDataUtils.getMonsterTypeName(CreatureAccessors.getTypeId(creature), ruleData);
|
|
if (name) {
|
|
filterTypes.push(name);
|
|
}
|
|
return filterTypes;
|
|
}
|