diff options
| -rw-r--r-- | Scripts/Fold/Editor/BaseFoldNode.cs | 8 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/FoldGraphView.cs | 1 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/FoldToolbarView.cs | 17 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/FoldWindow.cs | 4 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/KeyframeNode.cs | 15 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/KeyframeNodeView.cs | 45 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/PointAlignNode.cs | 13 |
7 files changed, 73 insertions, 30 deletions
diff --git a/Scripts/Fold/Editor/BaseFoldNode.cs b/Scripts/Fold/Editor/BaseFoldNode.cs index 611e1be..95d9eb7 100644 --- a/Scripts/Fold/Editor/BaseFoldNode.cs +++ b/Scripts/Fold/Editor/BaseFoldNode.cs @@ -1,7 +1,5 @@ using GraphProcessor; -public class BaseFoldNode : BaseNode -{ - [Input(name = "Input")] - public BaseNode input; -} +// Empty class used to just filter out *our* subset of nodes. +public class BaseFoldNode : BaseNode {}; + diff --git a/Scripts/Fold/Editor/FoldGraphView.cs b/Scripts/Fold/Editor/FoldGraphView.cs index 7b592cd..2a94b9f 100644 --- a/Scripts/Fold/Editor/FoldGraphView.cs +++ b/Scripts/Fold/Editor/FoldGraphView.cs @@ -18,3 +18,4 @@ public class FoldGraphView : BaseGraphView } } } + diff --git a/Scripts/Fold/Editor/FoldToolbarView.cs b/Scripts/Fold/Editor/FoldToolbarView.cs deleted file mode 100644 index 1d31fd7..0000000 --- a/Scripts/Fold/Editor/FoldToolbarView.cs +++ /dev/null @@ -1,17 +0,0 @@ -using GraphProcessor; -using UnityEngine; -using UnityEditor; - -public class FoldToolbarView : ToolbarView -{ - public FoldToolbarView(BaseGraphView graphView) : base(graphView) {} - - protected override void AddButtons() - { - base.AddButtons(); - - AddButton("Generate keyframe", () => { - // TODO - }); - } -} diff --git a/Scripts/Fold/Editor/FoldWindow.cs b/Scripts/Fold/Editor/FoldWindow.cs index 186008c..0203db1 100644 --- a/Scripts/Fold/Editor/FoldWindow.cs +++ b/Scripts/Fold/Editor/FoldWindow.cs @@ -29,11 +29,9 @@ public class FoldWindow : BaseGraphWindow { titleContent = new GUIContent("Fold"); + // Create the graph view with our custom view if (graphView == null) - { graphView = new FoldGraphView(this); - graphView.Add(new FoldToolbarView(graphView)); - } rootView.Add(graphView); } diff --git a/Scripts/Fold/Editor/KeyframeNode.cs b/Scripts/Fold/Editor/KeyframeNode.cs new file mode 100644 index 0000000..d82bf51 --- /dev/null +++ b/Scripts/Fold/Editor/KeyframeNode.cs @@ -0,0 +1,15 @@ +using GraphProcessor; +using UnityEngine; + +[System.Serializable, NodeMenuItem("Fold/Keyframe")] +public class KeyframeNode : BaseFoldNode +{ + [Input(name = "Game Object")] + public GameObject targetObject; + + [Input(name = "Fold Data")] + public BaseFoldNode foldData; + + public override string name => "Keyframe"; +} + diff --git a/Scripts/Fold/Editor/KeyframeNodeView.cs b/Scripts/Fold/Editor/KeyframeNodeView.cs new file mode 100644 index 0000000..75c7bfa --- /dev/null +++ b/Scripts/Fold/Editor/KeyframeNodeView.cs @@ -0,0 +1,45 @@ +using GraphProcessor; +using UnityEngine.UIElements; +using UnityEngine; +using System.Linq; + +[NodeCustomEditor(typeof(KeyframeNode))] +public class KeyframeNodeView : BaseNodeView +{ + Button generateButton; + + public override void Enable() + { + var node = nodeTarget as KeyframeNode; + + generateButton = new Button(() => { + Debug.Log($"Generating Keyframe for '{node.targetObject.name}' using fold data from '{node.foldData.name}'"); + }) + { + text = "Generate Keyframe" + }; + + controlsContainer.Add(generateButton); + + // Subscribe to connection events. This lets us disable the button when + // the keyframe node is not in a valid state. + onPortConnected += (p) => RefreshButtonState(); + onPortDisconnected += (p) => RefreshButtonState(); + + // Initial state check. + // We use schedule to ensure ports are fully initialized before checking. + schedule.Execute(RefreshButtonState).ExecuteLater(0); + } + + void RefreshButtonState() + { + if (generateButton == null) return; + + // Enable the keyframing button once both ports are connected. + bool targetConnected = GetPortViewsFromFieldName(nameof(KeyframeNode.targetObject)) + .Any(pv => pv.GetEdges().Count > 0); + bool foldConnected = GetPortViewsFromFieldName(nameof(KeyframeNode.foldData)) + .Any(pv => pv.GetEdges().Count > 0); + generateButton.SetEnabled(targetConnected && foldConnected); + } +} diff --git a/Scripts/Fold/Editor/PointAlignNode.cs b/Scripts/Fold/Editor/PointAlignNode.cs index 9a3f913..d9f560f 100644 --- a/Scripts/Fold/Editor/PointAlignNode.cs +++ b/Scripts/Fold/Editor/PointAlignNode.cs @@ -4,12 +4,15 @@ using UnityEngine; [System.Serializable, NodeMenuItem("Fold/PointAlign")] public class PointAlignNode : BaseFoldNode { - [Input(name = "po")] - public float po; + [Input(name = "Input")] + public BaseFoldNode input; - [Output(name = "Out")] - public PointAlignNode output; + [Input(name = "po")] + public float po; - public override string name => "Point Align"; + [Output(name = "Out")] + public PointAlignNode output; + + public override string name => "Point Align"; } |
