From 0a9202c3ef0d3255ae3d57d0df68f7232396b580 Mon Sep 17 00:00:00 2001 From: Robin Moussu Date: Sat, 26 May 2018 20:08:08 +0200 Subject: add "R" (Reroll until) operator --- diceparser.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'diceparser.cpp') 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; -- cgit v1.2.3-70-g09d2