public override void OnInspectorGUI() { base.OnInspectorGUI(); serializedObject.Update(); EditorGUI.BeginChangeCheck(); #region Level Options EditorGUILayout.BeginVertical("Box", GUILayout.Width(435f)); EditorGUILayout.LabelField("Level Options"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Starting Row", GUILayout.ExpandWidth(true)); levelData.startingRow = EditorGUILayout.IntField(levelData.startingRow, GUILayout.Width(40f)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number of balls", GUILayout.ExpandWidth(true)); levelData.numberOfBalls = EditorGUILayout.IntField(levelData.numberOfBalls, GUILayout.Width(40f)); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); #endregion #region Level layout editing EditorGUILayout.BeginVertical("Box", GUILayout.Width(400f)); EditorGUILayout.LabelField("Level Layout", GUILayout.ExpandWidth(false)); EditorGUILayout.BeginVertical("Box", GUILayout.ExpandWidth(false)); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add row")) { Undo.RecordObject(target, "Added row"); levelData.AddRow(); } if (GUILayout.Button("Clear Layout")) { Undo.RecordObject(target, "Cleared level layout"); levelData.ClearData(); } EditorGUILayout.EndHorizontal(); for (int i = levelData.RowCount - 1; i >= 0; i--) { EditorGUILayout.BeginHorizontal("Box", GUILayout.ExpandWidth(false)); EditorGUILayout.LabelField("Row " + (i + 1), GUILayout.Width(60f)); for (int j = 0; j < 9; j++) { EditorGUILayout.BeginVertical("Box"); Undo.RecordObject(target, "Changed block"); int newValue = EditorGUILayout.IntField(levelData[i][j].value, GUILayout.Width(20f)); levelData[i][j].value = newValue; levelData[i][j].type = (BlockType)EditorGUILayout.EnumPopup(levelData[i][j].type, GUILayout.Width(20f)); EditorGUILayout.EndVertical(); } if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { levelData.RemoveRow(i); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.EndVertical(); #endregion if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(levelData); } }