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); }
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(); } }
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(); }
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(); } }