|
|
@@ -13,7 +13,9 @@
|
|
|
#include "dice-roll/random.h"
|
|
|
|
|
|
namespace dice {
|
|
|
-int add_outcome(int accum, die_outcome const & die) { return accum + die.roll; }
|
|
|
+int add_outcome(int accum, die_outcome const & die) {
|
|
|
+ return accum + (!die.dropped ? die.roll : 0);
|
|
|
+}
|
|
|
|
|
|
die_roll::operator int() const {
|
|
|
return sgn(sign) *
|
|
|
@@ -47,12 +49,12 @@ die_roll roll_impl(die const & d, engine::random & gen) {
|
|
|
switch (d.keep.method) {
|
|
|
case keep::Highest:
|
|
|
for (int i = 0; i < d.num - d.keep.amount; ++i) {
|
|
|
- hits.erase(std::min_element(hits.begin(), hits.end()));
|
|
|
+ std::min_element(hits.begin(), hits.end())->dropped = true;
|
|
|
}
|
|
|
break;
|
|
|
case keep::Lowest:
|
|
|
for (int i = 0; i < d.num - d.keep.amount; ++i) {
|
|
|
- hits.erase(std::max_element(hits.begin(), hits.end()));
|
|
|
+ std::max_element(hits.begin(), hits.end())->dropped = true;
|
|
|
}
|
|
|
break;
|
|
|
default:
|