aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2019-12-18 23:45:55 +0100
committerRenaud G <renaud@rolisteam.org>2019-12-22 01:19:23 +0100
commitad990b921d0d7dd67581369e98fa74209424edd9 (patch)
treed2d26904a60772e0eecbb9c3327c135cc18c0808 /node
parente285f99759c3edd2d7d0cb4ff4280b5d2fd984da (diff)
downloadOneRoll-ad990b921d0d7dd67581369e98fa74209424edd9.tar.gz
OneRoll-ad990b921d0d7dd67581369e98fa74209424edd9.zip
fix [2,2,4,2]i[=4]{-4} command
Diffstat (limited to 'node')
-rw-r--r--node/ifnode.cpp24
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))
{