aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node/repeaternode.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2020-01-30 01:27:07 +0100
committerRenaud G <renaud@rolisteam.org>2020-03-28 02:05:05 +0100
commit22d71d0032e2f44a8f267895aea3bd87864791b3 (patch)
tree39d244b5595ec8a174248313f021347d668973ed /node/repeaternode.cpp
parent57a32d7e0be949b174f16563d660e5a98231c57e (diff)
downloadOneRoll-22d71d0032e2f44a8f267895aea3bd87864791b3.tar.gz
OneRoll-22d71d0032e2f44a8f267895aea3bd87864791b3.zip
add unicity and repeat function part1
Diffstat (limited to 'node/repeaternode.cpp')
-rw-r--r--node/repeaternode.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/node/repeaternode.cpp b/node/repeaternode.cpp
new file mode 100644
index 0000000..09e88bd
--- /dev/null
+++ b/node/repeaternode.cpp
@@ -0,0 +1,116 @@
+/***************************************************************************
+ * Copyright (C) 2019 by Renaud Guezennec *
+ * http://www.rolisteam.org/contact *
+ * *
+ * This file is part of DiceParser *
+ * *
+ * DiceParser is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "node/repeaternode.h"
+
+#include "diceparserhelper.h"
+#include "executionnode.h"
+#include "parsingtoolbox.h"
+#include "result/stringresult.h"
+
+RepeaterNode::RepeaterNode() {}
+
+void RepeaterNode::run(ExecutionNode* previousNode)
+{
+ m_previousNode= previousNode;
+ m_times->run(this);
+ m_times= ParsingToolBox::getLeafNode(m_times);
+ auto times= m_times->getResult();
+ auto timeCount= times->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
+ auto cmd= m_cmd->getCopy();
+ for(int i= 0; i < timeCount; ++i)
+ {
+ m_cmd->run(this);
+ auto end= ParsingToolBox::getLeafNode(cmd);
+ auto result= end->getResult();
+
+ if(nullptr == result)
+ continue;
+
+ if(result->hasResultOfType(Dice::RESULT_TYPE::SCALAR))
+ {
+ if(m_sumAll)
+ {
+ auto res= new ScalarResult();
+
+ m_result= res;
+ }
+ else
+ {
+ auto res= new StringResult();
+ m_result= res;
+ }
+ }
+ else if(result->hasResultOfType(Dice::RESULT_TYPE::STRING))
+ {
+ auto res= new StringResult();
+
+ m_result= res;
+ }
+ else if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST))
+ {
+ if(m_sumAll)
+ {
+ auto res= new ScalarResult();
+
+ m_result= res;
+ }
+ else
+ {
+ auto res= new StringResult();
+
+ m_result= res;
+ }
+ }
+
+ cmd= m_cmd->getCopy();
+ }
+}
+
+QString RepeaterNode::toString(bool withLabel) const
+{
+ return withLabel ? QStringLiteral("") : QStringLiteral("");
+}
+
+qint64 RepeaterNode::getPriority() const
+{
+ return 4;
+}
+
+ExecutionNode* RepeaterNode::getCopy() const
+{
+ return nullptr;
+}
+
+void RepeaterNode::setCommand(ExecutionNode* cmd)
+{
+ m_cmd.reset(cmd);
+}
+
+void RepeaterNode::setTimeNode(ExecutionNode* time)
+{
+ m_times= time;
+}
+
+void RepeaterNode::setSumAll(bool b)
+{
+ m_sumAll= b;
+}