aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/operationcondition.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2019-07-28 02:38:00 +0200
committerRenaud G <renaud@rolisteam.org>2019-07-28 02:38:00 +0200
commit58893c479bfdf2ea7631bff12710a436c3bcfa51 (patch)
tree0a4c5319c251acf3142664a5b3140dc191d6f2c5 /operationcondition.cpp
parenta31826330e85c4c3694e85319da863b6d1784257 (diff)
downloadOneRoll-58893c479bfdf2ea7631bff12710a436c3bcfa51.tar.gz
OneRoll-58893c479bfdf2ea7631bff12710a436c3bcfa51.zip
set of possibility
Diffstat (limited to 'operationcondition.cpp')
-rw-r--r--operationcondition.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/operationcondition.cpp b/operationcondition.cpp
index 97c7bce..9ef8e1e 100644
--- a/operationcondition.cpp
+++ b/operationcondition.cpp
@@ -68,7 +68,7 @@ qint64 OperationCondition::hasValid(Die* b, bool recursive, bool unhighlight) co
if(valueScalar == 0)
valueScalar= 1;
die.insertRollValue(value % valueScalar);
- sum+= m_boolean->hasValid(&die, recursive, false);
+ sum+= m_boolean->hasValid(&die, recursive, false) ? 1 : 0;
}
break;
}
@@ -125,6 +125,7 @@ Dice::CONDITION_STATE OperationCondition::isValidRangeSize(const std::pair<qint6
return valid;
}
+
Validator* OperationCondition::getCopy() const
{
OperationCondition* val= new OperationCondition();
@@ -144,3 +145,20 @@ qint64 OperationCondition::valueToScalar() const
auto result= m_value->getResult();
return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
}
+
+const std::set<qint64>& OperationCondition::getPossibleValues(const std::pair<qint64, qint64>& range)
+{
+ if(nullptr == m_boolean)
+ return m_values;
+
+ for(qint64 i= std::min(range.first, range.second); i <= std::max(range.first, range.second); ++i)
+ {
+ auto valueScalar= valueToScalar();
+ auto val= i % valueScalar;
+ Die die;
+ die.insertRollValue(val);
+ if(m_boolean->hasValid(&die, false, false))
+ m_values.insert(i);
+ }
+ return m_values;
+}