aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/keepdiceexecnode.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/keepdiceexecnode.cpp
parente4dc41cdc3ebb84ef7e42f5cf261e36fe874c901 (diff)
downloadOneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.tar.gz
OneRoll-cb1dcb5ee28994a2cd691ad696a5ba4c3c3802ea.zip
Add execute node.
Diffstat (limited to 'src/libparser/node/keepdiceexecnode.cpp')
-rw-r--r--src/libparser/node/keepdiceexecnode.cpp67
1 files changed, 31 insertions, 36 deletions
diff --git a/src/libparser/node/keepdiceexecnode.cpp b/src/libparser/node/keepdiceexecnode.cpp
index b197822..b4547c3 100644
--- a/src/libparser/node/keepdiceexecnode.cpp
+++ b/src/libparser/node/keepdiceexecnode.cpp
@@ -31,11 +31,10 @@ KeepDiceExecNode::~KeepDiceExecNode() {}
void KeepDiceExecNode::run(ExecutionNode* previous)
{
m_previousNode= previous;
- if(nullptr == previous || nullptr == m_numberOfDiceNode)
- {
+ if(isValid(!previous || !m_numberOfDiceNode, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No Valid result")))
return;
- }
- m_numberOfDiceNode->run(previous);
+
+ m_numberOfDiceNode->execute(previous);
auto lastnode= ParsingToolBox::getLeafNode(m_numberOfDiceNode);
if(nullptr == lastnode)
return;
@@ -49,45 +48,41 @@ void KeepDiceExecNode::run(ExecutionNode* previous)
DiceResult* previousDiceResult= dynamic_cast<DiceResult*>(previous->getResult());
m_result->setPrevious(previousDiceResult);
- if(nullptr != previousDiceResult)
- {
- QList<Die*> diceList= previousDiceResult->getResultList();
- if(numberOfDice < 0)
- {
- numberOfDice= diceList.size() + numberOfDice;
- }
+ if(isValid(!previousDiceResult, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No Valid result")))
+ return;
+
+ QList<Die*> diceList= previousDiceResult->getResultList();
- QList<Die*> diceList3= diceList.mid(0, static_cast<int>(numberOfDice));
- QList<Die*> diceList2;
+ if(numberOfDice < 0)
+ {
+ numberOfDice= diceList.size() + numberOfDice;
+ }
- for(Die* die : qAsConst(diceList3))
- {
- Die* tmpdie= new Die(*die);
- diceList2.append(tmpdie);
- die->displayed();
- die->setSelected(false);
- }
+ QList<Die*> diceList3= diceList.mid(0, static_cast<int>(numberOfDice));
+ QList<Die*> diceList2;
- if(numberOfDice > static_cast<qint64>(diceList.size()))
- {
- m_errors.insert(Dice::ERROR_CODE::TOO_MANY_DICE,
- QObject::tr(" You ask to keep %1 dice but the result only has %2")
- .arg(numberOfDice)
- .arg(diceList.size()));
- }
+ for(Die* die : std::as_const(diceList3))
+ {
+ Die* tmpdie= new Die(*die);
+ diceList2.append(tmpdie);
+ die->displayed();
+ die->setSelected(false);
+ }
- for(auto& tmp : diceList.mid(static_cast<int>(numberOfDice), -1))
- {
- tmp->setHighlighted(false);
- }
+ if(numberOfDice > static_cast<qint64>(diceList.size()))
+ {
+ m_errors.insert(
+ Dice::ERROR_CODE::TOO_MANY_DICE,
+ QObject::tr(" You ask to keep %1 dice but the result only has %2").arg(numberOfDice).arg(diceList.size()));
+ }
- m_diceResult->setResultList(diceList2);
- if(nullptr != m_nextNode)
- {
- m_nextNode->run(this);
- }
+ for(auto& tmp : diceList.mid(static_cast<int>(numberOfDice), -1))
+ {
+ tmp->setHighlighted(false);
}
+
+ m_diceResult->setResultList(diceList2);
}
void KeepDiceExecNode::setDiceKeepNumber(ExecutionNode* n)