diff options
| author | 2024-10-23 15:42:08 +0200 | |
|---|---|---|
| committer | 2024-12-29 14:46:30 +0100 | |
| commit | cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea (patch) | |
| tree | c261de4ad8d0f85aec0200bf500e9579437577df /src/libparser/node/allsamenode.cpp | |
| parent | e4dc41cdc3ebb84ef7e42f5cf261e36fe874c901 (diff) | |
| download | OneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.tar.gz OneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.zip | |
Add execute node.
Diffstat (limited to 'src/libparser/node/allsamenode.cpp')
| -rw-r--r-- | src/libparser/node/allsamenode.cpp | 82 |
1 files changed, 38 insertions, 44 deletions
diff --git a/src/libparser/node/allsamenode.cpp b/src/libparser/node/allsamenode.cpp index 3b2f10f..2303b78 100644 --- a/src/libparser/node/allsamenode.cpp +++ b/src/libparser/node/allsamenode.cpp @@ -8,53 +8,47 @@ AllSameNode::AllSameNode() : m_diceResult(new 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; - } + if(isValid(!m_previousNode, Dice::ERROR_CODE::NO_PREVIOUS_ERROR, tr("No valid previous node"))) + return; - 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; - } - } - } + DiceResult* previous_result= dynamic_cast<DiceResult*>(previous->getResult()); + if(isValid(!previous_result, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No dice result"))) + return; + + m_result->setPrevious(previous_result); + bool allSame= true; + int i= 0; + qint64 previousValue= 0; + if(isValid(previous_result->getResultList().size() < 2, 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; } - if(nullptr != m_nextNode) + + while(allSame) { - m_nextNode->run(this); + 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; + } } } |