A game about forced loneliness, made by TACStudios
1using System.Collections.Generic;
2using System.Linq;
3using UnityEditor;
4using UnityEngine;
5
6namespace Unity.VisualScripting
7{
8 [Editor(typeof(FlowGraph))]
9 public class FlowGraphEditor : GraphEditor
10 {
11 public FlowGraphEditor(Metadata metadata) : base(metadata) { }
12
13 private new FlowGraph graph => (FlowGraph)base.graph;
14
15 private Metadata controlInputDefinitionsMetadata => metadata[nameof(FlowGraph.controlInputDefinitions)];
16 private Metadata controlOutputDefinitionsMetadata => metadata[nameof(FlowGraph.controlOutputDefinitions)];
17 private Metadata valueInputDefinitionsMetadata => metadata[nameof(FlowGraph.valueInputDefinitions)];
18 private Metadata valueOutputDefinitionsMetadata => metadata[nameof(FlowGraph.valueOutputDefinitions)];
19
20 private IEnumerable<Warning> warnings => UnitPortDefinitionUtility.Warnings((FlowGraph)metadata.value);
21
22 protected override float GetHeight(float width, GUIContent label)
23 {
24 var height = 0f;
25
26 height += GetHeaderHeight(width);
27
28 height += GetControlInputDefinitionsHeight(width);
29
30 height += EditorGUIUtility.standardVerticalSpacing;
31
32 height += GetControlOutputDefinitionsHeight(width);
33
34 height += EditorGUIUtility.standardVerticalSpacing;
35
36 height += GetValueInputDefinitionsHeight(width);
37
38 height += EditorGUIUtility.standardVerticalSpacing;
39
40 height += GetValueOutputDefinitionsHeight(width);
41
42 if (warnings.Any())
43 {
44 height += EditorGUIUtility.standardVerticalSpacing;
45
46 foreach (var warning in warnings)
47 {
48 height += warning.GetHeight(width);
49 }
50 }
51
52 return height;
53 }
54
55 protected override void OnGUI(Rect position, GUIContent label)
56 {
57 BeginLabeledBlock(metadata, position, label);
58
59 OnHeaderGUI(position);
60
61 EditorGUI.BeginChangeCheck();
62
63 LudiqGUI.Inspector(controlInputDefinitionsMetadata, position.VerticalSection(ref y, GetControlInputDefinitionsHeight(position.width)));
64
65 y += EditorGUIUtility.standardVerticalSpacing;
66
67 LudiqGUI.Inspector(controlOutputDefinitionsMetadata, position.VerticalSection(ref y, GetControlOutputDefinitionsHeight(position.width)));
68
69 y += EditorGUIUtility.standardVerticalSpacing;
70
71 LudiqGUI.Inspector(valueInputDefinitionsMetadata, position.VerticalSection(ref y, GetValueInputDefinitionsHeight(position.width)));
72
73 y += EditorGUIUtility.standardVerticalSpacing;
74
75 LudiqGUI.Inspector(valueOutputDefinitionsMetadata, position.VerticalSection(ref y, GetValueOutputDefinitionsHeight(position.width)));
76
77 if (EditorGUI.EndChangeCheck())
78 {
79 graph.PortDefinitionsChanged();
80 }
81
82 if (warnings.Any())
83 {
84 y += EditorGUIUtility.standardVerticalSpacing;
85
86 foreach (var warning in warnings)
87 {
88 y--;
89 warning.OnGUI(position.VerticalSection(ref y, warning.GetHeight(position.width) + 1));
90 }
91 }
92
93 EndBlock(metadata);
94 }
95
96 private float GetControlInputDefinitionsHeight(float width)
97 {
98 return LudiqGUI.GetInspectorHeight(this, controlInputDefinitionsMetadata, width);
99 }
100
101 private float GetControlOutputDefinitionsHeight(float width)
102 {
103 return LudiqGUI.GetInspectorHeight(this, controlOutputDefinitionsMetadata, width);
104 }
105
106 private float GetValueInputDefinitionsHeight(float width)
107 {
108 return LudiqGUI.GetInspectorHeight(this, valueInputDefinitionsMetadata, width);
109 }
110
111 private float GetValueOutputDefinitionsHeight(float width)
112 {
113 return LudiqGUI.GetInspectorHeight(this, valueOutputDefinitionsMetadata, width);
114 }
115 }
116}