public PartitionAlgorithm GetSelectedPartitionAlgorithm()
        {
            PartitionAlgorithm selectedPartitionAlgorithm = (PartitionAlgorithm)System.Enum.GetValues(typeof(PartitionAlgorithm)).GetValue(partitionAlgorithm.enumValueIndex);

            return(selectedPartitionAlgorithm);
        }
        public override void OnInspectorGUI()
        {
            // Update the serializedProperty - always do this in the beginning of OnInspectorGUI.
            editor.serializedObject.Update();

            // we draw our own inspector
            // DrawDefaultInspector();

            serializedObject.Update();


            GUILayout.BeginVertical("box");
            {
                EditorGUILayout.HelpBox("Spawn Biome Masks on the Terrain", MessageType.Info);

                //
                // Biomes
                //
                biomeModule.OnInspectorGUI();

                //
                // Lake
                //
                lakeModule.OnInspectorGUI();

                //
                // Processing
                //
                processingModule.OnInspectorGUI();

                // modules depending on partition algorithm
                PartitionAlgorithm selectedPartitionAlgorithm = processingModule.GetSelectedPartitionAlgorithm();

                // partitioning algorithm
                switch (selectedPartitionAlgorithm)
                {
                case PartitionAlgorithm.Voronoi:
                    voronoiModule.OnInspectorGUI();
                    shapeModule.OnInspectorGUI();
                    break;

                case PartitionAlgorithm.Rectangular:
                    rectangularPartitionModule.OnInspectorGUI();
                    shapeModule.OnInspectorGUI();
                    break;

                case PartitionAlgorithm.Hexagon:
                    hexagonModule.OnInspectorGUI();
                    shapeModule.OnInspectorGUI();
                    break;

                case PartitionAlgorithm.Line:
                    lineModule.OnInspectorGUI();
                    break;

                case PartitionAlgorithm.River:
                    riverModule.OnInspectorGUI();
                    break;

                case PartitionAlgorithm.Road:
                    roadModule.OnInspectorGUI();
                    voronoiModule.OnInspectorGUI();
                    shapeModule.OnInspectorGUI();
                    break;

                default:
                    throw new System.ArgumentException("Unsupported Partition Algorithm " + extension.boundsSettings.partitionAlgorithm);
                }


                // action buttons
                switch (selectedPartitionAlgorithm)
                {
                case PartitionAlgorithm.Voronoi:
                case PartitionAlgorithm.Rectangular:
                case PartitionAlgorithm.Hexagon:
                case PartitionAlgorithm.Line:
                case PartitionAlgorithm.River:
                    maskCreationActionModule.OnInspectorGUI();
                    vegetationStudioProActionModule.OnInspectorGUI();
                    break;

                case PartitionAlgorithm.Road:
                    roadCreationActionModule.OnInspectorGUI();
                    vegetationStudioProActionModule.OnInspectorGUI();
                    break;

                default:
                    throw new System.ArgumentException("Unsupported Partition Algorithm " + extension.boundsSettings.partitionAlgorithm);
                }
            }
            GUILayout.EndVertical();

            // Apply changes to the serializedProperty - always do this in the end of OnInspectorGUI.
            editor.serializedObject.ApplyModifiedProperties();

            // initial check has been performed
            performInitialConsistencyCheck = false;
        }