summaryrefslogtreecommitdiffstats
path: root/Scripts/Fold/Editor/KeyframeNodeView.cs
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-01-02 03:21:42 -0800
committeryum <yum.food.vr@gmail.com>2026-01-02 03:21:42 -0800
commitbabfcc18ceb3a30eecdf4d00a4f42ff03ca10b5b (patch)
treea1ae5451f4e1cc99bc51f06af970d90b2c00f37b /Scripts/Fold/Editor/KeyframeNodeView.cs
parent22273213986052c9464a852c7240b106bc22bebb (diff)
Fold: simplify code
Diffstat (limited to 'Scripts/Fold/Editor/KeyframeNodeView.cs')
-rw-r--r--Scripts/Fold/Editor/KeyframeNodeView.cs110
1 files changed, 39 insertions, 71 deletions
diff --git a/Scripts/Fold/Editor/KeyframeNodeView.cs b/Scripts/Fold/Editor/KeyframeNodeView.cs
index c35b215..f2530ec 100644
--- a/Scripts/Fold/Editor/KeyframeNodeView.cs
+++ b/Scripts/Fold/Editor/KeyframeNodeView.cs
@@ -6,88 +6,56 @@ using System.Linq;
[NodeCustomEditor(typeof(KeyframeNode))]
public class KeyframeNodeView : BaseNodeView
{
- Button generateButton;
- const string ERROR_MSG_NO_GAMEOBJECT = "GameObject input has wrong type";
- const string ERROR_MSG_NO_RENDERER = "GameObject must have a MeshRenderer component";
+ Button generateButton;
+ const string ERROR_TYPE = "GameObject input has wrong type";
+ const string ERROR_REND = "GameObject must have a MeshRenderer component";
- public override void Enable()
- {
- var node = nodeTarget as KeyframeNode;
-
- generateButton = new Button(OnGenerateClick)
+ public override void Enable()
{
- text = "Generate Keyframe"
- };
- controlsContainer.Add(generateButton);
-
- // Update validation on connectivity changes.
- onPortConnected += _ => Validate();
- onPortDisconnected += _ => Validate();
-
- // Check periodically in case the value in the GameObjectNode changes.
- // Best effort.
- schedule.Execute(Validate).Every(200);
+ generateButton = new Button(OnGenerateClick) { text = "Generate Keyframe" };
+ controlsContainer.Add(generateButton);
- Validate();
- }
+ onPortConnected += _ => Validate();
+ onPortDisconnected += _ => Validate();
+ schedule.Execute(Validate).Every(200);
- void OnGenerateClick()
- {
- var go = GetConnectedGameObject();
- // The button should be disabled if invalid, but safety check:
- if (go == null || go.GetComponent<MeshRenderer>() == null) return;
-
- var foldNode = GetConnectedFoldNode();
- Debug.Log($"Generating Keyframe for '{go.name}' using Fold Data: {(foldNode != null ? foldNode.name : "None")}");
- // TODO
- }
-
- GameObject GetConnectedGameObject()
- {
- var portView = GetFirstPortViewFromFieldName(nameof(KeyframeNode.targetObject));
- if (portView == null || portView.GetEdges().Count == 0) return null;
+ Validate();
+ }
- var edge = portView.GetEdges().First();
- var outputNode = (edge.output.node as BaseNodeView)?.nodeTarget;
+ void OnGenerateClick()
+ {
+ var go = GetConnectedGameObject();
+ if (go?.GetComponent<MeshRenderer>() == null) return;
- if (outputNode is GameObjectNode goNode) {
- return goNode.output;
+ var foldNode = GetConnectedFoldNode();
+ Debug.Log($"Generating Keyframe for '{go.name}' using Fold Data: {(foldNode?.name ?? "None")}");
}
- return null;
- }
- BaseFoldNode GetConnectedFoldNode()
- {
- var portView = GetFirstPortViewFromFieldName(nameof(KeyframeNode.foldData));
- if (portView == null || portView.GetEdges().Count == 0) return null;
+ T GetConnectedNode<T>(string fieldName) where T : class
+ {
+ var edge = GetFirstPortViewFromFieldName(fieldName)?.GetEdges().FirstOrDefault();
+ return (edge?.output.node as BaseNodeView)?.nodeTarget as T;
+ }
- var edge = portView.GetEdges().First();
- return (edge.output.node as BaseNodeView)?.nodeTarget as BaseFoldNode;
- }
+ GameObject GetConnectedGameObject() => GetConnectedNode<GameObjectNode>(nameof(KeyframeNode.targetObject))?.output;
- void Validate()
- {
- var go = GetConnectedGameObject();
- bool hasTargetConnection = GetFirstPortViewFromFieldName(nameof(KeyframeNode.targetObject))?.GetEdges().Count > 0;
- bool hasFoldConnection = GetFirstPortViewFromFieldName(nameof(KeyframeNode.foldData))?.GetEdges().Count > 0;
+ BaseFoldNode GetConnectedFoldNode() => GetConnectedNode<BaseFoldNode>(nameof(KeyframeNode.foldData));
- // Clear previous error.
- RemoveMessageView(ERROR_MSG_NO_RENDERER);
- RemoveMessageView(ERROR_MSG_NO_GAMEOBJECT);
+ void Validate()
+ {
+ var go = GetConnectedGameObject();
+ bool hasGoConn = GetFirstPortViewFromFieldName(nameof(KeyframeNode.targetObject))?.GetEdges().Any() ?? false;
+ bool hasFoldConn = GetFirstPortViewFromFieldName(nameof(KeyframeNode.foldData))?.GetEdges().Any() ?? false;
- bool isValid = false;
- if (hasTargetConnection) {
- if (go == null) {
- // Has connection but it's not a GameObject.
- AddMessageView(ERROR_MSG_NO_GAMEOBJECT, NodeMessageType.Error);
- } else if (go.GetComponent<MeshRenderer>() == null) {
- AddMessageView(ERROR_MSG_NO_RENDERER, NodeMessageType.Error);
- } else {
- isValid = true;
- }
- }
+ RemoveMessageView(ERROR_TYPE);
+ RemoveMessageView(ERROR_REND);
- generateButton.SetEnabled(isValid && hasFoldConnection);
- }
-}
+ if (hasGoConn)
+ {
+ if (go == null) AddMessageView(ERROR_TYPE, NodeMessageType.Error);
+ else if (go.GetComponent<MeshRenderer>() == null) AddMessageView(ERROR_REND, NodeMessageType.Error);
+ }
+ generateButton.SetEnabled(hasGoConn && hasFoldConn && go?.GetComponent<MeshRenderer>() != null);
+ }
+} \ No newline at end of file