using UnityEngine; using UnityEditor; using PathCreation; namespace PathCreation.Examples { [CustomEditor(typeof(PathSceneTool), true)] public class PathSceneToolEditor : Editor { protected PathSceneTool pathTool; bool isSubscribed; public override void OnInspectorGUI() { using (var check = new EditorGUI.ChangeCheckScope()) { DrawDefaultInspector(); if (check.changed) { if (!isSubscribed) { TryFindPathCreator(); Subscribe(); } if (pathTool.autoUpdate) { TriggerUpdate(); } } } if (GUILayout.Button("Manual Update")) { if (TryFindPathCreator()) { TriggerUpdate(); SceneView.RepaintAll(); } } } void TriggerUpdate() { if (pathTool.pathCreator != null) { pathTool.TriggerUpdate(); } } protected virtual void OnPathModified() { if (pathTool.autoUpdate) { TriggerUpdate(); } } protected virtual void OnEnable() { pathTool = (PathSceneTool)target; pathTool.onDestroyed += OnToolDestroyed; if (TryFindPathCreator()) { Subscribe(); TriggerUpdate(); } } void OnToolDestroyed() { if (pathTool != null) { pathTool.pathCreator.pathUpdated -= OnPathModified; } } protected virtual void Subscribe() { if (pathTool.pathCreator != null) { isSubscribed = true; pathTool.pathCreator.pathUpdated -= OnPathModified; pathTool.pathCreator.pathUpdated += OnPathModified; } } bool TryFindPathCreator() { // Try find a path creator in the scene, if one is not already assigned if (pathTool.pathCreator == null) { if (pathTool.GetComponent() != null) { pathTool.pathCreator = pathTool.GetComponent(); } else if (FindObjectOfType()) { pathTool.pathCreator = FindObjectOfType(); } } return pathTool.pathCreator != null; } } }