From 65797304fb21181e1fcbd45dfebd0d2cf159ea6b Mon Sep 17 00:00:00 2001 From: yum Date: Wed, 30 Jul 2025 13:09:19 -0700 Subject: Simplify pipeline creation, vectorize FFT - Add a script to create a pipeline & assets in a single click - Add pipeline executor concept. This exists to (theoretically) let users merge the results of multiple pipelines. --- Scripts/Editor/PipelineExecutorEditor.cs | 70 ++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Scripts/Editor/PipelineExecutorEditor.cs (limited to 'Scripts/Editor/PipelineExecutorEditor.cs') diff --git a/Scripts/Editor/PipelineExecutorEditor.cs b/Scripts/Editor/PipelineExecutorEditor.cs new file mode 100644 index 0000000..857fd84 --- /dev/null +++ b/Scripts/Editor/PipelineExecutorEditor.cs @@ -0,0 +1,70 @@ +#if UNITY_EDITOR + +using UnityEngine; +using UnityEditor; +using System.Linq; + +[CustomEditor(typeof(PipelineExecutor))] +public class PipelineExecutorEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + PipelineExecutor executor = (PipelineExecutor)target; + + EditorGUILayout.Space(); + + if (GUILayout.Button("Auto-Add All Pipelines")) + { + AutoAddPipelines(executor); + } + } + + private void AutoAddPipelines(PipelineExecutor executor) + { + // Find all LinearPipeline components in the current scene + LinearPipeline[] allPipelines = Object.FindObjectsOfType(); + + // Sort by hierarchy order + System.Array.Sort(allPipelines, (a, b) => + { + // Get hierarchy paths and compare + string pathA = GetHierarchyPath(a.transform); + string pathB = GetHierarchyPath(b.transform); + return pathA.CompareTo(pathB); + }); + + LinearPipeline[] existingPipelines = executor.pipelines ?? new LinearPipeline[0]; + LinearPipeline[] newPipelines = allPipelines.Where(p => p != null && !existingPipelines.Contains(p)).ToArray(); + + if (newPipelines.Length > 0) + { + Undo.RecordObject(executor, "Auto-Add Pipelines"); + executor.pipelines = existingPipelines.Concat(newPipelines).ToArray(); + EditorUtility.SetDirty(executor); + Debug.Log($"[PipelineExecutor] Added {newPipelines.Length} new pipelines. Total: {executor.pipelines.Length}"); + } + else + { + Debug.Log("[PipelineExecutor] No new pipelines to add."); + } + } + + private string GetHierarchyPath(Transform transform) + { + System.Collections.Generic.List indices = new System.Collections.Generic.List(); + Transform current = transform; + + while (current != null) + { + indices.Add(current.GetSiblingIndex()); + current = current.parent; + } + + indices.Reverse(); + return string.Join(".", indices.Select(i => i.ToString("D4"))); + } +} + +#endif -- cgit v1.2.3