public static void OnNavigationGUI(Object target) { s_ShowGizmos = EditorGUILayout.Toggle("Gizmos", s_ShowGizmos); s_ShowConnectionWidth = EditorGUILayout.Toggle("Connection width", s_ShowConnectionWidth); s_WaypointColour = EditorGUILayout.ColorField("Waypoint colour", s_WaypointColour); s_ConnectionColour = EditorGUILayout.ColorField("Connection colour", s_ConnectionColour); Navigation.SeekerIterationCap = EditorGUILayout.IntField("Seeker iterations", Navigation.SeekerIterationCap); EditorGUILayout.Space(); GUILayout.Label("Autoconnect", EditorStyles.boldLabel); s_AutoConnectMaxWidth = EditorGUILayout.FloatField("Max test width", s_AutoConnectMaxWidth); s_MinConnectionWidth = EditorGUILayout.FloatField("Min test width", s_MinConnectionWidth); s_AutoConnectSearchStep = EditorGUILayout.FloatField("Test step", s_AutoConnectSearchStep); s_AutoConnectBlockingLayer = EditorGUILayout.LayerField("Blocking layers", s_AutoConnectBlockingLayer); GUILayout.BeginHorizontal(); GUILayout.Space(103); GUILayout.BeginVertical(); if (GUILayout.Button("Auto connect", EditorStyles.miniButton)) { Navigation.AutoConnect(1 << s_AutoConnectBlockingLayer, s_MinConnectionWidth, s_AutoConnectMaxWidth, s_AutoConnectSearchStep); foreach (Waypoint waypoint in Navigation.Waypoints) { EditorUtility.SetDirty(waypoint); } EditorUtility.SetDirty(Navigation.Instance); UpdateLists(target); } if (GUILayout.Button("Auto scale", EditorStyles.miniButton)) { Navigation.AutoScale(1 << s_AutoConnectBlockingLayer, s_MinConnectionWidth, s_AutoConnectMaxWidth, s_AutoConnectSearchStep); foreach (Waypoint waypoint in Navigation.Waypoints) { EditorUtility.SetDirty(waypoint); } EditorUtility.SetDirty(Navigation.Instance); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); EditorGUILayout.Space(); if (GUILayout.Button("Disconnect all", EditorStyles.miniButton)) { Navigation.Disconnect(); foreach (Waypoint waypoint in Navigation.Waypoints) { EditorUtility.SetDirty(waypoint); } UpdateLists(target); } EditorGUILayout.Space(); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); s_ShowWaypointFoldout = EditorGUILayout.Foldout(s_ShowWaypointFoldout, "Waypoints", BoldFoldoutStyle); if (s_ShowWaypointFoldout) { GUILayout.BeginHorizontal(); int newWaypointIndex = EditorGUILayout.Popup(s_WaypointDropDownIndex, s_WaypointSelectionNames); if (s_WaypointDropDownIndex != newWaypointIndex && newWaypointIndex > 1) { s_WaypointDropDownIndex = newWaypointIndex; SelectWaypoint(s_Waypoints[s_WaypointDropDownIndex - 2]); } GUILayout.Space(kDropDownRightButtonOverlap); GUI.enabled = s_WaypointDropDownIndex - 1 > 1; if (GUILayout.Button("<", EditorStyles.miniButtonMid, GUILayout.Width(kPlusMinusWidth))) { s_WaypointDropDownIndex--; if (s_WaypointDropDownIndex == 1) { s_WaypointDropDownIndex = 0; } SelectWaypoint(s_Waypoints[s_WaypointDropDownIndex - 2]); } GUI.enabled = s_WaypointDropDownIndex + 1 < s_WaypointSelectionNames.Length; if (GUILayout.Button(">", EditorStyles.miniButtonMid, GUILayout.Width(kPlusMinusWidth))) { s_WaypointDropDownIndex++; if (s_WaypointDropDownIndex == 1) { s_WaypointDropDownIndex = s_Waypoints.Count > 0 ? 2 : 0; } SelectWaypoint(s_Waypoints[s_WaypointDropDownIndex - 2]); } GUI.enabled = true; if (GUILayout.Button("+", EditorStyles.miniButtonMid, GUILayout.Width(kPlusMinusWidth))) { Waypoint newWaypoint = Navigation.RegisterWaypoint(CreateWaypoint()); EditorUtility.SetDirty(Navigation.Instance); UpdateLists(target); s_WaypointDropDownIndex = s_Waypoints.IndexOf(newWaypoint) + 2; SelectWaypoint(newWaypoint); } GUI.enabled = s_WaypointDropDownIndex > 1; if (GUILayout.Button("-", EditorStyles.miniButtonRight, GUILayout.Width(kPlusMinusWidth))) { Selection.activeObject = Navigation.Instance.gameObject; Navigation.UnregisterWaypoint(s_Waypoints[s_WaypointDropDownIndex - 2]); DestroyImmediate(s_Waypoints[s_WaypointDropDownIndex - 2].gameObject); s_WaypointDropDownIndex = 0; EditorUtility.SetDirty(Navigation.Instance); } GUI.enabled = true; GUILayout.EndHorizontal(); } }