diff options
Diffstat (limited to 'diceparser.cpp')
| -rw-r--r-- | diceparser.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/diceparser.cpp b/diceparser.cpp index c37d572..641cf21 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -69,6 +69,7 @@ DiceParser::DiceParser() m_OptionOp->insert(QStringLiteral("c"),Count); m_OptionOp->insert(QStringLiteral("r"),Reroll); m_OptionOp->insert(QStringLiteral("e"),Explode); + m_OptionOp->insert(QStringLiteral("R"),RerollUntil); m_OptionOp->insert(QStringLiteral("a"),RerollAndAdd); m_OptionOp->insert(QStringLiteral("m"),Merge); m_OptionOp->insert(QStringLiteral("i"),ifOperator); @@ -1048,7 +1049,9 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//, } break; case Reroll: + case RerollUntil: case RerollAndAdd: + // Todo: I think that Exploding and Rerolling could share the same code { Validator* validator = m_parsingToolbox->readCompositeValidator(str); if(nullptr!=validator) @@ -1058,16 +1061,10 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//, m_errorMap.insert(ExecutionNode::BAD_SYNTAXE,QObject::tr("Validator is missing after the %1 operator. Please, change it") .arg(operatorName == Reroll ? "r" : "a" )); } - RerollDiceNode* rerollNode = new RerollDiceNode(); - ExecutionNode* nodeParam = nullptr; - if(readParameterNode(str,nodeParam)) - { - rerollNode->setInstruction(nodeParam); - } - if(m_OptionOp->value(key)==RerollAndAdd) - { - rerollNode->setAddingMode(true); - } + + auto reroll = (operatorName==RerollAndAdd || operatorName==Reroll); + auto addingMode = (operatorName==RerollAndAdd); + RerollDiceNode* rerollNode = new RerollDiceNode(reroll, addingMode); rerollNode->setValidator(validator); previous->setNextNode(rerollNode); node = rerollNode; |