public override void OnInspectorGUI() { if (labelCaption == null) { initStyle(); } mazeEngineSO.Update(); bool errorFound = false; GUI.changed = false; GUILayout.Space(7); GUILayout.BeginHorizontal(); { GUILayout.BeginVertical(); { GUILayout.BeginHorizontal(); { GUILayout.Space(28); GUILayout.Label("Maze Size", labelCaption, GUILayout.Width(94)); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUI.DrawTexture(EditorGUILayout.GetControlRect(GUILayout.Width(120), GUILayout.Height(50)), mazeIcon, ScaleMode.ScaleToFit); mazeEngine.mazeHeight = EditorGUILayout.IntField(mazeEngine.mazeHeight, textFieldVC, GUILayout.Height(50), GUILayout.Width(30)); if (mazeEngine.mazeHeight < 1) { mazeEngine.mazeHeight = 1; } } GUILayout.EndHorizontal(); mazeEngine.mazeWidth = EditorGUILayout.IntField(mazeEngine.mazeWidth, textFieldHC, GUILayout.Width(97)); if (mazeEngine.mazeWidth < 1) { mazeEngine.mazeWidth = 1; } } GUILayout.EndVertical(); GUILayout.BeginVertical(); { GUILayout.BeginHorizontal(); { GUILayout.Space(28); GUILayout.Label("Piece Size", labelCaption, GUILayout.Width(94)); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); { GUI.DrawTexture(EditorGUILayout.GetControlRect(GUILayout.Width(120), GUILayout.Height(50)), pieceIcon, ScaleMode.ScaleToFit); mazeEngine.mazePieceHeight = EditorGUILayout.FloatField(mazeEngine.mazePieceHeight, textFieldVC, GUILayout.Height(50), GUILayout.Width(30)); } GUILayout.EndHorizontal(); mazeEngine.mazePieceWidth = EditorGUILayout.FloatField(mazeEngine.mazePieceWidth, textFieldHC, GUILayout.Width(97)); } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); mazeEngine.piecePack = (QMazePiecePack)EditorGUILayout.ObjectField("Maze Pieces Pack", mazeEngine.piecePack, typeof(QMazePiecePack), true); if (mazeEngine.piecePack == null) { EditorGUILayout.HelpBox("Maze Pieces Pack is Required", MessageType.Warning); errorFound = true; } mazeEngine.mazeGeometryGenerator = (QMazeGeometryGenerator)EditorGUILayout.ObjectField("Maze Geometry Generator", mazeEngine.mazeGeometryGenerator, typeof(QMazeGeometryGenerator), true); GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); generateStart = GUILayout.Toggle(generateStart, "Generate Start Piece"); EditorGUI.indentLevel++; if (generateStart) { bool generateStartRandomCur = EditorGUILayout.Toggle("Random Position", generateStartRandom, GUILayout.ExpandWidth(true)); if (generateStartRandom != generateStartRandomCur) { generateStartRandom = generateStartRandomCur; mazeEngine.generateStartCount = 0; startPointList.ClearArray(); } if (generateStartRandom) { startPointList.ClearArray(); mazeEngine.startPointList.Clear(); mazeEngine.generateStartCount = EditorGUILayout.IntField("Count", mazeEngine.generateStartCount); } else { generateStartFoldout = showVector2IntList(startPointList, generateStartFoldout); } } else { mazeEngine.generateStartCount = 0; startPointList.ClearArray(); } EditorGUI.indentLevel--; GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); generateFinish = GUILayout.Toggle(generateFinish, "Generate Finish Piece"); EditorGUI.indentLevel++; if (generateFinish) { bool generateFinishRandomCur = EditorGUILayout.Toggle("Random Position", generateFinishRandom, GUILayout.ExpandWidth(true)); if (generateFinishRandom != generateFinishRandomCur) { generateFinishRandom = generateFinishRandomCur; mazeEngine.generateFinishCount = 0; finishPointList.ClearArray(); } if (generateFinishRandom) { finishPointList.ClearArray(); mazeEngine.finishPointList.Clear(); mazeEngine.generateFinishCount = EditorGUILayout.IntField("Count", mazeEngine.generateFinishCount); } else { generateFinishFoldout = showVector2IntList(finishPointList, generateFinishFoldout); } } else { mazeEngine.generateFinishCount = 0; finishPointList.ClearArray(); } EditorGUI.indentLevel--; GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); generateExit = GUILayout.Toggle(generateExit, "Generate Exit"); EditorGUI.indentLevel++; if (generateExit) { generateExitFoldout = showVector2IntList(exitPointList, generateExitFoldout); } else { exitPointList.ClearArray(); } EditorGUI.indentLevel--; GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); generateObstacles = GUILayout.Toggle(generateObstacles, "Obstacles List"); EditorGUI.indentLevel++; if (generateObstacles) { mazeEngine.obstacleIsEmpty = EditorGUILayout.ToggleLeft("Empty Piece in place obstacles", mazeEngine.obstacleIsEmpty, GUILayout.ExpandWidth(true)); generateObstaclesFoldout = showVector2IntList(obstaclePointList, generateObstaclesFoldout); } else { obstaclePointList.ClearArray(); } EditorGUI.indentLevel--; GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); mazeEngine.useSeed = GUILayout.Toggle(mazeEngine.useSeed, "Use seed for generation"); if (mazeEngine.useSeed) { EditorGUI.indentLevel++; mazeEngine.seed = EditorGUILayout.IntField("Seed", mazeEngine.seed); EditorGUI.indentLevel--; } GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); mazeEngine.onlyWay = GUILayout.Toggle(mazeEngine.onlyWay, "Generating with the only path"); if (mazeEngine.gameObject.activeInHierarchy) { GUILayout.Space(5); GUILayout.Box("", GUILayout.Height(1), GUILayout.ExpandWidth(true)); GUILayout.Space(5); if (mazeEngine.transform.childCount == 0) { if (errorFound) { GUI.enabled = false; } if (GUILayout.Button("Generate a Maze", GUILayout.ExpandWidth(true))) { mazeEngine.generateMaze(true, false); } GUI.enabled = true; } else { if (GUILayout.Button("Destroy the Maze", GUILayout.ExpandWidth(true))) { mazeEngine.clear(); } } } GUILayout.Space(5); mazeEngineSO.ApplyModifiedProperties(); if (GUI.changed) { EditorUtility.SetDirty(mazeEngine); } }