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,302 @@
|
||||
import { sortBy } from 'lodash';
|
||||
import { TypeScriptUtils } from '../../utils';
|
||||
import { AbilityUtils } from '../Ability';
|
||||
import { AccessTypeEnum } from '../Access';
|
||||
import { ProficiencyLevelEnum } from '../Core';
|
||||
import { DefinitionUtils } from '../Definition';
|
||||
import { DefinitionPoolUtils } from '../DefinitionPool';
|
||||
import { HelperUtils } from '../Helper';
|
||||
import { RuleDataAccessors, RuleDataUtils } from '../RuleData';
|
||||
import { VehicleComponentAccessors } from '../VehicleComponent';
|
||||
import { getAllComponentsData, getConditionImmunities, getCreatureCapacity, getDamageImmunities, getDefinitionActions, getDefinitionKey, getDefinitionStats, getDescription, getLength, getType, getWeight, getWidth, } from './accessors';
|
||||
import { VehicleComponentGroupTypeEnum, VehicleConfigurationDisplayTypeEnum, VehicleConfigurationKeyEnum, VehicleConfigurationSizeTypeEnum, } from './constants';
|
||||
import { generateVehicleAction } from './generators';
|
||||
import { getConfigurationValue } from './utils';
|
||||
/**
|
||||
*
|
||||
* @param vehicleDefinition
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveStats(vehicleDefinition, ruleData) {
|
||||
if (vehicleDefinition.stats === null) {
|
||||
return [];
|
||||
}
|
||||
return vehicleDefinition.stats.map((stat) => {
|
||||
const score = stat.value;
|
||||
return {
|
||||
id: stat.id,
|
||||
score,
|
||||
statKey: stat.name,
|
||||
modifier: score === null ? null : AbilityUtils.getStatScoreModifier(score, ruleData),
|
||||
};
|
||||
});
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveAbilities(vehicle, ruleData) {
|
||||
const stats = getDefinitionStats(vehicle);
|
||||
return stats.map((stat) => {
|
||||
const score = stat.value;
|
||||
const name = stat.name ? stat.name : '';
|
||||
const statScoreModifier = score === null ? null : AbilityUtils.getStatScoreModifier(score, ruleData);
|
||||
return {
|
||||
label: name,
|
||||
id: stat.id,
|
||||
entityTypeId: -1,
|
||||
name,
|
||||
statKey: name,
|
||||
totalScore: score,
|
||||
score,
|
||||
maxStatScore: RuleDataAccessors.getMaxStatScore(ruleData),
|
||||
isMaxed: !!score && score >= RuleDataAccessors.getMaxStatScore(ruleData),
|
||||
modifier: statScoreModifier,
|
||||
baseScore: score,
|
||||
racialBonus: 0,
|
||||
classBonuses: 0,
|
||||
miscBonus: 0,
|
||||
setScore: 0,
|
||||
stackingBonus: 0,
|
||||
otherBonus: 0,
|
||||
overrideScore: null,
|
||||
proficiency: false,
|
||||
proficiencyLevel: ProficiencyLevelEnum.NONE,
|
||||
isSaveProficiencyModified: false,
|
||||
isSaveModifierModified: false,
|
||||
save: statScoreModifier ? statScoreModifier : 0,
|
||||
saveBonuses: 0,
|
||||
isSaveOverridden: false,
|
||||
allStatBonusSuppliers: [],
|
||||
statSetScoreSuppliers: [],
|
||||
statMaxBonusSuppliers: [],
|
||||
stackingBonusSuppliers: [],
|
||||
};
|
||||
});
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveCreatureCapacityDescriptions(vehicle, ruleData) {
|
||||
const creatureCapacityInfos = getCreatureCapacity(vehicle);
|
||||
const descriptions = creatureCapacityInfos.map((capacity) => {
|
||||
var _a;
|
||||
let sizeName = '';
|
||||
if (capacity.sizeId !== null) {
|
||||
const sizeInfo = RuleDataUtils.getCreatureSizeInfo(capacity.sizeId, ruleData);
|
||||
if (sizeInfo && sizeInfo.name) {
|
||||
sizeName = sizeInfo.name;
|
||||
}
|
||||
}
|
||||
const isSpelljammer = getConfigurationValue(VehicleConfigurationKeyEnum.DISPLAY_TYPE, vehicle) ===
|
||||
VehicleConfigurationDisplayTypeEnum.SPELLJAMMER;
|
||||
const needsParens = isSpelljammer && capacity.type !== null;
|
||||
return `${capacity.capacity} ${sizeName} ${needsParens ? '(' : ''}${(_a = capacity.type) !== null && _a !== void 0 ? _a : ''}${needsParens ? ')' : ''}`.trim();
|
||||
});
|
||||
return descriptions;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param abilityLookup
|
||||
*/
|
||||
export function deriveModifierData(abilityLookup) {
|
||||
return {
|
||||
proficiencyBonus: 0,
|
||||
abilityLookup,
|
||||
attunedItemCount: 0,
|
||||
};
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveDamageImmunities(vehicle, ruleData) {
|
||||
return getDamageImmunities(vehicle)
|
||||
.map((damageImmunityId) => RuleDataUtils.getDamageType(damageImmunityId, ruleData))
|
||||
.filter(TypeScriptUtils.isNotNullOrUndefined);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveConditionImmunities(vehicle, ruleData) {
|
||||
return getConditionImmunities(vehicle)
|
||||
.map((conditionId) => RuleDataUtils.getCondition(conditionId, ruleData))
|
||||
.filter(TypeScriptUtils.isNotNullOrUndefined);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveSizeId(vehicle, ruleData) {
|
||||
const sizeType = getConfigurationValue(VehicleConfigurationKeyEnum.SIZE_TYPE, vehicle);
|
||||
let ranges = [];
|
||||
let value = null;
|
||||
switch (sizeType) {
|
||||
case VehicleConfigurationSizeTypeEnum.WEIGHT:
|
||||
ranges = sortBy(RuleDataAccessors.getVehicleWeightRanges(ruleData), (range) => range.minSize);
|
||||
value = getWeight(vehicle);
|
||||
break;
|
||||
case VehicleConfigurationSizeTypeEnum.DIMENSION:
|
||||
ranges = sortBy(RuleDataAccessors.getVehicleDimensionRanges(ruleData), (range) => range.minSize);
|
||||
const dimensions = [];
|
||||
const width = getWidth(vehicle);
|
||||
if (width !== null) {
|
||||
dimensions.push(width);
|
||||
}
|
||||
const length = getLength(vehicle);
|
||||
if (length !== null) {
|
||||
dimensions.push(length);
|
||||
}
|
||||
value = dimensions.length > 0 ? Math.max(...dimensions) : null;
|
||||
break;
|
||||
default:
|
||||
// not implemented
|
||||
}
|
||||
let sizeId = null;
|
||||
if (value !== null && ranges.length > 0) {
|
||||
const compareValue = value;
|
||||
ranges.forEach((range) => {
|
||||
if (compareValue >= range.minSize) {
|
||||
sizeId = range.sizeId;
|
||||
}
|
||||
});
|
||||
}
|
||||
return sizeId;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveSizeInfo(vehicle, ruleData) {
|
||||
const sizeId = deriveSizeId(vehicle, ruleData);
|
||||
if (sizeId === null) {
|
||||
return null;
|
||||
}
|
||||
return RuleDataUtils.getCreatureSizeInfo(sizeId, ruleData);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
*/
|
||||
export function deriveNotes(vehicle) {
|
||||
const description = getDescription(vehicle);
|
||||
if (!description) {
|
||||
return description;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveObjectTypeInfo(vehicle, ruleData) {
|
||||
const type = getType(vehicle);
|
||||
if (type === null) {
|
||||
return null;
|
||||
}
|
||||
return RuleDataUtils.getObjectTypeInfo(type, ruleData);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
*/
|
||||
export function deriveMovementKeys(vehicle) {
|
||||
const movementKeys = [];
|
||||
getAllComponentsData(vehicle).forEach((component) => {
|
||||
VehicleComponentAccessors.getSpeedInfos(component).forEach((speed) => {
|
||||
if (speed.type && !movementKeys.includes(speed.type)) {
|
||||
movementKeys.push(speed.type);
|
||||
}
|
||||
});
|
||||
});
|
||||
return movementKeys;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveMovementNames(vehicle, ruleData) {
|
||||
return deriveMovementKeys(vehicle)
|
||||
.map((typeKey) => RuleDataUtils.getVehicleMovementName(typeKey, ruleData))
|
||||
.filter(TypeScriptUtils.isNotNullOrUndefined);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
*/
|
||||
export function deriveDefinitionId(vehicle) {
|
||||
const definitionKey = getDefinitionKey(vehicle);
|
||||
if (!definitionKey) {
|
||||
return null;
|
||||
}
|
||||
return DefinitionUtils.getDefinitionKeyId(definitionKey);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param definitionPool
|
||||
*/
|
||||
export function deriveAccessType(vehicle, definitionPool) {
|
||||
let accessType = AccessTypeEnum.NO_ACCESS;
|
||||
const definitionKey = getDefinitionKey(vehicle);
|
||||
if (definitionKey !== null) {
|
||||
accessType = DefinitionPoolUtils.getDefinitionAccessType(definitionKey, definitionPool);
|
||||
}
|
||||
return accessType;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param configurationLookup
|
||||
* @param configurationKey
|
||||
* @param defaultValue
|
||||
*/
|
||||
export function deriveConfigurationValueLookupValue(configurationLookup, configurationKey, defaultValue) {
|
||||
const configurationInfo = HelperUtils.lookupDataOrFallback(configurationLookup, configurationKey);
|
||||
if (configurationInfo !== null) {
|
||||
return configurationInfo.value;
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param components
|
||||
*/
|
||||
export function deriveComponentListsByGroupType(components) {
|
||||
const componentTypes = [];
|
||||
const actionStationsTypes = [];
|
||||
components.forEach((component) => {
|
||||
const groupType = VehicleComponentAccessors.getGroupType(component);
|
||||
switch (groupType) {
|
||||
case VehicleComponentGroupTypeEnum.COMPONENT:
|
||||
componentTypes.push(component);
|
||||
break;
|
||||
case VehicleComponentGroupTypeEnum.ACTION_STATION:
|
||||
actionStationsTypes.push(component);
|
||||
break;
|
||||
default:
|
||||
// not implemented
|
||||
}
|
||||
});
|
||||
return {
|
||||
components: componentTypes,
|
||||
actionStations: actionStationsTypes,
|
||||
};
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param vehicle
|
||||
* @param ruleData
|
||||
*/
|
||||
export function deriveActions(vehicle, ruleData) {
|
||||
return getDefinitionActions(vehicle).map((actionContract) => generateVehicleAction(vehicle, actionContract, ruleData));
|
||||
}
|
||||
Reference in New Issue
Block a user