using System.Collections; using System.Collections.Generic; using System.Reflection; using UnityEditor; using UnityEngine; namespace MeadowGames.UINodeConnect4.EditorScript { [CustomEditor(typeof(GraphManager))] public class Editor_GraphManager : Editor { GraphManager graphManager; public override void OnInspectorGUI() { graphManager = (GraphManager)target; DrawDefaultInspector(); } Port _portClicked = null; bool editConnections = true; private void OnSceneGUI() { GraphManager graphManager = (GraphManager)target; if (!UnityEditor.SceneManagement.EditorSceneManager.IsPreviewScene(graphManager.gameObject.scene)) { Handles.BeginGUI(); GUILayout.BeginArea(new Rect(0, 0, 150, 150)); { editConnections = GUILayout.Toggle(editConnections, "Edit Connections"); if (editConnections) { if (_portClicked) GUILayout.Box("Current " + _portClicked.name); } } GUILayout.EndArea(); Handles.EndGUI(); if (editConnections) { UICSystemManager.UpdateNodeList(); foreach (Node node in UICSystemManager.Nodes) { foreach (Port port in node.ports) { Vector3 position = port.transform.position + Vector3.up * 2f; float size = 20 * graphManager.transform.localScale.x; Handles.color = Color.green; if (Handles.Button(position, Quaternion.identity, size, size, Handles.RectangleHandleCap)) { if (_portClicked == port) { _portClicked = null; } else if (_portClicked) { Connection.NewConnection(_portClicked, port); _portClicked = null; EditorApplication.QueuePlayerLoopUpdate(); } else { _portClicked = port; } } } if (_portClicked) { Vector3 mousePosition = Event.current.mousePosition; Ray ray = HandleUtility.GUIPointToWorldRay(mousePosition); mousePosition = ray.origin; Vector3 position = _portClicked.transform.position + Vector3.up * 2f; Handles.DrawBezier(position, mousePosition, _portClicked.controlPoint.Position + Vector3.up * 2f, mousePosition, Color.grey, null, 2); } for (int i = 0; i < UICSystemManager.Connections.Count; i++) { Connection connection = UICSystemManager.Connections[i]; Vector3 position = (Vector3)connection.line.LerpLine(0.5f).Item1 + Vector3.up * 2f; position = UICUtility.ScreenToWorldPointsForRenderMode(graphManager, position); float size = 20 * graphManager.transform.localScale.x; Handles.color = Color.red; if (Handles.Button(position, Quaternion.identity, size, size, Handles.RectangleHandleCap)) { connection.Remove(); EditorApplication.QueuePlayerLoopUpdate(); } } } } } } } }