aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorobiwankennedy <renaud@rolisteam.org>2018-04-23 13:41:46 +0200
committerobiwankennedy <renaud@rolisteam.org>2018-04-23 13:41:46 +0200
commitfd5728eb399e10514afd0bb55b73d504d50b7517 (patch)
treed40b0541ca91a56f6ec349c6d8569e8bb2b70d3a
parent4fa76667c4e7f31ed6b28eb43ad277ac448e0e71 (diff)
downloadOneRoll-fd5728eb399e10514afd0bb55b73d504d50b7517.tar.gz
OneRoll-fd5728eb399e10514afd0bb55b73d504d50b7517.zip
reroll dice with replacement by expression
-rw-r--r--node/rerolldicenode.cpp12
-rw-r--r--result/diceresult.cpp5
-rw-r--r--result/diceresult.h2
-rw-r--r--result/result.cpp5
-rw-r--r--result/result.h2
5 files changed, 24 insertions, 2 deletions
diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp
index f51eb9e..a24ffa9 100644
--- a/node/rerolldicenode.cpp
+++ b/node/rerolldicenode.cpp
@@ -33,9 +33,11 @@ void RerollDiceNode::run(ExecutionNode* previous)
//m_diceResult->setResultList(list);
QList<Die*>& list = m_diceResult->getResultList();
+ QList<Die*> toRemove;
- for(Die* die: list)
+ for(int i = 0; i < list.size() ; ++i)
{
+ auto die = list.at(i);
if(m_validator->hasValid(die,false))
{
if(m_instruction != nullptr)
@@ -47,8 +49,10 @@ void RerollDiceNode::run(ExecutionNode* previous)
auto lastResult = dynamic_cast<DiceResult*>(lastNode->getResult());
if(lastResult != nullptr)
{
+ toRemove.append(die);
list.append(lastResult->getResultList());
}
+ lastResult->clear();
}
}
else
@@ -58,6 +62,12 @@ void RerollDiceNode::run(ExecutionNode* previous)
}
}
+ for(auto die: toRemove)
+ {
+ list.removeOne(die);
+ }
+
+
if(nullptr!=m_nextNode)
{
m_nextNode->run(this);
diff --git a/result/diceresult.cpp b/result/diceresult.cpp
index b8ed8d5..ce59cb1 100644
--- a/result/diceresult.cpp
+++ b/result/diceresult.cpp
@@ -143,6 +143,11 @@ Die::ArithmeticOperator DiceResult::getOperator() const
return m_operator;
}
+void DiceResult::clear()
+{
+ m_diceValues.clear();
+}
+
void DiceResult::setOperator(const Die::ArithmeticOperator& dieOperator)
{
m_operator = dieOperator;
diff --git a/result/diceresult.h b/result/diceresult.h
index 3dac826..8ff041f 100644
--- a/result/diceresult.h
+++ b/result/diceresult.h
@@ -79,6 +79,8 @@ public:
void setOperator(const Die::ArithmeticOperator & dieOperator);
bool contains(Die *die, const std::function<bool (const Die *, const Die *)> equal);
+ void clear();
+
virtual Result* getCopy() const;
private:
qreal getScalarResult();
diff --git a/result/result.cpp b/result/result.cpp
index f79e004..8b4667b 100644
--- a/result/result.cpp
+++ b/result/result.cpp
@@ -45,7 +45,10 @@ bool Result::isStringResult() const
{
return false;
}
-
+void Result::clear()
+{
+
+}
bool Result::hasResultOfType(RESULT_TYPE type) const
{
return (m_resultTypes & type);
diff --git a/result/result.h b/result/result.h
index 5de3572..5fc4408 100644
--- a/result/result.h
+++ b/result/result.h
@@ -69,6 +69,8 @@ public:
*/
virtual bool isStringResult() const;
+ virtual void clear();
+
/**
* @brief getStringResult
* @return