Ejemplo n.º 1
0
        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();
            }
        }