From a17b04566eb6a7534dade8c81fcb467d28902c2d Mon Sep 17 00:00:00 2001 From: Chromium <62724067+Chromum@users.noreply.github.com> Date: Sat, 17 May 2025 12:53:28 +0100 Subject: [PATCH] Added Maz Nodes --- .../Editor/Nodes/Types/String/DebugLogNode.cs | 58 ++++++++++++++++ .../Nodes/Types/String/DebugLogNode.cs.meta | 11 +++ .../Nodes/Types/String/ImportTextNode.cs | 26 +++++++ .../Nodes/Types/String/ImportTextNode.cs.meta | 11 +++ .../Nodes/Types/Utils/CreateDirectoryNode.cs | 25 +++++++ .../Types/Utils/CreateDirectoryNode.cs.meta | 11 +++ .../Nodes/Types/Utils/CreatePrefabNode.cs | 62 +++++++++++++++++ .../Types/Utils/CreatePrefabNode.cs.meta | 11 +++ .../Nodes/Types/Utils/ModelImportNode.cs | 69 +++++++++++++++++++ .../Nodes/Types/Utils/ModelImportNode.cs.meta | 11 +++ .../Nodes/Types/Utils/ObjectGetNameNode.cs | 60 ++++++++++++++++ .../Types/Utils/ObjectGetNameNode.cs.meta | 11 +++ 12 files changed, 366 insertions(+) create mode 100644 Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs create mode 100644 Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs.meta create mode 100644 Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs create mode 100644 Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs.meta create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs.meta create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs.meta create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs.meta create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs create mode 100644 Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs.meta diff --git a/Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs b/Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs new file mode 100644 index 0000000..f3c8929 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs @@ -0,0 +1,58 @@ +using System.IO; +using AssetGraph.Core; +using UnityEngine; +using UnityEditor; +using AssetGraph.Core.Attributes; +using AssetGraph.Nodes; +using UnityEngine.UIElements; + +namespace ImageProcessingGraph.Editor.Nodes.MazStuff +{ + [NodeInfo("Debug Log", "Debug/Debug Log", editorType: typeof(DebugLogNodeEditor))] + public class DebugLogNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("Log Text")] + public string logText; + + public delegate void OnNodeUpdated(); + public OnNodeUpdated onNodeUpdated; + + public override void Process() + { + Debug.Log(logText); + onNodeUpdated?.Invoke(); + } + } + + public class DebugLogNodeEditor : AssetGraphNodeEditor + { + DebugLogNode logNode; + Label label; + + public DebugLogNodeEditor(AssetGraphNode node, AssetGraphViewWindow window) : base(node, window) + { + logNode = node as DebugLogNode; + logNode.onNodeUpdated += UpdateEditor; + label = new Label(); + label.style.flexGrow = 1; + label.style.flexShrink = 1; + label.style.paddingBottom = label.style.paddingTop = label.style.paddingLeft = label.style.paddingRight = 6; + label.style.backgroundColor = new Color(0.24705f, 0.24705f, 0.24705f, 0.8039216f); + label.style.whiteSpace = WhiteSpace.Normal; + + VisualElement bar = new VisualElement(); + bar.name = "divider"; + bar.AddToClassList("horizontal"); + + var contents = this.Q("contents"); + + contents.Add(bar); + contents.Add(label); + } + + public void UpdateEditor() + { + label.text = logNode.logText; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs.meta b/Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs.meta new file mode 100644 index 0000000..10aa0b0 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/String/DebugLogNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee2323729ea6fa84788137af3807d8b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs b/Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs new file mode 100644 index 0000000..ac4cf26 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs @@ -0,0 +1,26 @@ +using System.IO; +using AssetGraph.Core.Attributes; +using AssetGraph.Nodes; +using UnityEngine; +using UnityEditor; + +namespace ImageProcessingGraph.Editor.Nodes.MazStuff +{ + [NodeInfo("Import Text", "Imports/Import Text")] + public class ImportTextNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("File Name")] + public string fileName; + + [AssetGraph.Core.Attributes.Input("Directory")] + public string directory; + + [AssetGraph.Core.Attributes.Output("Text")] + public string outputText; + + public override void Process() + { + outputText = File.ReadAllText(Path.Combine(directory, fileName)); + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs.meta b/Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs.meta new file mode 100644 index 0000000..6091440 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/String/ImportTextNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 455f8a7df4c9c2e4691f68b537e29573 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs b/Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs new file mode 100644 index 0000000..cee1f62 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs @@ -0,0 +1,25 @@ +using System.IO; +using UnityEngine; +using UnityEditor; +using AssetGraph.Core.Attributes; +using AssetGraph.Nodes; + +namespace ImageProcessingGraph.Editor.Nodes.MazStuff +{ + [NodeInfo("Create Directory", "Directory/Create Directory")] + public class CreateDirectoryNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("Directory")] public string inputDirectory; + + [AssetGraph.Core.Attributes.Output("Directory")] public string outputDirectory; + + public override void Process() + { + if (!Directory.Exists(inputDirectory)) + { + Directory.CreateDirectory(inputDirectory); + } + outputDirectory = inputDirectory; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs.meta b/Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs.meta new file mode 100644 index 0000000..24ac3f7 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/CreateDirectoryNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a32e947621c08940b8f9c68c3bc0bdc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs b/Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs new file mode 100644 index 0000000..502cdfb --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs @@ -0,0 +1,62 @@ +using System.IO; +using UnityEngine; +using UnityEditor; +using AssetGraph.Core.Attributes; +using AssetGraph.Nodes; + +namespace ImageProcessingGraph.Editor.Nodes.MazStuff +{ + [NodeInfo("Create Prefab", "Prefab/Create")] + public class CreatePrefabNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("Prefab Name")] + public string prefabName; + + [AssetGraph.Core.Attributes.Input("Directory")] + public string directory; + + [AssetGraph.Core.Attributes.Input("")] + public Mesh mesh; + + [AssetGraph.Core.Attributes.Input("Submesh Count")] + public int submeshCount = 1; + + [AssetGraph.Core.Attributes.Input("")] + public Material material; + + [AssetGraph.Core.Attributes.Output("Prefab")] + public GameObject prefab; + + public override void Process() + { + GameObject newGO = new GameObject(prefabName); + var prefabPath = Path.Combine(directory, $"{prefabName}.prefab"); + PrefabUtility.SaveAsPrefabAsset(newGO, prefabPath); + Object.DestroyImmediate(newGO); + + using (var editScope = new PrefabUtility.EditPrefabContentsScope(prefabPath)) + { + var root = editScope.prefabContentsRoot; + var meshRenderer = root.AddComponent(); + var meshFilter = root.AddComponent(); + meshFilter.sharedMesh = mesh; + if (submeshCount > 1) + { + Material[] materials = new Material[submeshCount]; + for (int i = 0; i < submeshCount; i++) + { + materials[i] = material; + } + + meshRenderer.sharedMaterials = materials; + } + else + { + meshRenderer.sharedMaterial = material; + } + } + + prefab = AssetDatabase.LoadAssetAtPath(prefabPath); + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs.meta b/Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs.meta new file mode 100644 index 0000000..8695467 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/CreatePrefabNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 851727f1cfe10de4b8073aa6a334518c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs b/Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs new file mode 100644 index 0000000..c8d7c23 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs @@ -0,0 +1,69 @@ +using System.IO; +using AssetGraph.Core.Attributes; +using AssetGraph.Nodes; +using ImageProcessingGraph.Editor; +using UnityEditor; +using UnityEngine; + +namespace ImageProcessingGraph.Editor.Nodes.MazStuff +{ + [NodeInfo("Model Import", "Imports/Import Model", true)] + public class ModelImportNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("Model")] + public GameObject modelImport; + + [AssetGraph.Core.Attributes.Output("")] + public Mesh mesh; + + [AssetGraph.Core.Attributes.Output("")] + public Material material; + + [AssetGraph.Core.Attributes.Output("Model Name")] + public string modelName; + + [AssetGraph.Core.Attributes.Output("Directory")] + public string directory; + + public override void Process() + { + var modelPath = AssetDatabase.GetAssetPath(modelImport); + var allAssets = AssetDatabase.LoadAllAssetsAtPath(modelPath); + + material = null; + mesh = null; + foreach (var asset in allAssets) + { + if (material && mesh) break; + + if (!material && asset is Material foundMaterial) + { + material = foundMaterial; + } + if (!mesh && asset is Mesh foundMesh) + { + mesh = foundMesh; + } + } + + modelName = modelImport.name; + directory = Path.GetDirectoryName(modelPath); + } + } + + + [NodeInfo("Mesh Info", "Mesh/Mesh Info", true)] + public class MeshInfo : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("")] + public Mesh mesh; + + [AssetGraph.Core.Attributes.Output("Submeshes")] + public int submeshes; + + public override void Process() + { + submeshes = mesh.subMeshCount; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs.meta b/Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs.meta new file mode 100644 index 0000000..12171f6 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/ModelImportNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 612cfa8fb6e00e14d9f78091cb61cdde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs b/Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs new file mode 100644 index 0000000..c8f9790 --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs @@ -0,0 +1,60 @@ +using System.IO; +using AssetGraph.Core.Attributes; +using AssetGraph.Nodes; +using UnityEngine; +using UnityEditor; + +namespace ImageProcessingGraph.Editor.Nodes.MazStuff +{ + [NodeInfo("Material Get Name", "Material/Material Get Name")] + public class MaterialGetNameNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("")] public Material inputObject; + + [AssetGraph.Core.Attributes.Output("Name")] public string objectName; + + public override void Process() + { + objectName = inputObject.name; + } + } + + [NodeInfo("Mesh Get Name", "Mesh/Mesh Get Name")] + public class MeshGetNameNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("")] public Mesh inputObject; + + [AssetGraph.Core.Attributes.Output("Name")] public string objectName; + + public override void Process() + { + objectName = inputObject.name; + } + } + + [NodeInfo("Texture Get Name", "Texture/Texture Get Name")] + public class TextureGetNameNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("")] public Texture2D inputObject; + + [AssetGraph.Core.Attributes.Output("Name")] public string objectName; + + public override void Process() + { + objectName = inputObject.name; + } + } + + [NodeInfo("GameObject Get Name", "GameObject/GameObject Get Name")] + public class GameObjectGetNameNode : AssetGraphNode + { + [AssetGraph.Core.Attributes.Input("")] public GameObject inputObject; + + [AssetGraph.Core.Attributes.Output("Name")] public string objectName; + + public override void Process() + { + objectName = inputObject.name; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs.meta b/Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs.meta new file mode 100644 index 0000000..0b7749e --- /dev/null +++ b/Editor/Scripts/Editor/Nodes/Types/Utils/ObjectGetNameNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79f6818ae71efcd48a44d3fb422891bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: