aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/listsetrollnode.cpp
diff options
context:
space:
mode:
authorRenaud Guezennec <renaud@rolisteam.org>2024-10-23 15:42:08 +0200
committerRenaud Guezennec <renaud@rolisteam.org>2024-12-29 14:46:30 +0100
commitcb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea (patch)
treec261de4ad8d0f85aec0200bf500e9579437577df /src/libparser/node/listsetrollnode.cpp
parente4dc41cdc3ebb84ef7e42f5cf261e36fe874c901 (diff)
downloadOneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.tar.gz
OneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.zip
Add execute node.
Diffstat (limited to 'src/libparser/node/listsetrollnode.cpp')
-rw-r--r--src/libparser/node/listsetrollnode.cpp55
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)
{