diff options
| author | Ben Culkin <scorpress@gmail.com> | 2020-10-06 19:14:55 -0400 |
|---|---|---|
| committer | Ben Culkin <scorpress@gmail.com> | 2020-10-06 19:14:55 -0400 |
| commit | a166818ea312c83489d9397165bd16aa61fe5438 (patch) | |
| tree | 8dc4741b987e45611d3929db91a4fe1ab7ad01a5 /dice/src/main/java/bjc/dicelang/dicev2 | |
| parent | 5a26fb2c0d899b1c80fabb39366a7b7db4d8ca41 (diff) | |
Info cleanup
Diffstat (limited to 'dice/src/main/java/bjc/dicelang/dicev2')
9 files changed, 203 insertions, 3 deletions
diff --git a/dice/src/main/java/bjc/dicelang/dicev2/Die.java b/dice/src/main/java/bjc/dicelang/dicev2/Die.java index ab4f880..9fadb2d 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/Die.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/Die.java @@ -4,25 +4,40 @@ import java.util.Random; /** * An abstract class that represents a single pool of dice. + * * @author Ben Culkin * */ public abstract class Die { private static final Random BASE = new Random(); + /** + * The RNG to use. + */ protected Random rng; + /** + * Create a new basic die. + */ protected Die() { rng = BASE; } + /** + * Create a new basic die. + * + * @param rnd + * The RNG to use. + */ protected Die(Random rnd) { rng = rnd; } /** * Set the RNG this die pool uses. - * @param rnd The RNG used by the die pool. + * + * @param rnd + * The RNG used by the die pool. */ public void setRandom(Random rnd) { rng = rnd; @@ -30,27 +45,33 @@ public abstract class Die { /** * Roll the entire die pool. + * * @return The results from rolling the dice. */ public abstract long[] roll(); + /** * Roll a single die in the pool. * * For pools with multiple die, this may be somewhat arbitrary. + * * @return Result from rolling a single die in the pool. */ - public abstract long rollSingle(); + public abstract long rollSingle(); /** * Can this pool be optimized? + * * @return Is the pool optimizable? */ public abstract boolean canOptimize(); + /** * Optimize the die pool. * * Is undefined if called while canOptimize is false. + * * @return The optimized version of the pool. */ - public abstract long optimize(); + public abstract long optimize(); } diff --git a/dice/src/main/java/bjc/dicelang/dicev2/FilterDieMod.java b/dice/src/main/java/bjc/dicelang/dicev2/FilterDieMod.java index 89e5749..bb4f8d1 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/FilterDieMod.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/FilterDieMod.java @@ -13,10 +13,22 @@ import java.util.function.LongPredicate; * */ public class FilterDieMod extends Die { + /** + * The dice for this die pool. + */ public final Die[] dice; + /** + * The filter for the die pool. + */ public final LongPredicate filter; + /** + * Create a new filtered die pool. + * + * @param filter The filter for the die pool. + * @param dice The die pool. + */ public FilterDieMod(LongPredicate filter, Die[] dice) { super(); @@ -25,6 +37,7 @@ public class FilterDieMod extends Die { this.dice = dice; } + @Override public long[] roll() { List<Long> lst = new ArrayList<>(dice.length); @@ -37,16 +50,19 @@ public class FilterDieMod extends Die { return ListUtils.toPrimitive(lst); } + @Override public long rollSingle() { throw new UnsupportedOperationException("Filtered dice can't be rolled singly"); } /* :UnoptimizableDice */ + @Override public boolean canOptimize() { return false; } + @Override public long optimize() { throw new UnsupportedOperationException("Filtered dice can't be optimized"); } diff --git a/dice/src/main/java/bjc/dicelang/dicev2/FudgeDie.java b/dice/src/main/java/bjc/dicelang/dicev2/FudgeDie.java index 21fca1d..9fababa 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/FudgeDie.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/FudgeDie.java @@ -2,21 +2,44 @@ package bjc.dicelang.dicev2; import java.util.Random; +/** + * Create a set of Fudge dice. + * + * Fudge dice are dice which can roll -1, 0 or 1. + * + * @author Ben Culkin + * + */ public class FudgeDie extends Die { + /** + * The number of dice to roll. + */ public final int numDice; + /** + * Create a new pool for fudge dice. + * + * @param numDice The number of dice in the pool. + */ public FudgeDie(int numDice) { super(); this.numDice = numDice; } + /** + * Create a new pool for fudge dice. + * + * @param rnd The random number generator to use. + * @param numDice The number of dice in the pool. + */ public FudgeDie(Random rnd, int numDice) { super(rnd); this.numDice = numDice; } + @Override public long[] roll() { long[] res = new long[numDice]; @@ -27,15 +50,18 @@ public class FudgeDie extends Die { return res; } + @Override public long rollSingle() { /* Return an int in the range [-1, 1] */ return rng.nextInt(3) - 1; } + @Override public boolean canOptimize() { return numDice == 0; } + @Override public long optimize() { return 0; } diff --git a/dice/src/main/java/bjc/dicelang/dicev2/MapDieMod.java b/dice/src/main/java/bjc/dicelang/dicev2/MapDieMod.java index d6d5dd0..c0131f1 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/MapDieMod.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/MapDieMod.java @@ -2,11 +2,29 @@ package bjc.dicelang.dicev2; import java.util.function.LongUnaryOperator; +/** + * Die pool which executes a mapping on the result. + * + * @author Ben Culkin + * + */ public class MapDieMod extends Die { + /** + * The die pool. + */ public final Die die; + /** + * The operator on the result. + */ public final LongUnaryOperator map; + /** + * Create a new mapping die pool. + * + * @param map The operation to do on the result. + * @param die The die pool. + */ public MapDieMod(LongUnaryOperator map, Die die) { super(); @@ -14,6 +32,7 @@ public class MapDieMod extends Die { this.map = map; } + @Override public long[] roll() { long[] res = die.roll(); @@ -24,15 +43,18 @@ public class MapDieMod extends Die { return res; } + @Override public long rollSingle() { return map.applyAsLong(die.rollSingle()); } /* :UnoptimizableDice */ + @Override public boolean canOptimize() { return false; } + @Override public long optimize() { throw new UnsupportedOperationException("Mapped dice can't be optimized"); } diff --git a/dice/src/main/java/bjc/dicelang/dicev2/PolyhedralDie.java b/dice/src/main/java/bjc/dicelang/dicev2/PolyhedralDie.java index be78279..1485c5e 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/PolyhedralDie.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/PolyhedralDie.java @@ -2,10 +2,28 @@ package bjc.dicelang.dicev2; import java.util.Random; +/** + * Polyhedral die pool + * @author Ben Culkin + * + */ public class PolyhedralDie extends Die { + /** + * The number of dice in the pool. + */ public final int numDice; + + /** + * The number of sides on each die. + */ public final int numSides; + /** + * Create a new polyhedral die pool. + * + * @param numDice The number of dice in the pool. + * @param numSides The number of side on each die. + */ public PolyhedralDie(int numDice, int numSides) { super(); @@ -13,6 +31,13 @@ public class PolyhedralDie extends Die { this.numSides = numSides; } + /** + * Create a new polyhedral die pool. + * + * @param rnd The random number generator to use. + * @param numDice The number of dice in the pool. + * @param numSides The number of side on each die. + */ public PolyhedralDie(Random rnd, int numDice, int numSides) { super(rnd); @@ -20,6 +45,7 @@ public class PolyhedralDie extends Die { this.numSides = numSides; } + @Override public long[] roll() { long[] res = new long[numDice]; @@ -30,15 +56,18 @@ public class PolyhedralDie extends Die { return res; } + @Override public long rollSingle() { /* nextInt is from 0 (inclusive) to numSides (exclusive) */ return rng.nextInt(numSides) + 1; } + @Override public boolean canOptimize() { return numSides <= 1 || numDice == 0; } + @Override public long optimize() { if(numDice == 0 || numSides == 0) return 0; diff --git a/dice/src/main/java/bjc/dicelang/dicev2/PoolDiceMod.java b/dice/src/main/java/bjc/dicelang/dicev2/PoolDiceMod.java index 8733908..86855aa 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/PoolDiceMod.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/PoolDiceMod.java @@ -5,15 +5,33 @@ import bjc.utils.funcutils.ListUtils; import java.util.ArrayList; import java.util.List; +/** + * Converts a die pool into a single die. + * + * @TODO Oct 5, 2020 - Ben Culkin - :CustomPool + * Should there be a custom pool reduction operator? + * + * @author Ben Culkin + * + */ public class PoolDiceMod extends Die { + /** + * The die pool to roll. + */ public Die[] dice; + /** + * Create a new die pool converter. + * + * @param dice The pool of dice. + */ public PoolDiceMod(Die... dice) { super(); this.dice = dice; } + @Override public long[] roll() { List<Long> lst = new ArrayList<>(dice.length); @@ -27,15 +45,18 @@ public class PoolDiceMod extends Die { } /* :NoSingleRolls */ + @Override public long rollSingle() { throw new UnsupportedOperationException("Pooled dice can't be rolled singly"); } /* :UnoptimizableDice */ + @Override public boolean canOptimize() { return false; } + @Override public long optimize() { throw new UnsupportedOperationException("Pooled dice can't be optimized"); } diff --git a/dice/src/main/java/bjc/dicelang/dicev2/ReduceDieMod.java b/dice/src/main/java/bjc/dicelang/dicev2/ReduceDieMod.java index 266e270..070c510 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/ReduceDieMod.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/ReduceDieMod.java @@ -2,12 +2,35 @@ package bjc.dicelang.dicev2; import java.util.function.LongBinaryOperator; +/** + * Die pool which performs a reduction. + * + * @author Ben Culkin + * + */ public class ReduceDieMod extends Die { + /** + * The die pool. + */ public final Die[] dice; + /** + * The reduction operation. + */ public final LongBinaryOperator fold; + + /** + * The initial value for the reduction. + */ public final long initial; + /** + * Create a new reducing die pool. + * + * @param fold The reduction operation. + * @param initial The initial value for the reduction. + * @param dice The die pool. + */ public ReduceDieMod(LongBinaryOperator fold, long initial, Die... dice) { super(); @@ -17,10 +40,12 @@ public class ReduceDieMod extends Die { this.initial = initial; } + @Override public long[] roll() { return new long[] { rollSingle() }; } + @Override public long rollSingle() { long res = initial; @@ -33,6 +58,7 @@ public class ReduceDieMod extends Die { return res; } + @Override public boolean canOptimize() { for(Die die : dice) { if(!die.canOptimize()) return false; @@ -41,6 +67,7 @@ public class ReduceDieMod extends Die { return true; } + @Override public long optimize() { long res = 0; diff --git a/dice/src/main/java/bjc/dicelang/dicev2/ScalarDie.java b/dice/src/main/java/bjc/dicelang/dicev2/ScalarDie.java index 82c1771..af2829e 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/ScalarDie.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/ScalarDie.java @@ -1,26 +1,43 @@ package bjc.dicelang.dicev2; +/** + * Die which represents a single number. + * @author Ben Culkin + * + */ public class ScalarDie extends Die { + /** + * The value this die represents. + */ public final long val; + /** + * Create a new die representing a single number. + * + * @param val The number for the die. + */ public ScalarDie(long val) { super(); this.val = val; } + @Override public long[] roll() { return new long[] { rollSingle() }; } + @Override public long rollSingle() { return val; } + @Override public boolean canOptimize() { return true; } + @Override public long optimize() { return val; } diff --git a/dice/src/main/java/bjc/dicelang/dicev2/SortDieMod.java b/dice/src/main/java/bjc/dicelang/dicev2/SortDieMod.java index e73da6c..89c4f16 100644 --- a/dice/src/main/java/bjc/dicelang/dicev2/SortDieMod.java +++ b/dice/src/main/java/bjc/dicelang/dicev2/SortDieMod.java @@ -6,11 +6,28 @@ import java.util.ArrayList; import java.util.List; import java.util.Comparator; +/** + * Die mod which sorts its results. + * @author Ben Culkin + * + */ public class SortDieMod extends Die { + /** + * Die to sort. + */ public final Die die; + /** + * Sorter to use. + */ public Comparator<Long> sorter; + /** + * Create a new sorting die mod. + * + * @param sorter Sorter to use. + * @param die Die to sort. + */ public SortDieMod(Comparator<Long> sorter, Die die) { super(); @@ -19,6 +36,7 @@ public class SortDieMod extends Die { this.die = die; } + @Override public long[] roll() { /* * @NOTE @@ -38,14 +56,17 @@ public class SortDieMod extends Die { return ListUtils.toPrimitive(lst); } + @Override public long rollSingle() { return die.rollSingle(); } + @Override public boolean canOptimize() { return die.canOptimize(); } + @Override public long optimize() { return die.optimize(); } |
