From 49b25e755b70ec412feaaf0b898d6f7e09d2bea6 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 28 Jun 2022 09:40:37 +0800 Subject: +node example --- .../Nodes/GeneratorNodes/PerlinNode.cs | 73 ++++++++++++++++++++++ .../Nodes/GeneratorNodes/PerlinNode.cs.meta | 12 ++++ .../Nodes/GeneratorNodes/VoronoiNode.cs | 35 +++++++++++ .../Nodes/GeneratorNodes/VoronoiNode.cs.meta | 12 ++++ 4 files changed, 132 insertions(+) create mode 100644 Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs create mode 100644 Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/PerlinNode.cs.meta create mode 100644 Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs create mode 100644 Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes/VoronoiNode.cs.meta (limited to 'Other/NodeEditorExamples/Assets/Examples/LibNoiseEditor/Nodes/GeneratorNodes') 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(); + + 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: -- cgit v1.1-26-g67d0