aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/operationcondition.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2018-03-18 17:40:47 +0100
committerRenaud G <renaud@rolisteam.org>2018-03-18 17:40:47 +0100
commit23900ee4a93c79451425864f2743a856d57461b9 (patch)
tree390400811833d6dbe7ec8278160086a76213cd38 /operationcondition.cpp
parent5ff5516c8cab5599375234a9a1898b737e8541f2 (diff)
downloadOneRoll-23900ee4a93c79451425864f2743a856d57461b9.tar.gz
OneRoll-23900ee4a93c79451425864f2743a856d57461b9.zip
-Add node as parameter of condition
Diffstat (limited to 'operationcondition.cpp')
-rw-r--r--operationcondition.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/operationcondition.cpp b/operationcondition.cpp
index 220e810..86c013a 100644
--- a/operationcondition.cpp
+++ b/operationcondition.cpp
@@ -25,7 +25,14 @@ OperationCondition::OperationCondition()
{
}
-
+OperationCondition::~OperationCondition()
+{
+ if(m_value!= nullptr)
+ {
+ delete m_value;
+ m_value = nullptr;
+ }
+}
BooleanCondition *OperationCondition::getBoolean() const
{
return m_boolean;
@@ -58,7 +65,10 @@ qint64 OperationCondition::hasValid(Die* b,bool recursive,bool unhighlight) cons
{
Die die;
die.setMaxValue(b->getMaxValue());
- die.insertRollValue(value%m_value);
+ auto valueScalar = valueToScalar();
+ if(valueScalar==0)
+ valueScalar = 1;
+ die.insertRollValue(value%valueScalar);
sum+=m_boolean->hasValid(&die,recursive,false);
}
break;
@@ -82,10 +92,11 @@ void OperationCondition::setOperator(ConditionOperator m)
m_operator = m;
}
-void OperationCondition::setValue(qint64 v)
+void OperationCondition::setValueNode(ExecutionNode *node)
{
- m_value=v;
+ m_value = node;
}
+
QString OperationCondition::toString()
{
QString str(QStringLiteral(""));
@@ -95,19 +106,33 @@ QString OperationCondition::toString()
str.append(QStringLiteral("\%"));
break;
}
- return QStringLiteral("[%1%2%3]").arg(str).arg(m_value).arg(m_boolean->toString());
+ return QStringLiteral("[%1%2%3]").arg(str).arg(valueToScalar()).arg(m_boolean->toString());
}
quint64 OperationCondition::getValidRangeSize(quint64 faces) const
{
- return faces/m_value;
+ auto value = valueToScalar();
+ if(value==0)
+ return 0;
+ return faces/value;
+
}
Validator* OperationCondition::getCopy() const
{
OperationCondition* val = new OperationCondition();
val->setOperator(m_operator);
- val->setValue(m_value);
+ val->setValueNode(m_value->getCopy());
BooleanCondition* boolean = dynamic_cast<BooleanCondition*>(m_boolean->getCopy());
val->setBoolean(boolean);
return val;
}
+
+qint64 OperationCondition::valueToScalar() const
+{
+ if(m_value == nullptr)
+ return 0;
+
+ m_value->run(nullptr);
+ auto result = m_value->getResult();
+ return result->getResult(Result::SCALAR).toInt();
+}