1#include "Generators/CPUNodeEditor/Nodes/NoisePerlinNode.h"
2#include "FastNoiseLite/FastNoiseLite.h"
3#include "Generators/CPUNodeEditor/CPUNodeEditor.h"
5static const char *fractalTypes[] = {
"None",
"FBm",
"Ridged",
"PingPong" };
9 if(!inputPins[0]->IsLinked())
11 noiseGen->SetSeed(seed);
16 noiseGen->SetSeed((
int)inputPins[0]->other->Evaluate(input).value);
19 if (!inputPins[2]->IsLinked())
21 noiseGen->SetFrequency(frequency);
26 noiseGen->SetFrequency(inputPins[2]->other->Evaluate(input).value);
31 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_None);
34 else if (fractalType == 1)
36 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_FBm);
39 else if (fractalType == 2)
41 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_Ridged);
44 else if (fractalType == 3)
46 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_PingPong);
51 noiseGen->SetFractalType(FastNoiseLite::FractalType::FractalType_None);
54 if (!inputPins[1]->IsLinked())
56 noiseGen->SetFractalOctaves(octaves);
61 noiseGen->SetFrequency(inputPins[1]->other->Evaluate(input).value);
64 if (!inputPins[3]->IsLinked())
66 noiseGen->SetFractalLacunarity(lacunarity);
71 noiseGen->SetFractalLacunarity(inputPins[3]->other->Evaluate(input).value);
74 if (!inputPins[4]->IsLinked())
76 noiseGen->SetFractalGain(gain);
81 noiseGen->SetFractalGain(inputPins[4]->other->Evaluate(input).value);
84 if (!inputPins[5]->IsLinked())
86 noiseGen->SetFractalWeightedStrength(weightedStrength);
91 noiseGen->SetFractalWeightedStrength(inputPins[5]->other->Evaluate(input).value);
94 if (!inputPins[6]->IsLinked())
96 noiseGen->SetFractalPingPongStrength(pingPongStrength);
101 noiseGen->SetFractalPingPongStrength(inputPins[6]->other->Evaluate(input).value);
106 if (inputPins[7]->IsLinked())
108 st = inputPins[7]->other->Evaluate(input).value;
111 return NodeOutput({ noiseGen->GetNoise(input.x, input.y, input.z) * st });
116 frequency = data[
"frequency"];
118 lacunarity = data[
"lacunarity"];
119 weightedStrength = data[
"weightedStrength"];
120 octaves = data[
"octaves"];
121 pingPongStrength = data[
"pingPongStrength"];
123 strength = data[
"strength"];
124 fractalType = data[
"fractalType"];
130 data[
"type"] = MeshNodeEditor::MeshNodeType::NoisePerlin;
131 data[
"frequency"] = frequency;
133 data[
"lacunarity"] = lacunarity;
134 data[
"weightedStrength"] = weightedStrength;
135 data[
"octaves"] = octaves;
136 data[
"pingPongStrength"] = pingPongStrength;
138 data[
"strength"] = strength;
139 data[
"fractalType"] = fractalType;
143void NoisePerlinNode::OnRender()
145 DrawHeader(
"Perlin Noise");
146 ImGui::Dummy(ImVec2(150, 10));
149 outputPins[0]->Render();
150 inputPins[0]->Render();
153 if (!inputPins[0]->IsLinked())
155 ImGui::Dummy(ImVec2(30, 10));
157 ImGui::PushItemWidth(100);
158 ImGui::DragInt(MAKE_IMGUI_ID(inputPins[0]->
id), &seed, 1);
159 ImGui::PopItemWidth();
167 inputPins[1]->Render();
168 ImGui::Text(
"Octaves");
170 if (!inputPins[1]->IsLinked())
172 ImGui::Dummy(ImVec2(30, 10));
174 ImGui::PushItemWidth(100);
175 ImGui::DragInt(MAKE_IMGUI_ID(inputPins[1]->
id), &octaves, 1);
176 ImGui::PopItemWidth();
184 inputPins[2]->Render();
185 ImGui::Text(
"Frequency");
187 if (!inputPins[2]->IsLinked())
189 ImGui::Dummy(ImVec2(30, 10));
191 ImGui::PushItemWidth(100);
192 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[2]->
id), &frequency, 0.001f);
193 ImGui::PopItemWidth();
201 inputPins[3]->Render();
202 ImGui::Text(
"Lacunarity");
204 if (!inputPins[3]->IsLinked())
206 ImGui::Dummy(ImVec2(30, 10));
208 ImGui::PushItemWidth(100);
209 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[3]->
id), &lacunarity, 0.01f);
210 ImGui::PopItemWidth();
218 inputPins[4]->Render();
221 if (!inputPins[4]->IsLinked())
223 ImGui::Dummy(ImVec2(30, 10));
225 ImGui::PushItemWidth(100);
226 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[4]->
id), &gain, 0.01f);
227 ImGui::PopItemWidth();
235 inputPins[5]->Render();
236 ImGui::Text(
"Weighted Strength");
238 if (!inputPins[5]->IsLinked())
240 ImGui::Dummy(ImVec2(30, 10));
242 ImGui::PushItemWidth(100);
243 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[5]->
id), &weightedStrength, 0.01f, 0, 1);
244 ImGui::PopItemWidth();
252 inputPins[6]->Render();
253 ImGui::Text(
"Ping Pong Strength");
255 if (!inputPins[6]->IsLinked())
257 ImGui::Dummy(ImVec2(30, 10));
259 ImGui::PushItemWidth(100);
260 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[6]->
id), &pingPongStrength, 0.01f);
261 ImGui::PopItemWidth();
269 inputPins[7]->Render();
270 ImGui::Text(
"Strength");
272 if (!inputPins[7]->IsLinked())
274 ImGui::Dummy(ImVec2(30, 10));
276 ImGui::PushItemWidth(100);
277 ImGui::DragFloat(MAKE_IMGUI_ID(inputPins[7]->
id), &strength, 0.01f);
278 ImGui::PopItemWidth();
287 ImGui::Text(
"Current Fractal Type : ");
289 ImGui::Text(fractalTypes[fractalType]);
291 if (ImGui::Button(MAKE_IMGUI_LABEL(
id,
"Change Fractal Type")))
295 if (fractalType == 4)
302NoisePerlinNode::NoisePerlinNode()
304 headerColor = ImColor(NOISE_NODE_COLOR);
314 outputPins.push_back(
new NodeEditorPin(NodeEditorPinType::Output));
321 weightedStrength = 0.0f;
322 pingPongStrength = 2.0f;
324 noiseGen =
new FastNoiseLite();
325 noiseGen->SetNoiseType(FastNoiseLite::NoiseType::NoiseType_Perlin);
328NoisePerlinNode::~NoisePerlinNode()
a class to store JSON values