@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.d.cts
CHANGED
|
@@ -127,6 +127,7 @@ declare class RollBuilder {
|
|
|
127
127
|
add(anotherRoll: RollBuilder | undefined): RollBuilder;
|
|
128
128
|
withBonus(anotherRoll: RollBuilder): RollBuilder;
|
|
129
129
|
addRoll(count?: number): RollBuilder;
|
|
130
|
+
scaleDice(scale: number): RollBuilder;
|
|
130
131
|
doubleDice(): RollBuilder;
|
|
131
132
|
copy(): RollBuilder;
|
|
132
133
|
d4: () => RollBuilder;
|
package/dist/builder/index.d.ts
CHANGED
|
@@ -127,6 +127,7 @@ declare class RollBuilder {
|
|
|
127
127
|
add(anotherRoll: RollBuilder | undefined): RollBuilder;
|
|
128
128
|
withBonus(anotherRoll: RollBuilder): RollBuilder;
|
|
129
129
|
addRoll(count?: number): RollBuilder;
|
|
130
|
+
scaleDice(scale: number): RollBuilder;
|
|
130
131
|
doubleDice(): RollBuilder;
|
|
131
132
|
copy(): RollBuilder;
|
|
132
133
|
d4: () => RollBuilder;
|
package/dist/builder/index.js
CHANGED
|
@@ -2427,6 +2427,12 @@ var defaultConfig = {
|
|
|
2427
2427
|
keep: void 0,
|
|
2428
2428
|
rollType: "flat"
|
|
2429
2429
|
};
|
|
2430
|
+
var rollConfigsEqual = (a, b) => {
|
|
2431
|
+
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;
|
|
2432
|
+
};
|
|
2433
|
+
var configComplexityScore = (config) => {
|
|
2434
|
+
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);
|
|
2435
|
+
};
|
|
2430
2436
|
var RollBuilder = class _RollBuilder {
|
|
2431
2437
|
constructor(countOrConfigs = 1) {
|
|
2432
2438
|
__publicField(this, "subRollConfigs");
|
|
@@ -2647,13 +2653,19 @@ var RollBuilder = class _RollBuilder {
|
|
|
2647
2653
|
];
|
|
2648
2654
|
return new this.constructor(configs);
|
|
2649
2655
|
}
|
|
2650
|
-
|
|
2656
|
+
scaleDice(scale) {
|
|
2657
|
+
const scaleInt = Math.floor(scale);
|
|
2658
|
+
if (scaleInt !== scale) throw new Error("Scale must be an integer");
|
|
2659
|
+
if (scaleInt <= 0) throw new Error("Scale must be > 0");
|
|
2651
2660
|
const newConfigs = this.getSubRollConfigs().map((config) => {
|
|
2652
2661
|
if (!config.sides || config.sides <= 0) return config;
|
|
2653
|
-
return { ...config, count: config.count *
|
|
2662
|
+
return { ...config, count: config.count * scaleInt };
|
|
2654
2663
|
});
|
|
2655
2664
|
return new this.constructor(newConfigs);
|
|
2656
2665
|
}
|
|
2666
|
+
doubleDice() {
|
|
2667
|
+
return this.scaleDice(2);
|
|
2668
|
+
}
|
|
2657
2669
|
copy() {
|
|
2658
2670
|
return new this.constructor(this.getSubRollConfigs());
|
|
2659
2671
|
}
|
|
@@ -2696,12 +2708,9 @@ var RollBuilder = class _RollBuilder {
|
|
|
2696
2708
|
})).sort((a, b) => {
|
|
2697
2709
|
const aHasPriority = a.reroll > 0 || a.minimum > 0;
|
|
2698
2710
|
const bHasPriority = b.reroll > 0 || b.minimum > 0;
|
|
2699
|
-
if (aHasPriority !== bHasPriority)
|
|
2700
|
-
return aHasPriority ? -1 : 1;
|
|
2701
|
-
}
|
|
2711
|
+
if (aHasPriority !== bHasPriority) return aHasPriority ? -1 : 1;
|
|
2702
2712
|
if (b.sides !== a.sides) return b.sides - a.sides;
|
|
2703
|
-
|
|
2704
|
-
return complexity(b) - complexity(a);
|
|
2713
|
+
return configComplexityScore(b) - configComplexityScore(a);
|
|
2705
2714
|
});
|
|
2706
2715
|
const diceConfigs = rootD20Group ? [
|
|
2707
2716
|
{ ...rootD20Group.config, count: rootD20Group.totalCount },
|
|
@@ -2713,9 +2722,7 @@ var RollBuilder = class _RollBuilder {
|
|
|
2713
2722
|
);
|
|
2714
2723
|
if (diceConfigs.length === 0) return totalModifier.toString();
|
|
2715
2724
|
const rootDieConfig = this.getRootDieConfig();
|
|
2716
|
-
const newRootConfig = rootDieConfig ? diceConfigs.find(
|
|
2717
|
-
(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
|
|
2718
|
-
) : void 0;
|
|
2725
|
+
const newRootConfig = rootDieConfig ? diceConfigs.find((c) => rollConfigsEqual(c, rootDieConfig)) : void 0;
|
|
2719
2726
|
const diceExpressions = diceConfigs.map(
|
|
2720
2727
|
(config) => this.configToSingleExpressionWithoutModifier(
|
|
2721
2728
|
config,
|
|
@@ -2761,7 +2768,11 @@ var RollBuilder = class _RollBuilder {
|
|
|
2761
2768
|
}
|
|
2762
2769
|
}
|
|
2763
2770
|
if (config.minimum > 0) {
|
|
2764
|
-
|
|
2771
|
+
if (config.reroll > 0 && !config.explode) {
|
|
2772
|
+
baseDie = `${config.minimum}>(${baseDie})`;
|
|
2773
|
+
} else {
|
|
2774
|
+
baseDie = `${config.minimum}>${baseDie}`;
|
|
2775
|
+
}
|
|
2765
2776
|
if (config.reroll > 0 && config.explode > 0) {
|
|
2766
2777
|
for (let i = 1; i <= config.reroll; i++) {
|
|
2767
2778
|
baseDie += ` reroll ${i}`;
|
|
@@ -2798,21 +2809,20 @@ var RollBuilder = class _RollBuilder {
|
|
|
2798
2809
|
const isComplex = baseDie.length > `d${config.sides}`.length;
|
|
2799
2810
|
const isHalflingShorthand = baseDie === "hd20";
|
|
2800
2811
|
const isD20Shorthand = baseDie === "d20" && isRootDie;
|
|
2801
|
-
const hasMinimum =
|
|
2802
|
-
const hasReroll =
|
|
2812
|
+
const hasMinimum = config.minimum > 0;
|
|
2813
|
+
const hasReroll = config.reroll > 0;
|
|
2803
2814
|
const effectiveCount = config.isSubtraction ? Math.abs(config.count) : config.count < 0 ? 1 : Math.abs(config.count);
|
|
2804
2815
|
if (effectiveCount > 1) {
|
|
2805
|
-
const shouldAddParentheses = isComplex
|
|
2806
|
-
!hasMinimum && !hasReroll || // Simple complex case
|
|
2807
|
-
hasReroll && !hasMinimum);
|
|
2816
|
+
const shouldAddParentheses = isComplex;
|
|
2808
2817
|
mainExpression = shouldAddParentheses ? `${effectiveCount}(${baseDie})` : `${effectiveCount}${baseDie}`;
|
|
2809
2818
|
} else if (effectiveCount === 1) {
|
|
2819
|
+
const needsParens = hasReroll && hasMinimum;
|
|
2810
2820
|
if (config.isSubtraction) {
|
|
2811
|
-
mainExpression = `1${baseDie}`;
|
|
2821
|
+
mainExpression = needsParens ? `1(${baseDie})` : `1${baseDie}`;
|
|
2812
2822
|
} else if (isComplex || isHalflingShorthand || isD20Shorthand || config.count < 0) {
|
|
2813
|
-
mainExpression = baseDie;
|
|
2823
|
+
mainExpression = needsParens ? `1(${baseDie})` : baseDie;
|
|
2814
2824
|
} else {
|
|
2815
|
-
mainExpression = `1${baseDie}`;
|
|
2825
|
+
mainExpression = needsParens ? `1(${baseDie})` : `1${baseDie}`;
|
|
2816
2826
|
}
|
|
2817
2827
|
} else {
|
|
2818
2828
|
mainExpression = baseDie;
|