From 36e0911c6ec27707a74f0b90b1052a16374243ea Mon Sep 17 00:00:00 2001 From: bjculkin Date: Wed, 1 Mar 2017 10:13:41 -0500 Subject: Package reorganization --- .../src/bjc/dicelang/dice/CompoundingDie.java | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 dice-lang/src/bjc/dicelang/dice/CompoundingDie.java (limited to 'dice-lang/src/bjc/dicelang/dice/CompoundingDie.java') diff --git a/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java b/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java new file mode 100644 index 0000000..9744650 --- /dev/null +++ b/dice-lang/src/bjc/dicelang/dice/CompoundingDie.java @@ -0,0 +1,63 @@ +package bjc.dicelang.dice; + +import java.util.function.Predicate; + +public class CompoundingDie implements Die { + private Die source; + + private Predicate compoundOn; + private String compoundPattern; + + public CompoundingDie(Die src, Predicate compound) { + this(src, compound, null); + } + + public CompoundingDie(Die src, Predicate compound, String patt) { + source = src; + + compoundOn = compound; + compoundPattern = patt; + } + + public boolean canOptimize() { + return source.canOptimize() && source.optimize() == 0; + } + + public long optimize() { + return 0; + } + + public long roll() { + long res = source.roll(); + long oldRes = res; + + while(compoundOn.test(oldRes)) { + oldRes = source.rollSingle(); + + res += oldRes; + } + + return res; + } + + public long rollSingle() { + long res = source.rollSingle(); + long oldRes = res; + + while(compoundOn.test(oldRes)) { + oldRes = source.rollSingle(); + + res += oldRes; + } + + return res; + } + + public String toString() { + if(compoundPattern == null) { + return source + "!!"; + } else { + return source + "!!" + compoundPattern; + } + } +} \ No newline at end of file -- cgit v1.2.3