From 96e868388c7617136e916c27ddd90694c0bb8356 Mon Sep 17 00:00:00 2001 From: bjculkin Date: Mon, 27 Feb 2017 10:34:25 -0500 Subject: More refactoring --- .../src/bjc/dicelang/v2/dice/CompoundingDie.java | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 dice-lang/src/bjc/dicelang/v2/dice/CompoundingDie.java (limited to 'dice-lang/src/bjc/dicelang/v2/dice/CompoundingDie.java') diff --git a/dice-lang/src/bjc/dicelang/v2/dice/CompoundingDie.java b/dice-lang/src/bjc/dicelang/v2/dice/CompoundingDie.java new file mode 100644 index 0000000..d5991ae --- /dev/null +++ b/dice-lang/src/bjc/dicelang/v2/dice/CompoundingDie.java @@ -0,0 +1,63 @@ +package bjc.dicelang.v2.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