import { DiceAdjustmentTypeEnum, UsableDiceAdjustmentTypeEnum } from './constants'; /** * * @param advantageAdjustments * @param disadvantageAdjustments */ export function deriveUsableDiceAdjustmentType(advantageAdjustments, disadvantageAdjustments) { const advantageCount = advantageAdjustments.length; const disadvantageCount = disadvantageAdjustments.length; const hasAdvantage = advantageCount > 0; const hasDisadvantage = disadvantageCount > 0; if (hasAdvantage && !hasDisadvantage) { return UsableDiceAdjustmentTypeEnum.ADVANTAGE; } if (!hasAdvantage && hasDisadvantage) { return UsableDiceAdjustmentTypeEnum.DISADVANTAGE; } if (hasAdvantage && hasDisadvantage) { const restrictedAdvantageCount = advantageAdjustments.filter((adjustment) => adjustment.restriction).length; const restrictedDisadvantageCount = disadvantageAdjustments.filter((adjustment) => adjustment.restriction).length; const fullAdvantageCount = advantageCount - restrictedAdvantageCount; const fullDisadvantageCount = disadvantageCount - restrictedDisadvantageCount; const hasFullAdvantage = fullAdvantageCount > 0; const hasFullDisadvantage = fullDisadvantageCount > 0; const hasRestrictedAdvantage = restrictedAdvantageCount > 0; const hasRestrictedDisadvantage = restrictedDisadvantageCount > 0; // Have both full types, means it always cancels and we dont care about restrictions if (hasFullAdvantage && hasFullDisadvantage) { return UsableDiceAdjustmentTypeEnum.NONE; } // Have either restricted advantage or disadvantage, you could possible use either, or none if (hasRestrictedAdvantage || hasRestrictedDisadvantage) { return UsableDiceAdjustmentTypeEnum.ADVANTAGE_DISADVANTAGE; } } return UsableDiceAdjustmentTypeEnum.NONE; } /** * * @param levelScale */ export function deriveMartialArtsDamageDie(levelScale) { // 2025 Update: Keeping this default from previous logic where we didn't have the levelScale. let dice = { diceCount: 1, diceMultiplier: null, diceString: '', diceValue: 4, fixedValue: null, }; if (levelScale.dice) { dice = levelScale.dice; } return dice; } /** * * @param type */ export function deriveDiceAdjustmentTypeName(type) { let name = ''; switch (type) { case DiceAdjustmentTypeEnum.ADVANTAGE: name = 'Advantage'; break; case DiceAdjustmentTypeEnum.DISADVANTAGE: name = 'Disadvantage'; break; case DiceAdjustmentTypeEnum.BONUS: name = 'Bonus'; break; default: //not implemented } return name; }