aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2017-10-21 19:03:39 +0200
committerRenaud G <renaud@rolisteam.org>2017-10-21 19:03:39 +0200
commit046ff21b36d8b214923c5b8dc6f22bd65e49e669 (patch)
tree2b5999e3046cb135ea22d65940c2afb1c549a865 /node
parent6d216c231e8d4a6b97310f19c2083606886da81b (diff)
downloadOneRoll-046ff21b36d8b214923c5b8dc6f22bd65e49e669.tar.gz
OneRoll-046ff21b36d8b214923c5b8dc6f22bd65e49e669.zip
-adapt merge node to new way of several command.
Diffstat (limited to 'node')
-rw-r--r--node/mergenode.cpp70
-rw-r--r--node/mergenode.h7
2 files changed, 59 insertions, 18 deletions
diff --git a/node/mergenode.cpp b/node/mergenode.cpp
index f9960b9..1cf6062 100644
--- a/node/mergenode.cpp
+++ b/node/mergenode.cpp
@@ -29,38 +29,62 @@ MergeNode::MergeNode()
void MergeNode::run(ExecutionNode* previous)
{
m_previousNode = previous;
- if(NULL!=previous)
+ m_result->setPrevious(previous->getResult());
+ ExecutionNode* previousLast =nullptr;
+ for(auto start : *m_startList)
{
- m_result->setPrevious(previous->getResult());
-
- Result* tmpResult = previous->getResult();
- while(NULL!=tmpResult)
+ ExecutionNode* last = getLatestNode(start);
+ if(nullptr!=last)
{
- DiceResult* dice = dynamic_cast<DiceResult*>(tmpResult);
- if(NULL!=dice)
+ if(nullptr != previousLast)
+ {
+ auto startResult = start->getResult();
+ startResult->setPrevious(previousLast->getResult());
+ previousLast->setNextNode(start);
+ }
+ previousLast = last;
+ Result* tmpResult = last->getResult();
+ while(nullptr!=tmpResult)
{
- ///@todo improve here to set homogeneous while is really
- m_diceResult->setHomogeneous(false);
- for(Die* die : dice->getResultList())
+ DiceResult* dice = dynamic_cast<DiceResult*>(tmpResult);
+ if(nullptr!=dice)
{
- if(!m_diceResult->getResultList().contains(die))
+ ///@todo improve here to set homogeneous while is really
+ m_diceResult->setHomogeneous(false);
+ for(Die* die : dice->getResultList())
{
- Die* tmpdie = new Die();
- *tmpdie=*die;
- die->displayed();
- m_diceResult->getResultList().append(tmpdie);
+ if(!m_diceResult->getResultList().contains(die)&&(!die->hasBeenDisplayed()))
+ {
+ Die* tmpdie = new Die();
+ *tmpdie=*die;
+ die->displayed();
+ m_diceResult->getResultList().append(tmpdie);
+ }
}
}
+ tmpResult = tmpResult->getPrevious();
}
- tmpResult = tmpResult->getPrevious();
}
}
- if(NULL!=m_nextNode)
+
+ auto first = m_startList->first();
+ m_startList->clear();
+ m_startList->append(first);
+
+ if(nullptr!=m_nextNode)
{
m_nextNode->run(this);
}
}
-
+ExecutionNode* MergeNode::getLatestNode(ExecutionNode* node)
+{
+ ExecutionNode* next = node;
+ while(nullptr != next->getNextNode() && (next->getNextNode()!=this))
+ {
+ next = next->getNextNode();
+ }
+ return next;
+}
QString MergeNode::toString(bool withLabel) const
{
if(withLabel)
@@ -91,3 +115,13 @@ ExecutionNode* MergeNode::getCopy() const
return node;
}
+
+QList<ExecutionNode *>* MergeNode::getStartList() const
+{
+ return m_startList;
+}
+
+void MergeNode::setStartList(QList<ExecutionNode *>* startList)
+{
+ m_startList = startList;
+}
diff --git a/node/mergenode.h b/node/mergenode.h
index aebf9e2..0626fb2 100644
--- a/node/mergenode.h
+++ b/node/mergenode.h
@@ -36,8 +36,15 @@ public:
virtual QString toString(bool withLabel)const;
virtual qint64 getPriority() const;
virtual ExecutionNode *getCopy() const;
+ QList<ExecutionNode *>* getStartList() const;
+ void setStartList(QList<ExecutionNode *>* startList);
+
+private:
+ ExecutionNode *getLatestNode(ExecutionNode *node);
+
private:
DiceResult* m_diceResult;
+ QList<ExecutionNode *>* m_startList;
};
#endif // NUMBERNODE_H