TerraForge3D  2.3.1
3D Terrain And Landscape Generator
RandomNumberNode.cpp
1#include "Generators/CPUNodeEditor/Nodes/RandomNumberNode.h"
2#include "Base/ImGuiShapes.h"
3#include "Generators/CPUNodeEditor/CPUNodeEditor.h"
4#include <iostream>
5
6#include <mutex>
7
8NodeOutput RandomNumberNode::Evaluate(NodeInputParam input, NodeEditorPin *pin)
9{
10 int s, mx, mn;
11 s = mx = mn = 0;
12
13 if (inputPins[0]->IsLinked())
14 {
15 s = inputPins[0]->other->Evaluate(input).value;
16 }
17
18 else
19 {
20 s = seed;
21 }
22
23 if (inputPins[1]->IsLinked())
24 {
25 mn *= inputPins[1]->other->Evaluate(input).value;
26 }
27
28 else
29 {
30 mn *= min;
31 }
32
33 if (inputPins[2]->IsLinked())
34 {
35 mx *= inputPins[2]->other->Evaluate(input).value;
36 }
37
38 else
39 {
40 mx *= max;
41 }
42
43 if(mn > mx)
44 {
45 int t = mn;
46 mn = mx;
47 mx = t;
48 }
49
50 std::seed_seq seq{seed};
51 engine.seed(seq);
52 std::uniform_int_distribution<int> dist(mn, mx);
53 return NodeOutput({(float)dist(engine)});
54}
55
56void RandomNumberNode::Load(nlohmann::json data)
57{
58 seed = data["seed"];
59 min = data["min"];
60 max = data["max"];
61}
62
63nlohmann::json RandomNumberNode::Save()
64{
65 nlohmann::json data;
66 data["type"] = MeshNodeEditor::MeshNodeType::RandomNumber;
67 data["seed"] = seed;
68 data["min"] = min;
69 data["max"] = max;
70 return data;
71}
72
73void RandomNumberNode::OnRender()
74{
75 DrawHeader("Random Number");
76 inputPins[0]->Render();
77 ImGui::Text("Seed");
78
79 if (!inputPins[0]->IsLinked())
80 {
81 ImGui::PushItemWidth(100);
82 ImGui::DragInt(("##" + std::to_string(inputPins[0]->id)).c_str(), &seed, 0.1f);
83 ImGui::PopItemWidth();
84 }
85
86 ImGui::SameLine();
87 ImGui::Text("Out");
88 outputPins[0]->Render();
89 inputPins[1]->Render();
90 ImGui::Text("Minimum");
91
92 if (!inputPins[1]->IsLinked())
93 {
94 ImGui::PushItemWidth(100);
95 ImGui::DragInt(("##" + std::to_string(inputPins[1]->id)).c_str(), &min, 0.1f);
96 ImGui::PopItemWidth();
97 }
98
99 inputPins[2]->Render();
100 ImGui::Text("Maximum");
101
102 if (!inputPins[2]->IsLinked())
103 {
104 ImGui::PushItemWidth(100);
105 ImGui::DragInt(("##" + std::to_string(inputPins[2]->id)).c_str(), &max, 0.1f);
106 ImGui::PopItemWidth();
107 }
108}
109
110RandomNumberNode::RandomNumberNode()
111{
112 inputPins.push_back(new NodeEditorPin());
113 inputPins.push_back(new NodeEditorPin());
114 inputPins.push_back(new NodeEditorPin());
115 outputPins.push_back(new NodeEditorPin(NodeEditorPinType::Output));
116 headerColor = ImColor(NOISE_NODE_COLOR);
117 seed = 42;
118 min = 0;
119 max = 10;
120}
a class to store JSON values
Definition: json.hpp:17860