implement random nodes
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#include "RandomDecimalNode.hpp"
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.inl>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericData.hpp>
|
||||
|
||||
#include <QRandomGenerator>
|
||||
|
||||
using namespace noggit::Red::NodeEditor::Nodes;
|
||||
|
||||
RandomDecimalNode::RandomDecimalNode()
|
||||
: BaseNode()
|
||||
{
|
||||
setName("RandomDecimalNode");
|
||||
setCaption("Random Decimal");
|
||||
_validation_state = NodeValidationState::Valid;
|
||||
|
||||
addPortDefault<IntegerData>(PortType::In, "Seed", true);
|
||||
addPort<DecimalData>(PortType::Out, "Decimal", true);
|
||||
}
|
||||
|
||||
void RandomDecimalNode::compute()
|
||||
{
|
||||
QRandomGenerator rand;
|
||||
rand.seed(defaultPortData<IntegerData>(PortType::In, 0)->value());
|
||||
|
||||
_out_ports[0].out_value = std::make_shared<DecimalData>(rand.generateDouble());
|
||||
|
||||
Q_EMIT dataUpdated(0);
|
||||
}
|
||||
|
||||
QJsonObject RandomDecimalNode::save() const
|
||||
{
|
||||
QJsonObject json_obj = BaseNode::save();
|
||||
|
||||
defaultWidgetToJson(PortType::In, 0, json_obj, "seed");
|
||||
|
||||
return json_obj;
|
||||
}
|
||||
|
||||
void RandomDecimalNode::restore(const QJsonObject& json_obj)
|
||||
{
|
||||
BaseNode::restore(json_obj);
|
||||
|
||||
defaultWidgetFromJson(PortType::In, 0, json_obj, "seed");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#ifndef NOGGIT_RANDOMDECIMALNODE_HPP
|
||||
#define NOGGIT_RANDOMDECIMALNODE_HPP
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.hpp>
|
||||
|
||||
using QtNodes::PortType;
|
||||
using QtNodes::PortIndex;
|
||||
using QtNodes::NodeData;
|
||||
using QtNodes::NodeDataType;
|
||||
using QtNodes::NodeDataModel;
|
||||
using QtNodes::NodeValidationState;
|
||||
|
||||
|
||||
namespace noggit
|
||||
{
|
||||
namespace Red::NodeEditor::Nodes
|
||||
{
|
||||
class RandomDecimalNode : public BaseNode
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RandomDecimalNode();
|
||||
void compute() override;
|
||||
QJsonObject save() const override;
|
||||
void restore(QJsonObject const& json_obj) override;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //NOGGIT_RANDOMDECIMALNODE_HPP
|
||||
@@ -0,0 +1,51 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#include "RandomDecimalRangeNode.hpp"
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.inl>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericData.hpp>
|
||||
#include <QRandomGenerator>
|
||||
|
||||
using namespace noggit::Red::NodeEditor::Nodes;
|
||||
|
||||
RandomDecimalRangeNode::RandomDecimalRangeNode()
|
||||
: BaseNode()
|
||||
{
|
||||
setName("RandomDecimalRangeNode");
|
||||
setCaption("Random Decimal Range");
|
||||
_validation_state = NodeValidationState::Valid;
|
||||
|
||||
addPortDefault<IntegerData>(PortType::In, "Seed", true);
|
||||
addPortDefault<DecimalData>(PortType::In, "Highest<Decimal>", true);
|
||||
addPort<DecimalData>(PortType::Out, "Decimal", true);
|
||||
}
|
||||
|
||||
void RandomDecimalRangeNode::compute()
|
||||
{
|
||||
QRandomGenerator rand;
|
||||
rand.seed(defaultPortData<DecimalData>(PortType::In, 0)->value());
|
||||
double highest = defaultPortData<DecimalData>(PortType::In, 1)->value();
|
||||
|
||||
_out_ports[0].out_value = std::make_shared<DecimalData>(rand.bounded(highest));
|
||||
|
||||
Q_EMIT dataUpdated(0);
|
||||
}
|
||||
|
||||
QJsonObject RandomDecimalRangeNode::save() const
|
||||
{
|
||||
QJsonObject json_obj = BaseNode::save();
|
||||
|
||||
defaultWidgetToJson(PortType::In, 0, json_obj, "seed");
|
||||
defaultWidgetToJson(PortType::In, 1, json_obj, "highest");
|
||||
|
||||
return json_obj;
|
||||
}
|
||||
|
||||
void RandomDecimalRangeNode::restore(const QJsonObject& json_obj)
|
||||
{
|
||||
BaseNode::restore(json_obj);
|
||||
|
||||
defaultWidgetFromJson(PortType::In, 0, json_obj, "seed");
|
||||
defaultWidgetFromJson(PortType::In, 1, json_obj, "highest");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#ifndef NOGGIT_RANDOMDECIMALRANGENODE_HPP
|
||||
#define NOGGIT_RANDOMDECIMALRANGENODE_HPP
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.hpp>
|
||||
|
||||
using QtNodes::PortType;
|
||||
using QtNodes::PortIndex;
|
||||
using QtNodes::NodeData;
|
||||
using QtNodes::NodeDataType;
|
||||
using QtNodes::NodeDataModel;
|
||||
using QtNodes::NodeValidationState;
|
||||
|
||||
|
||||
namespace noggit
|
||||
{
|
||||
namespace Red::NodeEditor::Nodes
|
||||
{
|
||||
class RandomDecimalRangeNode : public BaseNode
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RandomDecimalRangeNode();
|
||||
void compute() override;
|
||||
QJsonObject save() const override;
|
||||
void restore(QJsonObject const& json_obj) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //NOGGIT_RANDOMDECIMALRANGENODE_HPP
|
||||
@@ -0,0 +1,48 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#include "RandomIntegerNode.hpp"
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.inl>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericData.hpp>
|
||||
|
||||
#include <QRandomGenerator>
|
||||
|
||||
using namespace noggit::Red::NodeEditor::Nodes;
|
||||
|
||||
RandomIntegerNode::RandomIntegerNode()
|
||||
: BaseNode()
|
||||
{
|
||||
setName("RandomIntegerNode");
|
||||
setCaption("Random Integer");
|
||||
_validation_state = NodeValidationState::Valid;
|
||||
|
||||
addPortDefault<IntegerData>(PortType::In, "Seed", true);
|
||||
addPort<IntegerData>(PortType::Out, "Integer", true);
|
||||
}
|
||||
|
||||
void RandomIntegerNode::compute()
|
||||
{
|
||||
QRandomGenerator rand;
|
||||
rand.seed(defaultPortData<IntegerData>(PortType::In, 0)->value());
|
||||
|
||||
_out_ports[0].out_value = std::make_shared<IntegerData>(rand.generate());
|
||||
|
||||
Q_EMIT dataUpdated(0);
|
||||
}
|
||||
|
||||
QJsonObject RandomIntegerNode::save() const
|
||||
{
|
||||
QJsonObject json_obj = BaseNode::save();
|
||||
|
||||
defaultWidgetToJson(PortType::In, 0, json_obj, "seed");
|
||||
|
||||
return json_obj;
|
||||
}
|
||||
|
||||
void RandomIntegerNode::restore(const QJsonObject& json_obj)
|
||||
{
|
||||
BaseNode::restore(json_obj);
|
||||
|
||||
defaultWidgetFromJson(PortType::In, 0, json_obj, "seed");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#ifndef NOGGIT_RANDOMINTEGERNODE_HPP
|
||||
#define NOGGIT_RANDOMINTEGERNODE_HPP
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.hpp>
|
||||
|
||||
using QtNodes::PortType;
|
||||
using QtNodes::PortIndex;
|
||||
using QtNodes::NodeData;
|
||||
using QtNodes::NodeDataType;
|
||||
using QtNodes::NodeDataModel;
|
||||
using QtNodes::NodeValidationState;
|
||||
|
||||
|
||||
namespace noggit
|
||||
{
|
||||
namespace Red::NodeEditor::Nodes
|
||||
{
|
||||
class RandomIntegerNode : public BaseNode
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RandomIntegerNode();
|
||||
void compute() override;
|
||||
QJsonObject save() const override;
|
||||
void restore(QJsonObject const& json_obj) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //NOGGIT_RANDOMINTEGERNODE_HPP
|
||||
@@ -0,0 +1,62 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#include "RandomIntegerRangeNode.hpp"
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.inl>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericData.hpp>
|
||||
#include <QRandomGenerator>
|
||||
|
||||
using namespace noggit::Red::NodeEditor::Nodes;
|
||||
|
||||
RandomIntegerRangeNode::RandomIntegerRangeNode()
|
||||
: BaseNode()
|
||||
{
|
||||
setName("RandomIntegerRangeNode");
|
||||
setCaption("Random Integer Range");
|
||||
_validation_state = NodeValidationState::Valid;
|
||||
|
||||
addPortDefault<IntegerData>(PortType::In, "Seed", true);
|
||||
addPortDefault<IntegerData>(PortType::In, "MinInclusive<Integer>", true);
|
||||
addPortDefault<IntegerData>(PortType::In, "MaxExclusive<Integer>", true);
|
||||
addPort<IntegerData>(PortType::Out, "Integer", true);
|
||||
}
|
||||
|
||||
void RandomIntegerRangeNode::compute()
|
||||
{
|
||||
QRandomGenerator rand;
|
||||
rand.seed(defaultPortData<IntegerData>(PortType::In, 0)->value());
|
||||
|
||||
int lowest = defaultPortData<IntegerData>(PortType::In, 1)->value();
|
||||
int highest = defaultPortData<IntegerData>(PortType::In, 2)->value();
|
||||
|
||||
if (lowest >= highest)
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: incorrect range.");
|
||||
return;
|
||||
}
|
||||
_out_ports[0].out_value = std::make_shared<IntegerData>(rand.bounded(lowest, highest));
|
||||
|
||||
Q_EMIT dataUpdated(0);
|
||||
}
|
||||
|
||||
QJsonObject RandomIntegerRangeNode::save() const
|
||||
{
|
||||
QJsonObject json_obj = BaseNode::save();
|
||||
|
||||
defaultWidgetToJson(PortType::In, 0, json_obj, "seed");
|
||||
defaultWidgetToJson(PortType::In, 1, json_obj, "min_inclusive");
|
||||
defaultWidgetToJson(PortType::In, 2, json_obj, "max_exclusive");
|
||||
|
||||
return json_obj;
|
||||
}
|
||||
|
||||
void RandomIntegerRangeNode::restore(const QJsonObject& json_obj)
|
||||
{
|
||||
BaseNode::restore(json_obj);
|
||||
|
||||
defaultWidgetFromJson(PortType::In, 0, json_obj, "seed");
|
||||
defaultWidgetFromJson(PortType::In, 1, json_obj, "min_inclusive");
|
||||
defaultWidgetFromJson(PortType::In, 2, json_obj, "max_exclusive");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#ifndef NOGGIT_RANDOMINTEGERRANGENODE_HPP
|
||||
#define NOGGIT_RANDOMINTEGERRANGENODE_HPP
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.hpp>
|
||||
|
||||
using QtNodes::PortType;
|
||||
using QtNodes::PortIndex;
|
||||
using QtNodes::NodeData;
|
||||
using QtNodes::NodeDataType;
|
||||
using QtNodes::NodeDataModel;
|
||||
using QtNodes::NodeValidationState;
|
||||
|
||||
|
||||
namespace noggit
|
||||
{
|
||||
namespace Red::NodeEditor::Nodes
|
||||
{
|
||||
class RandomIntegerRangeNode : public BaseNode
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RandomIntegerRangeNode();
|
||||
void compute() override;
|
||||
QJsonObject save() const override;
|
||||
void restore(QJsonObject const& json_obj) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //NOGGIT_RANDOMINTEGERRANGENODE_HPP
|
||||
Reference in New Issue
Block a user