bool VerifyConfiguration(SliceConfigurationFile sliceConfigurationFile)
        {
            var errorsExist = false;
            var errors      = "Please fix the following errors:";

            if (!sliceConfigurationFile.SliceConfiguration.AllFoldersSpecified)
            {
                errors     += "\n\nOne or more save folders have not been specified!";
                errorsExist = true;
            }

            if (!sliceConfigurationFile.SliceConfiguration.AllOutputNamesSpecified)
            {
                errors     += "\n\nOne or more output names have not been specified!";
                errorsExist = true;
            }

            if (errorsExist)
            {
                EditorUtility.DisplayDialog("Error", errors, "OK");
                return(false);
            }
            else
            {
                return(true);
            }
        }
        void Slice(SliceConfigurationFile sliceConfigurationFile)
        {
            SliceConfiguration sliceConfigurationToUse = new SliceConfiguration(sliceConfigurationFile.SliceConfiguration);

            var slicer = new Slicer(sliceConfigurationToUse, new VersionDependentDataCopier());

            string additionalDetails;

            try
            {
                additionalDetails = slicer.InitializeSlice(new CustomTreeDataHandler());
            }
            catch (System.Exception exception)
            {
                SliceException sliceException = exception as SliceException;
                if (sliceException != null)
                {
                    EditorUtility.DisplayDialog("Slicing Error", sliceException.ReasonSliceFailed, "OK");
                    return;
                }

                SliceCanceledException cancelException = exception as SliceCanceledException;
                if (cancelException != null)
                {
                    return;
                }

                throw exception;
            }

            if (additionalDetails != "")
            {
                Debug.Log(additionalDetails);
            }
        }
        public override void OnInspectorGUI()
        {
            editor.OnInspectorGUI();
            SliceConfigurationFile sliceConfigurationFile = (SliceConfigurationFile)serializedObject.targetObject;

            if (sliceConfigurationFile.SliceConfiguration.HasTerrainSample)
            {
                if (!Application.isPlaying && GUILayout.Button("Initiate Slice") && VerifyConfiguration(sliceConfigurationFile))
                {
                    if (sliceConfigurationFile.SliceConfiguration.SliceMethod == SliceMethod.SliceTerrainGroup || SceneView.lastActiveSceneView.orthographic || EditorUtility.DisplayDialog("Warning", "Scene View not in orthographic mode. Slicing Grid may not accurately represent area to slice. Do " +
                                                                                                                                                                                            "you wish to Proceed?", "Proceed"))
                    {
                        Slice(sliceConfigurationFile);
                    }
                }
            }
        }