aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/operationcondition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'operationcondition.cpp')
-rw-r--r--operationcondition.cpp167
1 files changed, 0 insertions, 167 deletions
diff --git a/operationcondition.cpp b/operationcondition.cpp
deleted file mode 100644
index 70ebab4..0000000
--- a/operationcondition.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2015 by Renaud Guezennec *
- * https://rolisteam.org/contact *
- * *
- * 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 "operationcondition.h"
-
-OperationCondition::OperationCondition()
- : m_operator(Dice::ConditionOperator::Modulo), m_boolean(nullptr), m_value(nullptr)
-{
-}
-OperationCondition::~OperationCondition()
-{
- if(m_value != nullptr)
- {
- delete m_value;
- m_value= nullptr;
- }
-}
-BooleanCondition* OperationCondition::getBoolean() const
-{
- return m_boolean;
-}
-
-void OperationCondition::setBoolean(BooleanCondition* boolean)
-{
- m_boolean= boolean;
-}
-
-qint64 OperationCondition::hasValid(Die* b, bool recursive, bool unhighlight) const
-{
- if(nullptr == m_boolean)
- {
- return 0;
- }
- QList<qint64> listValues;
- if(recursive)
- {
- listValues= b->getListValue();
- }
- else
- {
- listValues.append(b->getLastRolledValue());
- }
-
- qint64 sum= 0;
- for(qint64& value : listValues)
- {
- switch(m_operator)
- {
- case Dice::ConditionOperator::Modulo:
- {
- Die die;
- die.setMaxValue(b->getMaxValue());
- auto valueScalar= valueToScalar();
- if(valueScalar == 0)
- valueScalar= 1;
- die.insertRollValue(value % valueScalar);
- sum+= m_boolean->hasValid(&die, recursive, false) ? 1 : 0;
- }
- break;
- }
- }
- if((unhighlight) && (sum == 0))
- {
- b->setHighlighted(false);
- }
- else
- {
- b->setHighlighted(true);
- }
-
- return sum;
-}
-
-void OperationCondition::setOperator(Dice::ConditionOperator m)
-{
- m_operator= m;
-}
-
-void OperationCondition::setValueNode(ExecutionNode* node)
-{
- m_value= node;
-}
-
-QString OperationCondition::toString()
-{
- QString str("");
- switch(m_operator)
- {
- case Dice::ConditionOperator::Modulo:
- str.append(QStringLiteral("\\%"));
- break;
- }
- return QStringLiteral("[%1%2%3]").arg(str).arg(valueToScalar()).arg(m_boolean->toString());
-}
-Dice::CONDITION_STATE OperationCondition::isValidRangeSize(const std::pair<qint64, qint64>& range) const
-{
- Dice::CONDITION_STATE valid= Dice::CONDITION_STATE::REACHABLE;
-
- auto rangeIsClose= (range.first == range.second);
-
- Die die;
- die.insertRollValue(range.first);
-
- if(nullptr == m_boolean)
- return Dice::CONDITION_STATE::ERROR_STATE;
-
- if(rangeIsClose && m_boolean->hasValid(&die, false, false))
- valid= Dice::CONDITION_STATE::ALWAYSTRUE;
- else if(rangeIsClose && !m_boolean->hasValid(&die, false, false))
- valid= Dice::CONDITION_STATE::UNREACHABLE;
-
- return valid;
-}
-
-Validator* OperationCondition::getCopy() const
-{
- OperationCondition* val= new OperationCondition();
- val->setOperator(m_operator);
- val->setValueNode(m_value->getCopy());
- BooleanCondition* boolean= dynamic_cast<BooleanCondition*>(m_boolean->getCopy());
- val->setBoolean(boolean);
- return val;
-}
-
-qint64 OperationCondition::valueToScalar() const
-{
- if(m_value == nullptr)
- return 0;
-
- m_value->run(nullptr);
- auto result= m_value->getResult();
- return result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
-}
-
-const std::set<qint64>& OperationCondition::getPossibleValues(const std::pair<qint64, qint64>& range)
-{
- if(nullptr == m_boolean)
- return m_values;
-
- for(qint64 i= std::min(range.first, range.second); i <= std::max(range.first, range.second); ++i)
- {
- auto valueScalar= valueToScalar();
- auto val= i % valueScalar;
- Die die;
- die.insertRollValue(val);
- if(m_boolean->hasValid(&die, false, false))
- m_values.insert(i);
- }
- return m_values;
-}