Пример #1
0
    private void OnGUIAreas()
    {
        CAINavEditorSettings targ = (CAINavEditorSettings)target;

        string[] areaNames = targ.areaNames;

        EditorGUILayout.Separator();

        for (int i = 0; i < areaNames.Length; i++)
        {
            if (areaNames[i] == CAINavEditorSettings.Undefined)
            {
                continue;
            }

            EditorGUILayout.BeginHorizontal();

            GUI.enabled = (i != Navmesh.NullArea);

            string areaName = EditorGUILayout.TextField(i.ToString(), areaNames[i]);

            // Note: Extra checks reduce the need to run the last check, which is more expensive.
            if (areaName.Length > 0 &&
                areaName != areaNames[i] &&
                areaName != CAINavEditorSettings.NotWalkable &&  // Quick check.
                areaName != CAINavEditorSettings.Undefined &&  // This check is important.
                targ.GetArea(areaName) == CAINavEditorSettings.UnknownArea)
            {
                areaNames[i] = areaName;
            }

            GUI.enabled = !(i == Navmesh.NullArea || i == Navmesh.MaxArea);

            if (GUILayout.Button("X", GUILayout.Width(30)))
            {
                areaNames[i] = CAINavEditorSettings.Undefined;

                mNewArea  = NextUndefinedArea();
                mFocusNew = true;  // Prevents off GUI behavior.

                GUI.changed = true;
            }

            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();
        }

        EditorGUILayout.Separator();

        EditorGUILayout.BeginHorizontal();

        GUI.SetNextControlName(AddAreaName);
        mNewArea = NavUtil.ClampArea(EditorGUILayout.IntField(mNewArea, GUILayout.Width(80)));
        if (mFocusNew)
        {
            GUI.FocusControl(AddAreaName);
            mFocusNew = false;
        }

        GUI.enabled = (areaNames[mNewArea] == CAINavEditorSettings.Undefined);

        if (GUILayout.Button("Add", GUILayout.Width(80)))
        {
            areaNames[mNewArea] = "Area " + mNewArea;
            mNewArea            = NextUndefinedArea();
            mFocusNew           = true;
            GUI.changed         = true;
        }

        GUI.enabled = true;

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        EditorGUILayout.LabelField("Maximum allowed area: " + Navmesh.MaxArea
                                   , EditorUtil.HelpStyle, GUILayout.ExpandWidth(true));
    }