rollWithExplode method
return result of rolling given number of nsided dice.
Implementation
UnmodifiableListView<int> rollWithExplode({
required int ndice,
required int nsides,
bool explode = false,
int explodeLimit = defaultExplodeLimit,
}) {
RangeError.checkValueInInterval(ndice, minDice, maxDice, 'ndice');
RangeError.checkValueInInterval(nsides, minSides, maxSides, 'nsides');
final results = <int>[];
var numToRoll = ndice;
var explodeCount = 0;
while (numToRoll > 0 && explodeCount <= explodeLimit) {
if (explodeCount > 0) {
_log.finest(() => "explode $numToRoll !");
}
final localResults = roll(numToRoll, nsides);
results.addAll(localResults);
if (!explode) {
break;
}
if (nsides == 1) {
_log.finer("1-sided dice cannot explode");
break;
}
explodeCount++;
numToRoll = localResults.where((v) => v == nsides).length;
}
_log.finest(() => "roll ${ndice}d!$nsides => $results");
return UnmodifiableListView(results);
}