aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node/listsetrollnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/listsetrollnode.cpp')
-rw-r--r--node/listsetrollnode.cpp190
1 files changed, 0 insertions, 190 deletions
diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp
deleted file mode 100644
index 2cee645..0000000
--- a/node/listsetrollnode.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-/*************************************************************************
- * Copyright (C) 2009 by Renaud Guezennec *
- * *
- * https://rolisteam.org/ *
- * *
- * rolisteam 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 "listsetrollnode.h"
-#include "die.h"
-
-#include <QDebug>
-
-ListSetRollNode::ListSetRollNode() : m_diceResult(new DiceResult()), m_stringResult(new StringResult()), m_unique(false)
-{
- m_result= m_stringResult;
-}
-ListSetRollNode::~ListSetRollNode()
-{
- if(nullptr != m_diceResult)
- {
- delete m_diceResult;
- m_diceResult= nullptr;
- }
-}
-
-QStringList ListSetRollNode::getList() const
-{
- return m_values;
-}
-QString ListSetRollNode::toString(bool wl) const
-{
- if(wl)
- {
- return QString("%1 [label=\"ListSetRoll list:%2\"]").arg(m_id, m_values.join(","));
- }
- else
- {
- return m_id;
- }
-}
-qint64 ListSetRollNode::getPriority() const
-{
- qint64 priority= 4;
- return priority;
-}
-void ListSetRollNode::run(ExecutionNode* previous)
-{
- m_previousNode= previous;
- if(nullptr != previous)
- {
- Result* result= previous->getResult();
- if(nullptr != result)
- {
- quint64 diceCount= result->getResult(Dice::RESULT_TYPE::SCALAR).toReal();
- if(diceCount > static_cast<quint64>(m_values.size()) && m_unique)
- {
- m_errors.insert(Dice::ERROR_CODE::TOO_MANY_DICE,
- QObject::tr("More unique values asked than possible values (L operator)"));
- }
- else
- {
- m_result->setPrevious(result);
- for(quint64 i= 0; i < diceCount; ++i)
- {
- QStringList rollResult;
- Die* die= new Die();
- computeFacesNumber(die);
- die->roll();
- m_diceResult->insertResult(die);
- getValueFromDie(die, rollResult);
- for(auto const& str : qAsConst(rollResult))
- {
- m_stringResult->addText(str);
- }
- }
- m_stringResult->finished();
- }
- if(nullptr != m_nextNode)
- {
- m_nextNode->run(this);
- }
- }
- }
-}
-void ListSetRollNode::setListValue(QStringList lirs)
-{
- m_values= lirs;
-}
-void ListSetRollNode::setUnique(bool u)
-{
- m_unique= u;
-}
-void ListSetRollNode::setNoComma(bool b)
-{
- if(m_stringResult)
- m_stringResult->setNoComma(b);
-}
-void ListSetRollNode::setRangeList(QList<Range>& ranges)
-{
- m_rangeList= ranges;
-}
-void ListSetRollNode::computeFacesNumber(Die* die)
-{
- if(m_rangeList.isEmpty())
- {
- die->setMaxValue(m_values.size());
- }
- else
- {
- Q_ASSERT(m_values.size() == m_rangeList.size());
- qint64 max;
- int i= 0;
- for(Range& range : m_rangeList)
- {
- if(((i == 0) || (max < range.getEnd())) && (range.isFullyDefined()))
- {
- max= range.getEnd();
- }
- ++i;
- }
- die->setMaxValue(max);
- }
-}
-void ListSetRollNode::getValueFromDie(Die* die, QStringList& rollResult)
-{
- if(m_rangeList.isEmpty())
- {
- if(die->getValue() - 1 < m_values.size())
- {
- auto str= m_values[die->getValue() - 1];
- while(m_unique && rollResult.contains(str))
- {
- die->roll(false);
- str= m_values[die->getValue() - 1];
- }
- rollResult << str;
- }
- }
- else
- {
- Q_ASSERT(m_values.size() == m_rangeList.size());
- bool found= false;
- while(!found)
- {
- int i= 0;
- for(Range& range : m_rangeList)
- {
- auto it= std::find(m_rangeIndexResult.begin(), m_rangeIndexResult.end(), i);
- auto isValid= range.hasValid(die, false);
- if((isValid && !m_unique) || (isValid && it == m_rangeIndexResult.end()))
- {
- m_rangeIndexResult.push_back(i);
- rollResult << m_values[i];
- found= true;
- }
- ++i;
- }
- if(!found)
- {
- die->roll(false);
- }
- }
- }
-}
-ExecutionNode* ListSetRollNode::getCopy() const
-{
- ListSetRollNode* node= new ListSetRollNode();
- QList<Range> dataList= m_rangeList;
- node->setRangeList(dataList);
- node->setUnique(m_unique);
- node->setListValue(m_values);
- if(nullptr != m_nextNode)
- {
- node->setNextNode(m_nextNode->getCopy());
- }
- return node;
-}