New source found from dndbeyond.com
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
import { orderBy } from "lodash";
|
||||
|
||||
import { Constants } from "@dndbeyond/character-rules-engine/es";
|
||||
import { DiceOperation, DieTerm, RollRequest } from "@dndbeyond/dice";
|
||||
import { DiceOperations } from "@dndbeyond/pocket-dimension-dice/enums";
|
||||
import {
|
||||
RollDicePayload,
|
||||
DiceNotationSet,
|
||||
} from "@dndbeyond/pocket-dimension-dice/types";
|
||||
|
||||
interface Hack__OrderableDieValueInfo {
|
||||
idx: number;
|
||||
@@ -15,14 +19,14 @@ interface Hack__OrderableDieValueInfo {
|
||||
* @param rollRequestResult
|
||||
*/
|
||||
export function hack__generateDiceRollResultTermLookup(
|
||||
rollRequestResult: RollRequest
|
||||
): Record<number, DieTerm> {
|
||||
const hack__diceRollResultTermLookup: Record<number, DieTerm> = {};
|
||||
rollRequestResult: RollDicePayload["data"]
|
||||
): Record<number, DiceNotationSet> {
|
||||
const hack__diceRollResultTermLookup: Record<number, DiceNotationSet> = {};
|
||||
|
||||
let dieCurrentIdx: number = 0;
|
||||
rollRequestResult.rolls[0].diceNotation.set.forEach((dieTerm) => {
|
||||
dieTerm.dice.forEach((die) => {
|
||||
hack__diceRollResultTermLookup[dieCurrentIdx] = dieTerm;
|
||||
rollRequestResult.rolls[0].diceNotation.set.forEach((diceNotationSet) => {
|
||||
diceNotationSet?.dice.forEach(() => {
|
||||
hack__diceRollResultTermLookup[dieCurrentIdx] = diceNotationSet;
|
||||
dieCurrentIdx++;
|
||||
});
|
||||
});
|
||||
@@ -37,7 +41,7 @@ export function hack__generateDiceRollResultTermLookup(
|
||||
* @param rollRequestResult
|
||||
*/
|
||||
export function hack__generateDiceRollResultValueExcludeTypeLookup(
|
||||
rollRequestResult: RollRequest
|
||||
rollRequestResult: RollDicePayload["data"]
|
||||
): Record<number, Constants.DiceRollExcludeTypeEnum> {
|
||||
const hack__diceRollResultValueExcludeTypeLookup: Record<
|
||||
number,
|
||||
@@ -50,48 +54,52 @@ export function hack__generateDiceRollResultValueExcludeTypeLookup(
|
||||
|
||||
let dieGroupStartIdx: number = 0;
|
||||
|
||||
rollRequestResult.rolls[0].diceNotation.set.forEach((dieTerm) => {
|
||||
let diceCount = dieTerm.count;
|
||||
rollRequestResult.rolls[0].diceNotation.set.forEach((diceNotationSet) => {
|
||||
let diceCount = diceNotationSet?.count;
|
||||
|
||||
//determine sortOrder based on dieTerm.operation
|
||||
let sortOrder: "asc" | "desc" | null = null;
|
||||
switch (dieTerm.operation) {
|
||||
case DiceOperation.Min:
|
||||
switch (diceNotationSet?.operation) {
|
||||
case DiceOperations.Min:
|
||||
sortOrder = "asc";
|
||||
break;
|
||||
case DiceOperation.Max:
|
||||
case DiceOperations.Max:
|
||||
default:
|
||||
sortOrder = "desc";
|
||||
}
|
||||
|
||||
let dieTermResults =
|
||||
let results =
|
||||
rollResult?.values.slice(
|
||||
dieGroupStartIdx,
|
||||
dieGroupStartIdx + diceCount
|
||||
dieGroupStartIdx + (diceCount ?? 0)
|
||||
) ?? [];
|
||||
let hack__orderableDieValueInfos: Array<Hack__OrderableDieValueInfo> =
|
||||
dieTermResults.map((value, idx) => ({
|
||||
results.map((value, idx) => ({
|
||||
idx: dieGroupStartIdx + idx,
|
||||
value,
|
||||
}));
|
||||
let orderedDieTermResults = orderBy(
|
||||
let orderedResults = orderBy(
|
||||
hack__orderableDieValueInfos,
|
||||
(valueInfo) => valueInfo.value,
|
||||
sortOrder
|
||||
);
|
||||
|
||||
//build-up hack__diceRollResultValueExcludeTypeLookup
|
||||
orderedDieTermResults.slice(0, dieTerm.operand).forEach((dieTermResult) => {
|
||||
hack__diceRollResultValueExcludeTypeLookup[dieTermResult.idx] =
|
||||
Constants.DiceRollExcludeTypeEnum.ALL;
|
||||
});
|
||||
orderedDieTermResults.slice(dieTerm.operand).forEach((dieTermResult) => {
|
||||
hack__diceRollResultValueExcludeTypeLookup[dieTermResult.idx] =
|
||||
Constants.DiceRollExcludeTypeEnum.NONE;
|
||||
});
|
||||
orderedResults
|
||||
.slice(0, diceNotationSet?.operand)
|
||||
.forEach((diceNotationSet) => {
|
||||
hack__diceRollResultValueExcludeTypeLookup[diceNotationSet.idx] =
|
||||
Constants.DiceRollExcludeTypeEnum.ALL;
|
||||
});
|
||||
orderedResults
|
||||
.slice(diceNotationSet?.operand)
|
||||
.forEach((diceNotationSet) => {
|
||||
hack__diceRollResultValueExcludeTypeLookup[diceNotationSet.idx] =
|
||||
Constants.DiceRollExcludeTypeEnum.NONE;
|
||||
});
|
||||
|
||||
//move diceGroupStartIdx
|
||||
dieGroupStartIdx += diceCount;
|
||||
dieGroupStartIdx += diceCount ?? 0;
|
||||
});
|
||||
|
||||
return hack__diceRollResultValueExcludeTypeLookup;
|
||||
|
||||
Reference in New Issue
Block a user