Пример #1
0
    public static AITreeDefinition DrawDefinitionEditor(AITreeDefinition value, string label)
    {
        GUILayout.Label(label);
        GUILayout.Label("AI Tree Definition");
        value.name = EditorGUILayout.TextField("Name", value.name);

        value.arguments = EditorGUICustomUtility.DrawArrayEditor(
            value.arguments,
            (x) =>
        {
            var newType  = GenericCustomEditors.AllEnumField <TypeEnumAttribute>(x.type, "");
            var newValue = EditorGUILayout.TextField("", x.value);
            if (newType != x.type || newValue != x.value)
            {
                return(new AITreeDefinitionArgument(newType, newValue));
            }
            else
            {
                return(x);
            }
        },
            "Add Argument",
            () => new AITreeDefinitionArgument(null, ""),
            false);

        return(value);
    }
Пример #2
0
    public override void OnInspectorGUI()
    {
        DropTable dropTable = target as DropTable;

        EditorGUI.BeginChangeCheck();

        var newItems = EditorGUICustomUtility.DrawArrayEditor <DropTableSlot>(
            dropTable.items,
            (x) =>
        {
            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Weight", GUILayout.Width(50));
                GUILayout.Label("Object");
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            {
                x.weight = EditorGUILayout.FloatField(x.weight, GUILayout.Width(50));
                x.drop   = EditorGUILayout.ObjectField("", x.drop, typeof(GameObject), false) as GameObject;
            }
            GUILayout.EndHorizontal();
            return(x);
        },
            "Add item");

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(dropTable, $"Edited Drop Table {dropTable.name}");
            dropTable.items = newItems;

            PrefabUtility.RecordPrefabInstancePropertyModifications(dropTable);

            EditorUtility.SetDirty(dropTable);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
    }
Пример #3
0
    public static void DrawRoomDefinitionEditorSceneGUI(RoomDefinition roomDefinition)
    {
        Handles.BeginGUI();
        {
            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, GUILayout.Width(250), GUILayout.Height(500));
            {
                foreach (var spawnSet in roomDefinition.GetComponentsInChildren <SpawnSet>())
                {
                    EditorGUICustomUtility.DrawSelectableNameField(0, spawnSet.gameObject, "Edit Spawn Set");
                    spawnSet.weight = EditorGUILayout.FloatField("Weight", spawnSet.weight);

                    foreach (var spawnPoint in spawnSet.GetComponentsInChildren <SpawnPoint>())
                    {
                        EditorGUICustomUtility.DrawSelectableNameField(20, spawnPoint.gameObject, "Edit Spawn Point");
                    }

                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.Space(20);
                        if (GUILayout.Button("Add Spawn Point"))
                        {
                            var spawnPoint = GameObjectFactory.Create("SpawnPoint", Vector3.zero, Quaternion.identity, spawnSet.transform);
                            spawnPoint.AddComponent <SpawnPoint>();
                            Undo.RegisterCreatedObjectUndo(spawnPoint, "Create Spawn Point");
                        }
                    }
                    GUILayout.EndHorizontal();
                }
                if (GUILayout.Button("Create new Spawn Set"))
                {
                    var spawnSet = GameObjectFactory.Create("SpawnSet", Vector3.zero, Quaternion.identity, roomDefinition.transform);
                    spawnSet.AddComponent <SpawnSet>();
                    Undo.RegisterCreatedObjectUndo(spawnSet, "Create Spawn Set");
                }
            }
            EditorGUILayout.EndScrollView();
        }
        Handles.EndGUI();
    }
Пример #4
0
    public override void OnInspectorGUI()
    {
        GUILayout.Label(target.name, "BoldLabel");

        LevelDefinition levelDefinition = target as LevelDefinition;

        EditorGUI.BeginChangeCheck();

        GUILayout.Label("Boss Room", "BoldLabel");
        GameObject bossRoom = levelDefinition.bossRoomToInstantiate;

        bossRoom = EditorGUILayout.ObjectField(bossRoom, typeof(GameObject), false) as GameObject;

        GUILayout.Label(new GUIContent("Inherrited Definitions", "These level definitions will be inherrited by the current level definition. It behaives a little like css."), "BoldLabel");

        var newDefinitionsToInherrit = levelDefinition.definitionsToInherrit =
            EditorGUICustomUtility.DrawArrayEditor(
                levelDefinition.definitionsToInherrit,
                (x) =>
        {
            return(EditorGUILayout.ObjectField("", x, typeof(LevelDefinition), true) as LevelDefinition);
        },
                "Add Inherrited Definition");



        GUIStyle warningStyle = "label";

        warningStyle.richText = true;


        LevelDefinition[] defs = LevelDefinition.ResolveDependancies(levelDefinition);

        GUILayout.Space(10);

        GUILayout.Label("All Inherrited Definitions", "BoldLabel");

        foreach (var def in defs)
        {
            GUILayout.Label(def.name);
        }

        GUILayout.Space(50);



        GUILayout.Label(new GUIContent("Room Prefabs", "A set of rooms that can spawn on this level."), "BoldLabel");
        var newRoomArray = EditorGUICustomUtility.DrawArrayEditor(
            levelDefinition.roomsToInstantiate,
            (x) =>
        {
            x = EditorGUILayout.ObjectField("", x, typeof(GameObject), true) as GameObject;

            if (x != null)
            {
                var roomData = x.GetComponent <RoomDefinition>();
                if (roomData == null)
                {
                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.Label("<color=red>Warning:</color> Room is missing definition");
                        if (GUILayout.Button("Fix", GUILayout.Width(70)))
                        {
                            x.AddComponent <RoomDefinition>();
                        }
                    }
                    GUILayout.EndHorizontal();
                }
                else
                {
                    Editor editor = Editor.CreateEditor(roomData);
                    editor.OnInspectorGUI();
                }
                CheckErrorRoomIsCenter(x);
                CheckErrorObjectInPosition(x, "Walls", Vector3.zero);
                CheckErrorObjectInPosition(x, "Ground", Vector3.zero);
                CheckErrorObjectInPosition(x, "door_1000", new Vector3(0, 2, 0));
                CheckErrorObjectInPosition(x, "door_0100", new Vector3(0, 3, 0));
                CheckErrorObjectInPosition(x, "door_0010", new Vector3(0, 2, 0));
                CheckErrorObjectInPosition(x, "door_0001", new Vector3(0, 0, 0));
                CheckErrorObjectInPosition(x, "door_down", new Vector3(0, 0, 0));
                CheckErrorObjectInPosition(x, "door_down/closed_down", new Vector3(0, 0, 0));
                RoomHasGrid(x);
            }

            return(x);
        },
            "Add Room");

        CheckErrorsForInherritdDefinitions(warningStyle, defs);

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(levelDefinition, "Edited Level Definition: " + levelDefinition.name);
            levelDefinition.definitionsToInherrit = newDefinitionsToInherrit;
            levelDefinition.roomsToInstantiate    = newRoomArray;
            levelDefinition.bossRoomToInstantiate = bossRoom;

            PrefabUtility.RecordPrefabInstancePropertyModifications(levelDefinition);

            EditorUtility.SetDirty(target);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
    }