aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/diceparser.cpp
diff options
context:
space:
mode:
authorRobin Moussu <robin.moussu+git@gmail.com>2018-05-26 20:08:08 +0200
committerobiwankennedy <renaud@rolisteam.org>2018-06-01 13:53:00 +0200
commit0a9202c3ef0d3255ae3d57d0df68f7232396b580 (patch)
tree870a7fbaa421da1ada3a6e30ecf17d5dbc69a73a /diceparser.cpp
parent00b6a6a04b341d5a6332083425e3524349cef521 (diff)
downloadOneRoll-0a9202c3ef0d3255ae3d57d0df68f7232396b580.tar.gz
OneRoll-0a9202c3ef0d3255ae3d57d0df68f7232396b580.zip
add "R" (Reroll until) operator
Diffstat (limited to 'diceparser.cpp')
-rw-r--r--diceparser.cpp17
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;