diff options
| author | 2019-12-18 23:45:55 +0100 | |
|---|---|---|
| committer | 2019-12-22 01:19:23 +0100 | |
| commit | ad990b921d0d7dd67581369e98fa74209424edd9 (patch) | |
| tree | d2d26904a60772e0eecbb9c3327c135cc18c0808 | |
| parent | e285f99759c3edd2d7d0cb4ff4280b5d2fd984da (diff) | |
| download | OneRoll-ad990b921d0d7dd67581369e98fa74209424edd9.tar.gz OneRoll-ad990b921d0d7dd67581369e98fa74209424edd9.zip | |
fix [2,2,4,2]i[=4]{-4} command
| -rw-r--r-- | node/ifnode.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/node/ifnode.cpp b/node/ifnode.cpp index 1c28555..43d055c 100644 --- a/node/ifnode.cpp +++ b/node/ifnode.cpp @@ -79,6 +79,7 @@ DiceResult* getFirstDiceResult(Result* result) return found; } +// IfNode::IfNode() : m_validator(nullptr), m_conditionType(AllOfThem), m_true(nullptr), m_false(nullptr) { @@ -116,10 +117,12 @@ void IfNode::run(ExecutionNode* previous) if(m_conditionType == OnEach) { + auto diceResult= new DiceResult; for(Die* dice : diceList) { auto diceNode= new PartialDiceRollNode(); - diceNode->insertDie(new Die(*dice)); + auto cpyDice= new Die(*dice); + diceNode->insertDie(cpyDice); if(m_validator->hasValid(dice, true, true)) { nextNode= (nullptr == m_true) ? nullptr : m_true->getCopy(); @@ -135,15 +138,26 @@ void IfNode::run(ExecutionNode* previous) { previousLoop->setNextNode(nextNode); } - if(nullptr == m_nextNode) - { - m_nextNode= nextNode; - } diceNode->setNextNode(nextNode); diceNode->run(previousLoop); previousLoop= getLeafNode(nextNode); } + + if(nullptr == nextNode) + { + diceResult->insertResult(cpyDice); + } + else + { + delete cpyDice; + auto branchResult= previousLoop->getResult(); + auto val= branchResult->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); + auto valDie= new Die(); + valDie->insertRollValue(val); + diceResult->insertResult(valDie); + } } + m_result= diceResult; } else if((m_conditionType == OneOfThem) || (m_conditionType == AllOfThem)) { |