@yipe/dice 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/builder/index.cjs
CHANGED
|
@@ -2429,6 +2429,12 @@ var defaultConfig = {
|
|
|
2429
2429
|
keep: void 0,
|
|
2430
2430
|
rollType: "flat"
|
|
2431
2431
|
};
|
|
2432
|
+
var rollConfigsEqual = (a, b) => {
|
|
2433
|
+
return a.count === b.count && a.sides === b.sides && a.modifier === b.modifier && a.reroll === b.reroll && a.explode === b.explode && a.minimum === b.minimum && a.bestOf === b.bestOf && a.keep === b.keep && a.rollType === b.rollType;
|
|
2434
|
+
};
|
|
2435
|
+
var configComplexityScore = (config) => {
|
|
2436
|
+
return (config.reroll > 0 ? 1 : 0) + (config.explode > 0 ? 1 : 0) + (config.minimum > 0 ? 1 : 0) + (config.bestOf > 0 ? 1 : 0) + (config.keep !== void 0 ? 1 : 0) + (config.rollType !== "flat" ? 1 : 0);
|
|
2437
|
+
};
|
|
2432
2438
|
var RollBuilder = class _RollBuilder {
|
|
2433
2439
|
constructor(countOrConfigs = 1) {
|
|
2434
2440
|
__publicField(this, "subRollConfigs");
|
|
@@ -2649,13 +2655,19 @@ var RollBuilder = class _RollBuilder {
|
|
|
2649
2655
|
];
|
|
2650
2656
|
return new this.constructor(configs);
|
|
2651
2657
|
}
|
|
2652
|
-
|
|
2658
|
+
scaleDice(scale) {
|
|
2659
|
+
const scaleInt = Math.floor(scale);
|
|
2660
|
+
if (scaleInt !== scale) throw new Error("Scale must be an integer");
|
|
2661
|
+
if (scaleInt <= 0) throw new Error("Scale must be > 0");
|
|
2653
2662
|
const newConfigs = this.getSubRollConfigs().map((config) => {
|
|
2654
2663
|
if (!config.sides || config.sides <= 0) return config;
|
|
2655
|
-
return { ...config, count: config.count *
|
|
2664
|
+
return { ...config, count: config.count * scaleInt };
|
|
2656
2665
|
});
|
|
2657
2666
|
return new this.constructor(newConfigs);
|
|
2658
2667
|
}
|
|
2668
|
+
doubleDice() {
|
|
2669
|
+
return this.scaleDice(2);
|
|
2670
|
+
}
|
|
2659
2671
|
copy() {
|
|
2660
2672
|
return new this.constructor(this.getSubRollConfigs());
|
|
2661
2673
|
}
|
|
@@ -2698,12 +2710,9 @@ var RollBuilder = class _RollBuilder {
|
|
|
2698
2710
|
})).sort((a, b) => {
|
|
2699
2711
|
const aHasPriority = a.reroll > 0 || a.minimum > 0;
|
|
2700
2712
|
const bHasPriority = b.reroll > 0 || b.minimum > 0;
|
|
2701
|
-
if (aHasPriority !== bHasPriority)
|
|
2702
|
-
return aHasPriority ? -1 : 1;
|
|
2703
|
-
}
|
|
2713
|
+
if (aHasPriority !== bHasPriority) return aHasPriority ? -1 : 1;
|
|
2704
2714
|
if (b.sides !== a.sides) return b.sides - a.sides;
|
|
2705
|
-
|
|
2706
|
-
return complexity(b) - complexity(a);
|
|
2715
|
+
return configComplexityScore(b) - configComplexityScore(a);
|
|
2707
2716
|
});
|
|
2708
2717
|
const diceConfigs = rootD20Group ? [
|
|
2709
2718
|
{ ...rootD20Group.config, count: rootD20Group.totalCount },
|
|
@@ -2715,9 +2724,7 @@ var RollBuilder = class _RollBuilder {
|
|
|
2715
2724
|
);
|
|
2716
2725
|
if (diceConfigs.length === 0) return totalModifier.toString();
|
|
2717
2726
|
const rootDieConfig = this.getRootDieConfig();
|
|
2718
|
-
const newRootConfig = rootDieConfig ? diceConfigs.find(
|
|
2719
|
-
(c) => c.sides === rootDieConfig.sides && c.rollType === rootDieConfig.rollType && c.reroll === rootDieConfig.reroll && c.explode === rootDieConfig.explode && c.minimum === rootDieConfig.minimum && c.bestOf === rootDieConfig.bestOf && c.keep === rootDieConfig.keep
|
|
2720
|
-
) : void 0;
|
|
2727
|
+
const newRootConfig = rootDieConfig ? diceConfigs.find((c) => rollConfigsEqual(c, rootDieConfig)) : void 0;
|
|
2721
2728
|
const diceExpressions = diceConfigs.map(
|
|
2722
2729
|
(config) => this.configToSingleExpressionWithoutModifier(
|
|
2723
2730
|
config,
|
|
@@ -2763,7 +2770,11 @@ var RollBuilder = class _RollBuilder {
|
|
|
2763
2770
|
}
|
|
2764
2771
|
}
|
|
2765
2772
|
if (config.minimum > 0) {
|
|
2766
|
-
|
|
2773
|
+
if (config.reroll > 0 && !config.explode) {
|
|
2774
|
+
baseDie = `${config.minimum}>(${baseDie})`;
|
|
2775
|
+
} else {
|
|
2776
|
+
baseDie = `${config.minimum}>${baseDie}`;
|
|
2777
|
+
}
|
|
2767
2778
|
if (config.reroll > 0 && config.explode > 0) {
|
|
2768
2779
|
for (let i = 1; i <= config.reroll; i++) {
|
|
2769
2780
|
baseDie += ` reroll ${i}`;
|
|
@@ -2800,21 +2811,20 @@ var RollBuilder = class _RollBuilder {
|
|
|
2800
2811
|
const isComplex = baseDie.length > `d${config.sides}`.length;
|
|
2801
2812
|
const isHalflingShorthand = baseDie === "hd20";
|
|
2802
2813
|
const isD20Shorthand = baseDie === "d20" && isRootDie;
|
|
2803
|
-
const hasMinimum =
|
|
2804
|
-
const hasReroll =
|
|
2814
|
+
const hasMinimum = config.minimum > 0;
|
|
2815
|
+
const hasReroll = config.reroll > 0;
|
|
2805
2816
|
const effectiveCount = config.isSubtraction ? Math.abs(config.count) : config.count < 0 ? 1 : Math.abs(config.count);
|
|
2806
2817
|
if (effectiveCount > 1) {
|
|
2807
|
-
const shouldAddParentheses = isComplex
|
|
2808
|
-
!hasMinimum && !hasReroll || // Simple complex case
|
|
2809
|
-
hasReroll && !hasMinimum);
|
|
2818
|
+
const shouldAddParentheses = isComplex;
|
|
2810
2819
|
mainExpression = shouldAddParentheses ? `${effectiveCount}(${baseDie})` : `${effectiveCount}${baseDie}`;
|
|
2811
2820
|
} else if (effectiveCount === 1) {
|
|
2821
|
+
const needsParens = hasReroll && hasMinimum;
|
|
2812
2822
|
if (config.isSubtraction) {
|
|
2813
|
-
mainExpression = `1${baseDie}`;
|
|
2823
|
+
mainExpression = needsParens ? `1(${baseDie})` : `1${baseDie}`;
|
|
2814
2824
|
} else if (isComplex || isHalflingShorthand || isD20Shorthand || config.count < 0) {
|
|
2815
|
-
mainExpression = baseDie;
|
|
2825
|
+
mainExpression = needsParens ? `1(${baseDie})` : baseDie;
|
|
2816
2826
|
} else {
|
|
2817
|
-
mainExpression = `1${baseDie}`;
|
|
2827
|
+
mainExpression = needsParens ? `1(${baseDie})` : `1${baseDie}`;
|
|
2818
2828
|
}
|
|
2819
2829
|
} else {
|
|
2820
2830
|
mainExpression = baseDie;
|