diff options
Diffstat (limited to 'Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes')
14 files changed, 341 insertions, 0 deletions
diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes.meta new file mode 100644 index 00000000..12e35e80 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 32e99ed3c4c33a245a4ee182fd560c24 +folderAsset: yes +timeCreated: 1502695282 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs new file mode 100644 index 00000000..1ffac177 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs @@ -0,0 +1,73 @@ + +using System.Collections.Generic; + +using UnityEngine; +using UnityEditor; + +using UNEB; +using LibNoise.Generator; + +public class PerlinNode : Node +{ + private Perlin _noise = new Perlin(); + + public override void Init() { + var noiseIn = AddInput(); + noiseIn.name = "Input"; + + var mask = AddInput(); + mask.name = "Mask"; + + var noiseOut = AddOutput(); + noiseOut.name = "Output"; + noiseOut.getValue = () => { return _noise; }; + + FitKnobs(); + + bodyRect.height += 95f; + bodyRect.width = 150f; + } + + public override void OnBodyGUI() + { + EditorGUI.BeginChangeCheck(); + + _noise.Seed = EditorGUILayout.IntField("Seed", _noise.Seed); + _noise.OctaveCount = EditorGUILayout.IntField("Octaves", _noise.OctaveCount); + _noise.Persistence = EditorGUILayout.DoubleField("Persistence", _noise.Persistence); + _noise.Frequency = EditorGUILayout.DoubleField("Frequency", _noise.Frequency); + _noise.Lacunarity = EditorGUILayout.DoubleField("Lacunarity", _noise.Lacunarity); + + if (EditorGUI.EndChangeCheck()) { + updateOutputNodes(); + } + } + + // Uses a simple DFS traversal to find the connected outputs. + // Assumes a tree-like structure following output to input. + // Does not handle cycles. + private void updateOutputNodes() + { + // Temp solution. + var dfs = new Stack<Node>(); + + dfs.Push(this); + + while (dfs.Count != 0) { + + var node = dfs.Pop(); + + // Search neighbors + foreach (var output in node.Outputs) { + foreach (var input in output.Inputs) { + dfs.Push(input.ParentNode); + } + } + + var outputNode = node as OutputTexture2D; + if (outputNode != null) { + outputNode.UpdateTexture(); + } + } + } +}
\ No newline at end of file diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs.meta new file mode 100644 index 00000000..ae4ff21c --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1f2d0ea566c0d2e4799418dc4757938e +timeCreated: 1502695509 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs new file mode 100644 index 00000000..b5a82013 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs @@ -0,0 +1,35 @@ + +using UnityEditor; +using LibNoise.Generator; +using UNEB; + +public class VoronoiNode : Node +{ + private Voronoi _noise = new Voronoi(); + + public override void Init() + { + var noiseIn = AddInput(); + noiseIn.name = "Input"; + + var mask = AddInput(); + mask.name = "Mask"; + + var noiseOut = AddOutput(); + noiseOut.name = "Output"; + noiseOut.getValue = () => { return _noise; }; + + FitKnobs(); + + bodyRect.height += 80f; + bodyRect.width = 150f; + } + + public override void OnBodyGUI() + { + _noise.Seed = EditorGUILayout.IntField("Seed", _noise.Seed); + _noise.Frequency = EditorGUILayout.DoubleField("Frequency", _noise.Frequency); + _noise.Displacement = EditorGUILayout.DoubleField("Displacement", _noise.Displacement); + _noise.UseDistance = EditorGUILayout.Toggle("Use Distance", _noise.UseDistance); + } +}
\ No newline at end of file diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs.meta new file mode 100644 index 00000000..02e63cde --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a0eb0464f69bb1140b0cf06461db0501 +timeCreated: 1502696495 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes.meta new file mode 100644 index 00000000..12586983 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 76cd34ec88c324d46b9b5041c12a93a8 +folderAsset: yes +timeCreated: 1502695460 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/CurveNode.cs b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/CurveNode.cs new file mode 100644 index 00000000..7babc539 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/CurveNode.cs @@ -0,0 +1,32 @@ + +using UnityEngine; +using UnityEditor; +using UNEB; + +public class CurveNode : Node +{ + private AnimationCurve _curve = new AnimationCurve(); + private readonly Rect kCurveRange = new Rect(-1, -1, 2, 2); + + private const float kBodyHeight = 100f; + + public override void Init() + { + var input = AddInput(); + input.name = "Input"; + + var output = AddOutput(); + output.name = "Output"; + + FitKnobs(); + + bodyRect.height += kBodyHeight; + bodyRect.width = 150f; + } + + public override void OnBodyGUI() + { + float boxHeight = kBodyHeight - kHeaderHeight; + _curve = EditorGUILayout.CurveField(_curve, Color.cyan, kCurveRange, GUILayout.Height(boxHeight), GUILayout.ExpandWidth(true)); + } +} diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/CurveNode.cs.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/CurveNode.cs.meta new file mode 100644 index 00000000..e797acc3 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/CurveNode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ed443b489ef3d2345a35685cf3a9e1e5 +timeCreated: 1502703666 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/SelectNode.cs b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/SelectNode.cs new file mode 100644 index 00000000..8e568bf6 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/SelectNode.cs @@ -0,0 +1,34 @@ +using LibNoise.Operator; + +using UnityEngine; +using UnityEditor; +using UNEB; + +public class SelectNode : Node +{ + private Select _op = new Select(); + + public override void Init() + { + var inputA = AddInput(); + inputA.name = "Input A"; + + var inputB = AddInput(); + inputB.name = "Input B"; + + var output = AddOutput(); + output.name = "Output"; + + FitKnobs(); + + bodyRect.height += 60f; + bodyRect.width = 150f; + } + + public override void OnBodyGUI() + { + _op.FallOff = EditorGUILayout.DoubleField("Fall Off", _op.FallOff); + _op.Minimum = EditorGUILayout.DoubleField("Min Bound", _op.Minimum); + _op.Maximum = EditorGUILayout.DoubleField("Max Bound", _op.Maximum); + } +} diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/SelectNode.cs.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/SelectNode.cs.meta new file mode 100644 index 00000000..8b89c28c --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OperatorNodes/SelectNode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2ff619b535e53e74a94aa5c56dfc462b +timeCreated: 1502702570 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputMesh.cs b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputMesh.cs new file mode 100644 index 00000000..5e379668 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputMesh.cs @@ -0,0 +1,7 @@ + +using UnityEngine; +using UNEB; + +public class OutputMesh : Node { + +} diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputMesh.cs.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputMesh.cs.meta new file mode 100644 index 00000000..7face9eb --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputMesh.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c975064dd2bbba44d8bb3655a76889e2 +timeCreated: 1502709420 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputTexture2D.cs b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputTexture2D.cs new file mode 100644 index 00000000..c20a99d8 --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputTexture2D.cs @@ -0,0 +1,70 @@ + +using UnityEngine; +using UnityEditor; +using UNEB; + +public class OutputTexture2D : Node +{ + private Texture2D texPreview; + + NodeInput inputNoise; + + private int _texRes = 100; + public int Resolution + { + get { return _texRes; } + set { _texRes = Mathf.Clamp(value, 10, 300); } + } + + public override void Init() + { + inputNoise = AddInput(); + inputNoise.name = "Input Noise"; + + texPreview = new Texture2D(200, 200); + + FitKnobs(); + bodyRect.height += 245; + bodyRect.width = 210f; + } + + public override void OnBodyGUI() + { + EditorGUI.BeginChangeCheck(); + Resolution = EditorGUILayout.IntField("Resolution", Resolution); + + GUILayout.Box(texPreview, GUILayout.Width(texPreview.width), GUILayout.Height(texPreview.height)); + + if (GUILayout.Button("Update")) { + UpdateTexture(); + } + + if (EditorGUI.EndChangeCheck()) { + UpdateTexture(); + } + } + + public void UpdateTexture() + { + if (!inputNoise.HasOutputConnected()) { + return; + } + + var noise = inputNoise.Outputs[0].GetValue<LibNoise.Generator.Perlin>(); + + for (int x = 0; x < texPreview.width; ++x) { + for (int y = 0; y < texPreview.height; ++y) { + + var point = new Vector3(x, y, 0f) / _texRes; + float value = (float)noise.GetValue(point); + + value = Mathf.Clamp01((value + 1) / 2f); + Color color = Color.HSVToRGB(value, 1f, 1f); + + texPreview.SetPixel(x, y, color); + } + } + + texPreview.Apply(); + } +} diff --git a/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputTexture2D.cs.meta b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputTexture2D.cs.meta new file mode 100644 index 00000000..e1c18fbd --- /dev/null +++ b/Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/OutputTexture2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 565809ecf7ca4524bbae5ea481a509a8 +timeCreated: 1502709401 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |