aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node/rerolldicenode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/rerolldicenode.cpp')
-rw-r--r--node/rerolldicenode.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp
index 56ee6d9..70475a5 100644
--- a/node/rerolldicenode.cpp
+++ b/node/rerolldicenode.cpp
@@ -1,5 +1,6 @@
#include "rerolldicenode.h"
#include "parsingtoolbox.h"
+#include <utility>
RerollDiceNode::RerollDiceNode(bool reroll, bool addingMode)
: m_diceResult(new DiceResult()), m_validator(nullptr), m_reroll(reroll), m_adding(addingMode)
@@ -26,7 +27,6 @@ void RerollDiceNode::run(ExecutionNode* previous)
for(auto& die : previous_result->getResultList())
{
Die* tmpdie= new Die(*die);
- //*tmpdie= *die;
m_diceResult->insertResult(tmpdie);
die->displayed();
}
@@ -35,10 +35,22 @@ void RerollDiceNode::run(ExecutionNode* previous)
QList<Die*>& list= m_diceResult->getResultList();
QList<Die*> toRemove;
- for(int i= 0; i < list.size(); ++i)
+ for(auto& die : list)
{
- auto die= list.at(i);
bool finished= false;
+ auto state
+ = m_validator->isValidRangeSize(std::make_pair<qint64, qint64>(die->getBase(), die->getMaxValue()));
+ if((Dice::CONDITION_STATE::ALWAYSTRUE == state && m_adding)
+ || (!m_reroll && !m_adding && state == Dice::CONDITION_STATE::UNREACHABLE))
+ {
+ m_errors.insert(Dice::ERROR_CODE::ENDLESS_LOOP_ERROR,
+ QObject::tr("Condition (%1) cause an endless loop with this dice: %2")
+ .arg(toString(true))
+ .arg(QStringLiteral("d[%1,%2]")
+ .arg(static_cast<int>(die->getBase()))
+ .arg(static_cast<int>(die->getMaxValue()))));
+ continue;
+ }
while(m_validator->hasValid(die, false) && !finished)
{
if(m_instruction != nullptr)
@@ -52,8 +64,8 @@ void RerollDiceNode::run(ExecutionNode* previous)
{
toRemove.append(die);
list.append(lastResult->getResultList());
+ lastResult->clear();
}
- lastResult->clear();
}
}
else
@@ -79,7 +91,8 @@ void RerollDiceNode::run(ExecutionNode* previous)
}
else
{
- m_errors.insert(ExecutionNode::DIE_RESULT_EXPECTED,
+ m_errors.insert(
+ Dice::ERROR_CODE::DIE_RESULT_EXPECTED,
QObject::tr(
" The a operator expects dice result. Please check the documentation and fix your command."));
}