diff options
| author | 2018-05-26 20:08:08 +0200 | |
|---|---|---|
| committer | 2018-06-01 13:53:00 +0200 | |
| commit | 0a9202c3ef0d3255ae3d57d0df68f7232396b580 (patch) | |
| tree | 870a7fbaa421da1ada3a6e30ecf17d5dbc69a73a /diceparser.cpp | |
| parent | 00b6a6a04b341d5a6332083425e3524349cef521 (diff) | |
| download | OneRoll-0a9202c3ef0d3255ae3d57d0df68f7232396b580.tar.gz OneRoll-0a9202c3ef0d3255ae3d57d0df68f7232396b580.zip | |
add "R" (Reroll until) operator
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; |