summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Scripts/Fold/Editor/BaseFoldNode.cs8
-rw-r--r--Scripts/Fold/Editor/FoldGraphView.cs1
-rw-r--r--Scripts/Fold/Editor/FoldToolbarView.cs17
-rw-r--r--Scripts/Fold/Editor/FoldWindow.cs4
-rw-r--r--Scripts/Fold/Editor/KeyframeNode.cs15
-rw-r--r--Scripts/Fold/Editor/KeyframeNodeView.cs45
-rw-r--r--Scripts/Fold/Editor/PointAlignNode.cs13
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";
}