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}