add two last noise nodes
This commit is contained in:
@@ -96,6 +96,8 @@
|
||||
#include <noggit/Red/NodeEditor/Nodes/Data/Noise/NoiseSelectNode.hpp>
|
||||
#include <noggit/Red/NodeEditor/Nodes/Data/Noise/NoiseTransformPointNode.hpp>
|
||||
#include <noggit/Red/NodeEditor/Nodes/Data/Noise/NoiseTurbulenceNode.hpp>
|
||||
#include <noggit/Red/NodeEditor/Nodes/Data/Noise/NoiseCurveNode.hpp>
|
||||
#include <noggit/Red/NodeEditor/Nodes/Data/Noise/NoiseTerraceNode.hpp>
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.hpp>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericTypeConverter.hpp>
|
||||
@@ -197,6 +199,8 @@ namespace noggit
|
||||
ret->registerModel<NoiseExponentNode>("Data//Noise//Modifiers");
|
||||
ret->registerModel<NoiseInvertNode>("Data//Noise//Modifiers");
|
||||
ret->registerModel<NoiseScaleBiasNode>("Data//Noise//Modifiers");
|
||||
ret->registerModel<NoiseCurveNode>("Data//Noise//Modifiers");
|
||||
ret->registerModel<NoiseTerraceNode>("Data//Noise//Modifiers");
|
||||
ret->registerModel<NoiseBlendNode>("Data//Noise//Selectors");
|
||||
ret->registerModel<NoiseSelectNode>("Data//Noise//Selectors");
|
||||
ret->registerModel<NoiseDisplaceNode>("Data//Noise//Transform");
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#include "NoiseCurveNode.hpp"
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.inl>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericData.hpp>
|
||||
|
||||
using namespace noggit::Red::NodeEditor::Nodes;
|
||||
|
||||
NoiseCurveNode::NoiseCurveNode()
|
||||
: BaseNode()
|
||||
{
|
||||
setName("NoiseCurveNode");
|
||||
setCaption("Noise Curve");
|
||||
_validation_state = NodeValidationState::Valid;
|
||||
|
||||
addPortDefault<NoiseData>(PortType::In, "Noise", true);
|
||||
addPortDefault<ListData>(PortType::In, "Points<List[Vector2D]>", true);
|
||||
_in_ports[1].data_type->set_parameter_type("vec2");
|
||||
|
||||
addPort<NoiseData>(PortType::Out, "Noise", true);
|
||||
}
|
||||
|
||||
void NoiseCurveNode::compute()
|
||||
{
|
||||
auto module = new noise::module::Curve();
|
||||
module->SetSourceModule(0, *static_cast<NoiseData*>(_in_ports[0].in_value.lock().get())->value().get());
|
||||
|
||||
auto point_list = static_cast<ListData*>(_in_ports[1].in_value.lock().get())->value();
|
||||
|
||||
if (point_list->size() < 4)
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: input list should contain at least four points.");
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<double> points;
|
||||
for (int i = 0; i < point_list->size(); ++i)
|
||||
{
|
||||
glm::vec2 value = static_cast<Vector2DData*>(point_list->at(i).get())->value();
|
||||
|
||||
if (std::find(points.begin(), points.end(), value.x) != points.end())
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: duplicate points input values found.");
|
||||
return;
|
||||
}
|
||||
|
||||
module->AddControlPoint(value.x, value.y);
|
||||
}
|
||||
|
||||
std::shared_ptr<noise::module::Module> noise_data;
|
||||
noise_data.reset(module);
|
||||
_out_ports[0].out_value = std::make_shared<NoiseData>(noise_data);
|
||||
|
||||
Q_EMIT dataUpdated(0);
|
||||
}
|
||||
|
||||
NodeValidationState NoiseCurveNode::validate()
|
||||
{
|
||||
if (!static_cast<NoiseData*>(_in_ports[0].in_value.lock().get()))
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: failed to evaluate noise input.");
|
||||
return _validation_state;
|
||||
}
|
||||
|
||||
if (!static_cast<ListData*>(_in_ports[1].in_value.lock().get()))
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: failed to evaluate list input.");
|
||||
return _validation_state;
|
||||
}
|
||||
|
||||
return _validation_state;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#ifndef NOGGIT_NOISECURVENODE_HPP
|
||||
#define NOGGIT_NOISECURVENODE_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 NoiseCurveNode : public BaseNode
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
NoiseCurveNode();
|
||||
NodeValidationState validate() override;
|
||||
void compute() override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //NOGGIT_NOISECURVENODE_HPP
|
||||
@@ -0,0 +1,98 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#include "NoiseTerraceNode.hpp"
|
||||
|
||||
#include <noggit/Red/NodeEditor/Nodes/BaseNode.inl>
|
||||
#include <noggit/Red/NodeEditor/Nodes/DataTypes/GenericData.hpp>
|
||||
|
||||
using namespace noggit::Red::NodeEditor::Nodes;
|
||||
|
||||
NoiseTerraceNode::NoiseTerraceNode()
|
||||
: BaseNode()
|
||||
{
|
||||
setName("NoiseTerraceNode");
|
||||
setCaption("Noise Terrace");
|
||||
_validation_state = NodeValidationState::Valid;
|
||||
|
||||
addPortDefault<NoiseData>(PortType::In, "Noise", true);
|
||||
addPortDefault<ListData>(PortType::In, "Terraces<List[Decimal]>", true);
|
||||
_in_ports[1].data_type->set_parameter_type("decimal");
|
||||
addPortDefault<BooleanData>(PortType::In, "Invert<Boolean>", true);
|
||||
|
||||
addPort<NoiseData>(PortType::Out, "Noise", true);
|
||||
}
|
||||
|
||||
void NoiseTerraceNode::compute()
|
||||
{
|
||||
auto module = new noise::module::Terrace();
|
||||
module->SetSourceModule(0, *static_cast<NoiseData*>(_in_ports[0].in_value.lock().get())->value().get());
|
||||
|
||||
auto point_list = static_cast<ListData*>(_in_ports[1].in_value.lock().get())->value();
|
||||
|
||||
if (point_list->size() < 2)
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: input list should contain at least two terrace heights.");
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<double> points;
|
||||
for (int i = 0; i < point_list->size(); ++i)
|
||||
{
|
||||
double value = static_cast<DecimalData*>(point_list->at(i).get())->value();
|
||||
|
||||
if (std::find(points.begin(), points.end(), value) != points.end())
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: duplicate terrace heights found.");
|
||||
return;
|
||||
}
|
||||
|
||||
module->AddControlPoint(value);
|
||||
}
|
||||
module->InvertTerraces(defaultPortData<BooleanData>(PortType::In, 2)->value());
|
||||
|
||||
std::shared_ptr<noise::module::Module> noise_data;
|
||||
noise_data.reset(module);
|
||||
_out_ports[0].out_value = std::make_shared<NoiseData>(noise_data);
|
||||
|
||||
Q_EMIT dataUpdated(0);
|
||||
|
||||
}
|
||||
|
||||
NodeValidationState NoiseTerraceNode::validate()
|
||||
{
|
||||
if (!static_cast<NoiseData*>(_in_ports[0].in_value.lock().get()))
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: failed to evaluate noise input.");
|
||||
return _validation_state;
|
||||
}
|
||||
|
||||
if (!static_cast<ListData*>(_in_ports[1].in_value.lock().get()))
|
||||
{
|
||||
setValidationState(NodeValidationState::Error);
|
||||
setValidationMessage("Error: failed to evaluate list input.");
|
||||
return _validation_state;
|
||||
}
|
||||
|
||||
return _validation_state;
|
||||
}
|
||||
|
||||
|
||||
QJsonObject NoiseTerraceNode::save() const
|
||||
{
|
||||
QJsonObject json_obj = BaseNode::save();
|
||||
|
||||
defaultWidgetToJson(PortType::In, 2, json_obj, "invert");
|
||||
|
||||
|
||||
return json_obj;
|
||||
}
|
||||
|
||||
void NoiseTerraceNode::restore(const QJsonObject& json_obj)
|
||||
{
|
||||
BaseNode::restore(json_obj);
|
||||
|
||||
defaultWidgetFromJson(PortType::In, 2, json_obj, "invert");
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
|
||||
|
||||
#ifndef NOGGIT_NOISETERRACENODE_HPP
|
||||
#define NOGGIT_NOISETERRACENODE_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 NoiseTerraceNode : public BaseNode
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
NoiseTerraceNode();
|
||||
NodeValidationState validate() override;
|
||||
void compute() override;
|
||||
QJsonObject save() const override;
|
||||
void restore(QJsonObject const& json_obj) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif //NOGGIT_NOISETERRACENODE_HPP
|
||||
Reference in New Issue
Block a user