summaryrefslogtreecommitdiff
path: root/dice/src/main/java/bjc/dicelang/dicev2
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-10-06 19:14:55 -0400
committerBen Culkin <scorpress@gmail.com>2020-10-06 19:14:55 -0400
commita166818ea312c83489d9397165bd16aa61fe5438 (patch)
tree8dc4741b987e45611d3929db91a4fe1ab7ad01a5 /dice/src/main/java/bjc/dicelang/dicev2
parent5a26fb2c0d899b1c80fabb39366a7b7db4d8ca41 (diff)
Info cleanup
Diffstat (limited to 'dice/src/main/java/bjc/dicelang/dicev2')
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/Die.java27
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/FilterDieMod.java16
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/FudgeDie.java26
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/MapDieMod.java22
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/PolyhedralDie.java29
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/PoolDiceMod.java21
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/ReduceDieMod.java27
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/ScalarDie.java17
-rw-r--r--dice/src/main/java/bjc/dicelang/dicev2/SortDieMod.java21
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();
}