diff options
| author | 2018-04-23 13:41:46 +0200 | |
|---|---|---|
| committer | 2018-04-23 13:41:46 +0200 | |
| commit | fd5728eb399e10514afd0bb55b73d504d50b7517 (patch) | |
| tree | d40b0541ca91a56f6ec349c6d8569e8bb2b70d3a | |
| parent | 4fa76667c4e7f31ed6b28eb43ad277ac448e0e71 (diff) | |
| download | OneRoll-fd5728eb399e10514afd0bb55b73d504d50b7517.tar.gz OneRoll-fd5728eb399e10514afd0bb55b73d504d50b7517.zip | |
reroll dice with replacement by expression
| -rw-r--r-- | node/rerolldicenode.cpp | 12 | ||||
| -rw-r--r-- | result/diceresult.cpp | 5 | ||||
| -rw-r--r-- | result/diceresult.h | 2 | ||||
| -rw-r--r-- | result/result.cpp | 5 | ||||
| -rw-r--r-- | result/result.h | 2 |
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 |