From 4950fee9569525f59624651ba2a267e4e4324220 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Wed, 18 May 2022 22:56:53 +0200 Subject: Manage scalar result in front of Switch/Case Fix #144 --- src/libparser/node/switchcasenode.cpp | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/libparser/node/switchcasenode.cpp b/src/libparser/node/switchcasenode.cpp index 880fa4d..c48d81f 100644 --- a/src/libparser/node/switchcasenode.cpp +++ b/src/libparser/node/switchcasenode.cpp @@ -22,6 +22,7 @@ #include "stringresult.h" #include #include +#include SwitchCaseNode::SwitchCaseNode() : m_stringResult(new StringResult) { @@ -56,7 +57,6 @@ void SwitchCaseNode::run(ExecutionNode* previous) auto diceResult= dynamic_cast(previousResult); - QSet alreadyValidDice; QStringList finalResultList; if(diceResult) { @@ -93,6 +93,41 @@ void SwitchCaseNode::run(ExecutionNode* previous) finalResultList << resultList; } } + else + { + auto scalar= previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(); + for(auto const& info : qAsConst(m_branchList)) + { + if(m_stopAtFirst && !finalResultList.isEmpty()) + break; + + if(info->validatorList) + { + auto die= std::make_unique(); + die->insertRollValue(scalar); + if(info->validatorList->hasValid(die.get(), true)) + { + auto lastNode= ParsingToolBox::getLeafNode(info->node); + if(lastNode && lastNode->getResult()) + { + finalResultList << lastNode->getResult()->getStringResult(); + } + } + } + else if(finalResultList.isEmpty()) + { + info->node->run(m_previousNode); + auto lastNode= ParsingToolBox::getLeafNode(info->node); + if(lastNode && lastNode->getResult()) + { + finalResultList << lastNode->getResult()->getStringResult(); + } + else + finalResultList << QString(); + } + } + } + for(auto const& str : qAsConst(finalResultList)) m_stringResult->addText(str); -- cgit v1.2.3-70-g09d2