blob: f2530ec1908a9ed895de0e4aedfbdd33709352d7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
using GraphProcessor;
using UnityEngine.UIElements;
using UnityEngine;
using System.Linq;
[NodeCustomEditor(typeof(KeyframeNode))]
public class KeyframeNodeView : BaseNodeView
{
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()
{
generateButton = new Button(OnGenerateClick) { text = "Generate Keyframe" };
controlsContainer.Add(generateButton);
onPortConnected += _ => Validate();
onPortDisconnected += _ => Validate();
schedule.Execute(Validate).Every(200);
Validate();
}
void OnGenerateClick()
{
var go = GetConnectedGameObject();
if (go?.GetComponent<MeshRenderer>() == null) return;
var foldNode = GetConnectedFoldNode();
Debug.Log($"Generating Keyframe for '{go.name}' using Fold Data: {(foldNode?.name ?? "None")}");
}
T GetConnectedNode<T>(string fieldName) where T : class
{
var edge = GetFirstPortViewFromFieldName(fieldName)?.GetEdges().FirstOrDefault();
return (edge?.output.node as BaseNodeView)?.nodeTarget as T;
}
GameObject GetConnectedGameObject() => GetConnectedNode<GameObjectNode>(nameof(KeyframeNode.targetObject))?.output;
BaseFoldNode GetConnectedFoldNode() => GetConnectedNode<BaseFoldNode>(nameof(KeyframeNode.foldData));
void Validate()
{
var go = GetConnectedGameObject();
bool hasGoConn = GetFirstPortViewFromFieldName(nameof(KeyframeNode.targetObject))?.GetEdges().Any() ?? false;
bool hasFoldConn = GetFirstPortViewFromFieldName(nameof(KeyframeNode.foldData))?.GetEdges().Any() ?? false;
RemoveMessageView(ERROR_TYPE);
RemoveMessageView(ERROR_REND);
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);
}
}
|