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,154 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user