From 653ba9395a36cc20ec1d68c9a9cae78973fa334c Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 30 Jan 2020 01:27:15 +0100 Subject: add unicity and repeat function part2 --- node/explodedicenode.cpp | 49 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) (limited to 'node/explodedicenode.cpp') diff --git a/node/explodedicenode.cpp b/node/explodedicenode.cpp index 2292a05..1546883 100644 --- a/node/explodedicenode.cpp +++ b/node/explodedicenode.cpp @@ -1,6 +1,7 @@ #include "explodedicenode.h" +#include "validatorlist.h" -ExplodeDiceNode::ExplodeDiceNode() : m_diceResult(new DiceResult()), m_validator(nullptr) +ExplodeDiceNode::ExplodeDiceNode() : m_diceResult(new DiceResult()) { m_result= m_diceResult; } @@ -13,19 +14,22 @@ void ExplodeDiceNode::run(ExecutionNode* previous) m_result->setPrevious(previous_result); if(nullptr != previous_result) { + Die* exampleDie; for(auto& die : previous_result->getResultList()) { Die* tmpdie= new Die(*die); m_diceResult->insertResult(tmpdie); die->displayed(); + exampleDie= tmpdie; } - QList list= m_diceResult->getResultList(); + // QList list= m_diceResult->getResultList(); - for(auto& die : list) - { + bool hasExploded= false; + std::function f= [&hasExploded, this](Die* die, qint64) { if(Dice::CONDITION_STATE::ALWAYSTRUE - == m_validator->isValidRangeSize(std::make_pair(die->getBase(), die->getMaxValue()))) + == m_validatorList->isValidRangeSize( + std::make_pair(die->getBase(), die->getMaxValue()))) { m_errors.insert(Dice::ERROR_CODE::ENDLESS_LOOP_ERROR, QObject::tr("Condition (%1) cause an endless loop with this dice: %2") @@ -33,14 +37,31 @@ void ExplodeDiceNode::run(ExecutionNode* previous) .arg(QStringLiteral("d[%1,%2]") .arg(static_cast(die->getBase())) .arg(static_cast(die->getMaxValue())))); + } + hasExploded= true; + die->roll(true); + }; + do + { + hasExploded= false; + m_validatorList->validResult(m_diceResult, false, false, f); + } while(hasExploded); + + /*for(auto& die : list) + { + if(Dice::CONDITION_STATE::ALWAYSTRUE + == m_validatorList->isValidRangeSize( + std::make_pair(die->getBase(), die->getMaxValue()))) + { + continue; } - while(m_validator->hasValid(die, false)) + while(m_validatorList->hasValid(die, false)) { die->roll(true); } - } + }*/ if(nullptr != m_nextNode) { @@ -51,20 +72,20 @@ void ExplodeDiceNode::run(ExecutionNode* previous) } ExplodeDiceNode::~ExplodeDiceNode() { - if(nullptr != m_validator) + if(nullptr != m_validatorList) { - delete m_validator; + delete m_validatorList; } } -void ExplodeDiceNode::setValidator(Validator* val) +void ExplodeDiceNode::setValidatorList(ValidatorList* val) { - m_validator= val; + m_validatorList= val; } QString ExplodeDiceNode::toString(bool withlabel) const { if(withlabel) { - return QString("%1 [label=\"ExplodeDiceNode %2\"]").arg(m_id, m_validator->toString()); + return QString("%1 [label=\"ExplodeDiceNode %2\"]").arg(m_id, m_validatorList->toString()); } else { @@ -84,9 +105,9 @@ qint64 ExplodeDiceNode::getPriority() const ExecutionNode* ExplodeDiceNode::getCopy() const { ExplodeDiceNode* node= new ExplodeDiceNode(); - if(nullptr != m_validator) + if(nullptr != m_validatorList) { - node->setValidator(m_validator->getCopy()); + node->setValidatorList(m_validatorList->getCopy()); } if(nullptr != m_nextNode) { -- cgit v1.2.3-70-g09d2