aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/allsamenode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libparser/node/allsamenode.cpp')
-rw-r--r--src/libparser/node/allsamenode.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/libparser/node/allsamenode.cpp b/src/libparser/node/allsamenode.cpp
new file mode 100644
index 0000000..3b2f10f
--- /dev/null
+++ b/src/libparser/node/allsamenode.cpp
@@ -0,0 +1,86 @@
+#include "allsamenode.h"
+
+AllSameNode::AllSameNode() : m_diceResult(new DiceResult())
+{
+ m_result= m_diceResult;
+}
+
+void AllSameNode::run(ExecutionNode* previous)
+{
+ m_previousNode= previous;
+ if(nullptr != previous)
+ {
+ DiceResult* previous_result= dynamic_cast<DiceResult*>(previous->getResult());
+ if(nullptr != previous_result)
+ {
+ m_result->setPrevious(previous_result);
+ bool allSame= true;
+ int i= 0;
+ qint64 previousValue= 0;
+ if(previous_result->getResultList().size() < 2)
+ {
+ m_errors.insert(Dice::ERROR_CODE::ENDLESS_LOOP_ERROR,
+ QStringLiteral("T operator must operate on more than 1 die"));
+ return;
+ }
+ for(auto& die : previous_result->getResultList())
+ {
+ if(i == 0)
+ previousValue= die->getValue();
+ Die* tmpdie= new Die(*die);
+ m_diceResult->insertResult(tmpdie);
+ die->displayed();
+ if(previousValue != die->getValue())
+ allSame= false;
+ ++i;
+ }
+
+ while(allSame)
+ {
+ QList<Die*> list= m_diceResult->getResultList();
+ qint64 pValue= 0;
+ int i= 0;
+ for(auto& die : list)
+ {
+ die->roll(true);
+ if(i == 0)
+ pValue= die->getValue();
+ if(pValue != die->getValue())
+ allSame= false;
+ ++i;
+ }
+ }
+ }
+ }
+ if(nullptr != m_nextNode)
+ {
+ m_nextNode->run(this);
+ }
+}
+
+QString AllSameNode::toString(bool withLabel) const
+{
+ if(withLabel)
+ {
+ return QString("%1 [label=\"AllSameNode\"]").arg(m_id);
+ }
+ else
+ {
+ return m_id;
+ }
+}
+
+qint64 AllSameNode::getPriority() const
+{
+ qint64 priority= 0;
+ if(nullptr != m_nextNode)
+ {
+ priority= m_nextNode->getPriority();
+ }
+ return priority;
+}
+
+ExecutionNode* AllSameNode::getCopy() const
+{
+ return new AllSameNode();
+}