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/listsetrollnode.cpp | |
| parent | e4dc41cdc3ebb84ef7e42f5cf261e36fe874c901 (diff) | |
| download | OneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.tar.gz OneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.zip | |
Add execute node.
Diffstat (limited to 'src/libparser/node/listsetrollnode.cpp')
| -rw-r--r-- | src/libparser/node/listsetrollnode.cpp | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/src/libparser/node/listsetrollnode.cpp b/src/libparser/node/listsetrollnode.cpp index 4ea5b18..adb02ec 100644 --- a/src/libparser/node/listsetrollnode.cpp +++ b/src/libparser/node/listsetrollnode.cpp @@ -59,41 +59,34 @@ qint64 ListSetRollNode::getPriority() const void ListSetRollNode::run(ExecutionNode* previous) { m_previousNode= previous; - if(nullptr != previous) + if(isValid(!previous, Dice::ERROR_CODE::NO_PREVIOUS_ERROR, tr("No Previous node"))) + return; + + Result* result= previous->getResult(); + if(isValid(!result, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No Valid result"))) + return; + + quint64 diceCount= result->getResult(Dice::RESULT_TYPE::SCALAR).toReal(); + + if(isValid(diceCount > static_cast<quint64>(m_values.size()) && m_unique, Dice::ERROR_CODE::TOO_MANY_DICE, + tr("More unique values asked than possible values (L operator)"))) + return; + + m_result->setPrevious(result); + for(quint64 i= 0; i < diceCount; ++i) { - Result* result= previous->getResult(); - if(nullptr != result) + QStringList rollResult; + Die* die= new Die(); + computeFacesNumber(die); + die->roll(); + m_diceResult->insertResult(die); + getValueFromDie(die, rollResult); + for(auto const& str : std::as_const(rollResult)) { - quint64 diceCount= result->getResult(Dice::RESULT_TYPE::SCALAR).toReal(); - if(diceCount > static_cast<quint64>(m_values.size()) && m_unique) - { - m_errors.insert(Dice::ERROR_CODE::TOO_MANY_DICE, - tr("More unique values asked than possible values (L operator)")); - } - else - { - m_result->setPrevious(result); - for(quint64 i= 0; i < diceCount; ++i) - { - QStringList rollResult; - Die* die= new Die(); - computeFacesNumber(die); - die->roll(); - m_diceResult->insertResult(die); - getValueFromDie(die, rollResult); - for(auto const& str : qAsConst(rollResult)) - { - m_stringResult->addText(str); - } - } - m_stringResult->finished(); - } - if(nullptr != m_nextNode) - { - m_nextNode->run(this); - } + m_stringResult->addText(str); } } + m_stringResult->finished(); } void ListSetRollNode::setListValue(QStringList lirs) { |