aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/booleancondition.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 /booleancondition.cpp
parent5ff5516c8cab5599375234a9a1898b737e8541f2 (diff)
downloadOneRoll-23900ee4a93c79451425864f2743a856d57461b9.tar.gz
OneRoll-23900ee4a93c79451425864f2743a856d57461b9.zip
-Add node as parameter of condition
Diffstat (limited to 'booleancondition.cpp')
-rw-r--r--booleancondition.cpp46
1 files changed, 31 insertions, 15 deletions
diff --git a/booleancondition.cpp b/booleancondition.cpp
index 5b2212f..83e4ee9 100644
--- a/booleancondition.cpp
+++ b/booleancondition.cpp
@@ -26,6 +26,15 @@ BooleanCondition::BooleanCondition()
: m_operator(Equal)
{
}
+
+BooleanCondition::~BooleanCondition()
+{
+ if(m_value!= nullptr)
+ {
+ delete m_value;
+ m_value = nullptr;
+ }
+}
qint64 BooleanCondition::hasValid(Die* b,bool recursive,bool unhighlight) const
{
QList<qint64> listValues;
@@ -39,27 +48,28 @@ qint64 BooleanCondition::hasValid(Die* b,bool recursive,bool unhighlight) const
}
qint64 sum= 0;
+ auto valueScalar = valueToScalar();
for(qint64 value: listValues)
{
switch(m_operator)
{
case Equal:
- sum+=(value==m_value)?1:0;
+ sum+=(value==valueScalar)?1:0;
break;
case GreaterThan:
- sum+= (value>m_value)?1:0;
+ sum+= (value>valueScalar)?1:0;
break;
case LesserThan:
- sum+= (value<m_value)?1:0;
+ sum+= (value<valueScalar)?1:0;
break;
case GreaterOrEqual:
- sum+= (value>=m_value)?1:0;
+ sum+= (value>=valueScalar)?1:0;
break;
case LesserOrEqual:
- sum+= (value<=m_value)?1:0;
+ sum+= (value<=valueScalar)?1:0;
break;
case Different:
- sum+= (value!=m_value)?1:0;
+ sum+= (value!=valueScalar)?1:0;
break;
}
}
@@ -80,7 +90,7 @@ void BooleanCondition::setOperator(LogicOperator m)
m_operator = m;
}
-void BooleanCondition::setValue(qint64 v)
+void BooleanCondition::setValueNode(ExecutionNode* v)
{
m_value=v;
}
@@ -108,7 +118,7 @@ QString BooleanCondition::toString()
str.append(QStringLiteral("!="));
break;
}
- return QStringLiteral("[%1%2]").arg(str).arg(m_value);
+ return QStringLiteral("[%1%2]").arg(str).arg(valueToScalar());
}
quint64 BooleanCondition::getValidRangeSize(quint64 faces) const
{
@@ -117,13 +127,13 @@ quint64 BooleanCondition::getValidRangeSize(quint64 faces) const
case Equal:
return 1;
case GreaterThan:
- return faces-m_value;
+ return faces-valueToScalar();
case LesserThan:
- return m_value-1;
+ return valueToScalar()-1;
case GreaterOrEqual:
- return faces-(m_value-1);
+ return faces-(valueToScalar()-1);
case LesserOrEqual:
- return m_value;
+ return valueToScalar();
case Different:
return faces-1;
}
@@ -133,9 +143,15 @@ Validator* BooleanCondition::getCopy() const
{
BooleanCondition* val = new BooleanCondition();
val->setOperator(m_operator);
- val->setValue(m_value);
-
-
+ val->setValueNode(m_value);
return val;
+}
+qint64 BooleanCondition::valueToScalar() const
+{
+ if(m_value == nullptr)
+ return 0;
+ m_value->run(nullptr);
+ auto result = m_value->getResult();
+ return result->getResult(Result::SCALAR).toInt();
}