public override string ToString() { StringBuilder sb = new StringBuilder(Expression?.ToString() ?? String.Empty); if (MaxRerollsExpr != null) { sb.AppendFormat(".rerollN({0}, ", MaxRerollsExpr.ToString()); } else if (MaxRerolls == 1) { sb.Append(".rerollOnce("); } else if (MaxRerolls == 0) { sb.Append(".reroll("); } else { // MaxRerolls was not 0 or 1 and MaxRerollsExpr is null, this should never happen. sb.Append(".<<UNKNOWN REROLL>>("); } sb.Append(Comparison.ToString()); sb.Append(")"); return(sb.ToString()); }
protected override long EvaluateInternal(RollData data, DiceAST root, int depth) { var rolls = MaxRerollsExpr?.Evaluate(data, root, depth + 1) ?? 0; rolls += Comparison.Evaluate(data, root, depth + 1); rolls += Expression.Evaluate(data, root, depth + 1); rolls += MaybeReroll(data, root, depth); return(rolls); }