summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v2/dice/SimpleDie.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/dice/SimpleDie.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v2/dice/SimpleDie.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/dice/SimpleDie.java b/dice-lang/src/bjc/dicelang/v2/dice/SimpleDie.java
new file mode 100644
index 0000000..f084822
--- /dev/null
+++ b/dice-lang/src/bjc/dicelang/v2/dice/SimpleDie.java
@@ -0,0 +1,60 @@
+package bjc.dicelang.v2.dice;
+
+public class SimpleDie implements Die {
+ private Die numDice;
+ private Die diceSize;
+
+ public SimpleDie(long nDice, long size) {
+ numDice = new ScalarDie(nDice);
+ diceSize = new ScalarDie(size);
+ }
+
+ public SimpleDie(Die nDice, long size) {
+ numDice = nDice;
+ diceSize = new ScalarDie(size);
+ }
+
+ public SimpleDie(long nDice, Die size) {
+ numDice = new ScalarDie(nDice);
+ diceSize = size;
+ }
+
+ public SimpleDie(Die nDice, Die size) {
+ numDice = nDice;
+ diceSize = size;
+ }
+
+ public boolean canOptimize() {
+ if(diceSize.canOptimize() && (diceSize.optimize() <= 1)) {
+ return numDice.canOptimize();
+ } else return false;
+ }
+
+ public long optimize() {
+ long optSize = diceSize.optimize();
+
+ if(optSize == 0) return 0;
+ else return numDice.optimize();
+ }
+
+ public long roll() {
+ long total = 0;
+
+ long nDice = numDice.roll();
+ long dSize = diceSize.roll();
+
+ for(int i = 0; i < nDice; i++) {
+ total += (Math.abs(DiceBox.rng.nextLong()) % dSize) + 1;
+ }
+
+ return total;
+ }
+
+ public long rollSingle() {
+ return (Math.abs(DiceBox.rng.nextLong()) % diceSize.roll()) + 1;
+ }
+
+ public String toString() {
+ return numDice + "d" + diceSize;
+ }
+} \ No newline at end of file