Inheritance: Editor
Exemplo n.º 1
0
            public static void DrawPackageVersion()
            {
                string versionText;

                SCPE_GUI.Status versionStatus;

                if (PackageVersionCheck.queryStatus == PackageVersionCheck.QueryStatus.Fetching)
                {
                    versionStatus = SCPE_GUI.Status.Warning;
                    versionText   = "Checking update server...";
                }
                else
                {
                    versionStatus = (PackageVersionCheck.IS_UPDATED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning;
                    versionText   = (PackageVersionCheck.IS_UPDATED) ? "Latest version" : "New version available";
                }

                SCPE_GUI.DrawStatusBox(new GUIContent("Package version " + SCPE.INSTALLED_VERSION, EditorGUIUtility.IconContent("cs Script Icon").image), versionText, versionStatus);

                if (!PackageVersionCheck.IS_UPDATED)
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        if (SCPE_GUI.DrawActionBox("Update to " + PackageVersionCheck.fetchedVersionString, EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image))
                        {
                            SCPE.OpenStorePage();
                        }
                    }
                }
            }
Exemplo n.º 2
0
        //Check if SC Post Effects folder is placed inside PostProcessing folder
        public static void CheckRootFolder()
        {
            //For the package manager PPS version, asset folder can sit anywhere
            if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.PackageManager)
            {
                IS_CORRECT_BASE_FOLDER = true;
                return;
            }

            SCPE.PACKAGE_ROOT_FOLDER = SCPE.GetRootFolder();

            PostProcessingInstallation.FindInstallationDir();

            //When already installed, root folder may be in PPS installation dir
            if (PostProcessingInstallation.IS_INSTALLED)
            {
                IS_CORRECT_BASE_FOLDER = (SCPE.PACKAGE_PARENT_FOLDER == PostProcessingInstallation.PPS_INSTALLATION_DIR);
                //Debug.Log(SCPE.PACKAGE_PARENT_FOLDER + " == " + PostProcessingInstallation.PPS_INSTALLATION_DIR);
            }
            //When not installed, installation will be in "Assets/PostProcessing/"
            else
            {
                IS_CORRECT_BASE_FOLDER = (SCPE.PACKAGE_PARENT_FOLDER == "Assets/PostProcessing/");
            }


#if SCPE_DEV && !PACKAGE_MANAGER
            Debug.Log("<b>Installer</b> Correct folder location: " + IS_CORRECT_BASE_FOLDER);
#endif
        }
Exemplo n.º 3
0
            public static void FindPackages()
            {
                string packageDir = SCPE.GetRootFolder();

                CheckInstallation();

                string[] assets = AssetDatabase.FindAssets("_DemoContent", new[] { packageDir });

                if (assets.Length > 0)
                {
                    SCENES_PACKAGE_PATH = AssetDatabase.GUIDToAssetPath(assets[0]);
                    HAS_SCENE_PACKAGE   = true;
                }
                else
                {
                    Settings.installDemoContent = false;
                    HAS_SCENE_PACKAGE           = false;
                }

                assets = null;
                assets = AssetDatabase.FindAssets("_Samples", new[] { packageDir });

                if (assets.Length > 0)
                {
                    SAMPLES_PACKAGE_PATH = AssetDatabase.GUIDToAssetPath(assets[0]);
                    HAS_SAMPLES_PACKAGE  = true;
                }
                else
                {
                    Settings.installSampleContent = false;
                    HAS_SAMPLES_PACKAGE           = false;
                }
            }
Exemplo n.º 4
0
        //Create a global post processing volume and assign the correct layer and default profile
        public static void SetupGlobalVolume()
        {
#if SCPE //Avoid missing PostProcessing scripts
            GameObject volumeObject = new GameObject("Global Post-process Volume");
            UnityEngine.Rendering.PostProcessing.PostProcessVolume volume = volumeObject.AddComponent<UnityEngine.Rendering.PostProcessing.PostProcessVolume>();

            volumeObject.layer = SCPE.GetLayerID();
            volume.isGlobal = true;

            //Find default profile
            string[] assets = AssetDatabase.FindAssets("SC Default Profile");

            if (assets.Length > 0)
            {
                string assetPath = AssetDatabase.GUIDToAssetPath(assets[0]);

                UnityEngine.Rendering.PostProcessing.PostProcessProfile defaultProfile = (UnityEngine.Rendering.PostProcessing.PostProcessProfile)AssetDatabase.LoadAssetAtPath(assetPath, typeof(UnityEngine.Rendering.PostProcessing.PostProcessProfile));
                volume.sharedProfile = defaultProfile;
            }
            else
            {
                Debug.Log("The default \"SC Post Effects\" profile could not be found. Add a new profile to the volume to get started.");
            }

            Selection.objects = new[] { volumeObject };
            EditorUtility.SetDirty(volumeObject);
#endif
        }
Exemplo n.º 5
0
        public static void SetupCamera()
        {
#if SCPE //Avoid missing PostProcessing scripts
            Camera cam = (Camera.main) ? Camera.main : GameObject.FindObjectOfType<Camera>();
            GameObject mainCamera = cam.gameObject;

            if (!mainCamera)
            {
                Debug.LogError("<b>SC Post Effects</b> No camera found in scene to configure");
                return;
            }

            //Add PostProcessLayer component if not already present
            if (mainCamera.GetComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>() == false)
            {
                UnityEngine.Rendering.PostProcessing.PostProcessLayer ppLayer = mainCamera.AddComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>();
                ppLayer.volumeLayer = LayerMask.GetMask(LayerMask.LayerToName(SCPE.GetLayerID()));
                ppLayer.fog.enabled = false;
                Debug.Log("<b>PostProcessLayer</b> component was added to <b>" + mainCamera.name + "</b>");
                cam.allowMSAA = false;
                cam.allowHDR = true;

                //Enable AA by default
                ppLayer.antialiasingMode = UnityEngine.Rendering.PostProcessing.PostProcessLayer.Antialiasing.FastApproximateAntialiasing;

                Selection.objects = new[] { mainCamera };
                EditorUtility.SetDirty(mainCamera);
            }
#endif
        }
Exemplo n.º 6
0
        private static List <string> GetShaderFilePaths()
        {
            string packageDir = SCPE.GetRootFolder();

            //Currently not needed!

            /*
             * List<string> filePaths = new List<string>();
             *
             * string effectShaderDir = packageDir + "/Runtime";
             *
             * //Find all shaders in the package folder
             * string[] GUIDs = AssetDatabase.FindAssets("*Shader t:Shader", new string[] { effectShaderDir });
             * for (int i = 0; i < GUIDs.Length; i++)
             * {
             *  //filePaths.Add(AssetDatabase.GUIDToAssetPath(GUIDs[i]));
             * }
             */

            string pipelineLibrary = packageDir + "/Shaders/Pipeline/Pipeline.hlsl";

            filePaths.Add(pipelineLibrary);
#if SCPE_DEV
            Debug.Log("<b>ConfigureShaderPaths</b> found " + filePaths.Count + " shaders/libraries to reconfigure");
#endif

            return(filePaths);
        }
Exemplo n.º 7
0
            public static void Initialize()
            {
                if (EditorApplication.isPlaying) return;

#if PPS
                SCPE.GetRenderPipeline();
#endif
            }
Exemplo n.º 8
0
        public static void GetLatestVersionPopup()
        {
            CheckForUpdate();

            if (!IS_UPDATED)
            {
                if (EditorUtility.DisplayDialog(SCPE.ASSET_NAME + ", version " + SCPE.INSTALLED_VERSION, "A new version is available: " + fetchedVersionString, "Open store page", "Close"))
                {
                    SCPE.OpenStorePage();
                }
            }
            else
            {
                if (EditorUtility.DisplayDialog(SCPE.ASSET_NAME + ", version " + SCPE.INSTALLED_VERSION, "Installed version is up-to-date!", "Close")) { }
            }
        }
Exemplo n.º 9
0
        public static void SetupCamera()
        {

            Camera cam = (Camera.main) ? Camera.main : GameObject.FindObjectOfType<Camera>();
            GameObject mainCamera = cam.gameObject;

            if (!mainCamera)
            {
                Debug.LogError("<b>SC Post Effects</b> No camera found in scene to configure");
                return;
            }

#if URP
            UniversalAdditionalCameraData data = mainCamera.GetComponent<UniversalAdditionalCameraData>();
            if (data)
            {
                data.renderPostProcessing = true;
                data.volumeTrigger = mainCamera.transform;

                EditorUtility.SetDirty(data);
            }
#endif

#if PPS //Avoid missing PostProcessing scripts
            //Add PostProcessLayer component if not already present
            if (mainCamera.GetComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>() == false)
            {
                UnityEngine.Rendering.PostProcessing.PostProcessLayer ppLayer = mainCamera.AddComponent<UnityEngine.Rendering.PostProcessing.PostProcessLayer>();
                ppLayer.volumeLayer = LayerMask.GetMask(LayerMask.LayerToName(SCPE.GetLayerID()));
                ppLayer.fog.enabled = false;
                Debug.Log("<b>PostProcessLayer</b> component was added to <b>" + mainCamera.name + "</b>");
                cam.allowMSAA = false;
                cam.allowHDR = true;

                //Enable AA by default
#if UNITY_2019_1_OR_NEWER
                ppLayer.antialiasingMode = UnityEngine.Rendering.PostProcessing.PostProcessLayer.Antialiasing.SubpixelMorphologicalAntialiasing;
#else
                ppLayer.antialiasingMode = UnityEngine.Rendering.PostProcessing.PostProcessLayer.Antialiasing.FastApproximateAntialiasing;
#endif

                Selection.objects = new[] { mainCamera };
                EditorUtility.SetDirty(mainCamera);
            }
#endif
        }
Exemplo n.º 10
0
        public static void ConfigureForCurrentPipeline()
        {
            SCPE.GetRenderPipeline();

            switch (SCPE.pipeline)
            {
            case SCPE.RenderPipeline.Legacy:
                ConfigureForStandardRP();
                break;

            case SCPE.RenderPipeline.Universal:
                ConfigureForURP();
                break;
            }

            Installer.Log.Write("Activated " + SCPE.pipeline + " render pipeline shader library");
        }
Exemplo n.º 11
0
        //TODO: Implement after Beta
        private void DrawActionButtons()
        {
            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("<size=12>Rate</size>", SCPE_GUI.Button))
            {
                SCPE.OpenStorePage();
            }

            if (GUILayout.Button("<size=12>Review</size>", SCPE_GUI.Button))
            {
                SCPE.OpenStorePage();
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();
        }
Exemplo n.º 12
0
        //TODO: Implement after Beta
        private void DrawActionButtons()
        {
            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button(new GUIContent("<size=12> Rate</size>", EditorGUIUtility.IconContent("d_Favorite").image), SCPE_GUI.Button))
            {
                SCPE.OpenStorePage();
            }

            if (GUILayout.Button(new GUIContent("<size=12> Review</size>", EditorGUIUtility.IconContent("d_FilterByLabel").image), SCPE_GUI.Button))
            {
                SCPE.OpenStorePage();
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();
        }
Exemplo n.º 13
0
        public static void ConfigureShaderPaths(PostProcessingInstallation.Configuration configuration = PostProcessingInstallation.Configuration.Auto)
        {
            string packageDir = SCPE.GetRootFolder() + "/Effects";

            //Find all shaders in the package folder
            string[] GUIDs = AssetDatabase.FindAssets("*Shader t:Shader", new string[] { packageDir });


#if SCPE_DEV
            Debug.Log("<b>ConfigureShaderPaths</b> found " + GUIDs.Length + " shaders to reconfigure");
#endif

            configuration = (configuration == PostProcessingInstallation.Configuration.Auto) ? PostProcessingInstallation.CheckInstallation() : configuration;

            for (int i = 0; i < GUIDs.Length; i++)
            {
                string assetPath = AssetDatabase.GUIDToAssetPath(GUIDs[i]);

                Shader shaderFile = (Shader)AssetDatabase.LoadAssetAtPath(assetPath, typeof(Shader));
                string shaderName = shaderFile.name.Replace("Hidden/SC Post Effects/", string.Empty);

                EditorUtility.DisplayProgressBar("Configuring shaders for " + configuration + " installation...", shaderName + " (" + i + "/" + GUIDs.Length + ")", (float)i / GUIDs.Length);

                string fileContents = File.ReadAllText(assetPath);

                if (configuration == PostProcessingInstallation.Configuration.GitHub)
                {
                    fileContents = fileContents.Replace("PostProcessing", "../../../..");
                }
                else if (configuration == PostProcessingInstallation.Configuration.PackageManager)
                {
                    fileContents = fileContents.Replace("../../../..", "PostProcessing");
                }

                File.WriteAllText(assetPath, fileContents);

                AssetDatabase.ImportAsset(assetPath);
            }

            EditorUtility.ClearProgressBar();

            Installer.Log.Write("Modified shaders for " + configuration + " configuration...");
        }
Exemplo n.º 14
0
        private static void RefreshShaders()
        {
            if (SCPE.PACKAGE_ROOT_FOLDER == string.Empty)
            {
                SCPE.GetRootFolder();
            }

            //Very much required, despite the warning
            AssetDatabase.Refresh();

            //Re-import shaders so libraries references nudge into place
            string[] guids = AssetDatabase.FindAssets("t: Shader", new string[] { SCPE.PACKAGE_ROOT_FOLDER });

#if SCPE_DEV
            Debug.Log("<b>RefreshShaders</b> refreshing " + guids.Length + " shaders.");
#endif
            EditorUtility.DisplayProgressBar("SC Post Effects", "Reimporting shaders...", 1f);
            for (int i = 0; i < guids.Length; i++)
            {
                AssetDatabase.ImportAsset(AssetDatabase.GUIDToAssetPath(guids[i]));
            }
            EditorUtility.ClearProgressBar();
        }
Exemplo n.º 15
0
        void DrawInstallation()
        {
            SetWindowHeight(350f);

            using (new EditorGUILayout.VerticalScope())
            {
                EditorGUILayout.Space();

                //Package Version
                {
                    string versionText = null;
                    versionText = (PackageVersionCheck.IS_UPDATED) ? "Latest version" : "New version available";
                    SCPE_GUI.Status versionStatus;
                    versionStatus = (PackageVersionCheck.IS_UPDATED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning;

                    SCPE_GUI.DrawStatusBox(new GUIContent(SCPE.INSTALLED_VERSION, EditorGUIUtility.IconContent("cs Script Icon").image), versionText, versionStatus);
                }

                if (!PackageVersionCheck.IS_UPDATED)
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        if (SCPE_GUI.DrawActionBox("Update", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image))
                        {
                            SCPE.OpenStorePage();
                            this.Close();
                        }
                    }
                }

                //Unity Version
                {
                    string versionText = null;
                    versionText = (UnityVersionCheck.COMPATIBLE) ? "Compatible" : "Not compatible";
                    versionText = (UnityVersionCheck.UNTESTED) ? "Untested!" : versionText;
                    SCPE_GUI.Status versionStatus;
                    versionStatus = (UnityVersionCheck.COMPATIBLE) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error;
                    versionStatus = (UnityVersionCheck.UNTESTED) ? SCPE_GUI.Status.Warning : versionStatus;

                    SCPE_GUI.DrawStatusBox(new GUIContent("Unity " + UnityVersionCheck.UnityVersion, EditorGUIUtility.IconContent("UnityLogo").image), versionText, versionStatus);
                }

                /*
                 * //Folder
                 * {
                 *  if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub)
                 *  {
                 *      string folderText = (Installer.IS_CORRECT_BASE_FOLDER) ? "Correct location" : "Outside \"PostProcessing/\"";
                 *      SCPE_GUI.Status folderStatus = (Installer.IS_CORRECT_BASE_FOLDER) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error;
                 *
                 *      SCPE_GUI.DrawStatusBox(new GUIContent("SC Post Effects folder", EditorGUIUtility.IconContent("FolderEmpty Icon").image), folderText, folderStatus);
                 *
                 *      if (!Installer.IS_CORRECT_BASE_FOLDER)
                 *      {
                 *          if (!Installer.IS_CORRECT_BASE_FOLDER)
                 *          {
                 *              EditorGUILayout.HelpBox("Please move the SC Post Effects folder to where you've installed the Post Processing Stack", MessageType.Error);
                 *          }
                 *      }
                 *  }
                 *
                 * }
                 */
                //Color space
                {
                    string          colorText    = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? "Linear" : "Linear is recommended";
                    SCPE_GUI.Status folderStatus = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning;

                    SCPE_GUI.DrawStatusBox(new GUIContent("Color space", EditorGUIUtility.IconContent("d_PreTextureRGB").image), colorText, folderStatus);
                }

                //Post Processing Stack
                string          ppsText   = (PostProcessingInstallation.IS_INSTALLED) ? (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) ? "Installed (GitHub)" : "Installed (Package Manager)" : "Not installed";
                SCPE_GUI.Status ppsStatus = (PostProcessingInstallation.IS_INSTALLED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error;

                string ppsLabel = "Post Processing Stack v2";
#if PACKAGE_MANAGER
                ppsLabel = "Post Processing";
#endif
                SCPE_GUI.DrawStatusBox(new GUIContent(ppsLabel, EditorGUIUtility.IconContent("Camera Gizmo").image), ppsText, ppsStatus);

                /*
                 * using (new EditorGUILayout.HorizontalScope(EditorStyles.label))
                 * {
                 *  EditorGUILayout.LabelField("Change shader configuration", EditorStyles.label);
                 *
                 *  if (GUILayout.Button(new GUIContent("GitHub"), SCPE_GUI.ToggleButtonLeftNormal))
                 *  {
                 *      Installer.ConfigureShaderPaths(PostProcessingInstallation.Configuration.GitHub);
                 *  }
                 *  if (GUILayout.Button(new GUIContent("Package Manager"), SCPE_GUI.ToggleButtonRightNormal))
                 *  {
                 *      Installer.ConfigureShaderPaths(PostProcessingInstallation.Configuration.PackageManager);
                 *  }
                 * }
                 */
            }
        }
Exemplo n.º 16
0
        private void StartScreen()
        {
            EditorGUILayout.HelpBox("\nThis wizard will guide you through the installation of the SC Post Effects package\n\nPress \"Next\" to continue...\n", MessageType.Info);

            EditorGUILayout.Space();

            EditorGUILayout.LabelField("Pre-install checks", SCPE_GUI.Header);

            EditorGUILayout.Space();

            using (new EditorGUILayout.VerticalScope(EditorStyles.textArea))
            {
                EditorGUILayout.Space();

                //Package Version
                {
                    string versionText = null;
                    versionText = (PackageVersionCheck.IS_UPDATED) ? "Latest version" : "New version available";
                    SCPE_GUI.Status versionStatus;
                    versionStatus = (PackageVersionCheck.IS_UPDATED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning;

                    SCPE_GUI.DrawStatusBox(new GUIContent(SCPE.INSTALLED_VERSION, EditorGUIUtility.IconContent("cs Script Icon").image), versionText, versionStatus);
                }

                if (!PackageVersionCheck.IS_UPDATED)
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        if (SCPE_GUI.DrawActionBox("Update", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image))
                        {
                            SCPE.OpenStorePage();
                        }
                    }
                }

                //Unity Version
                {
                    string versionText = null;
                    versionText = (UnityVersionCheck.COMPATIBLE) ? "Compatible" : "Not compatible";
                    versionText = (UnityVersionCheck.UNTESTED) ? "Untested!" : versionText;
                    SCPE_GUI.Status versionStatus;
                    versionStatus = (UnityVersionCheck.COMPATIBLE) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error;
                    versionStatus = (UnityVersionCheck.UNTESTED) ? SCPE_GUI.Status.Warning : versionStatus;

                    SCPE_GUI.DrawStatusBox(new GUIContent("Unity " + UnityVersionCheck.UnityVersion, EditorGUIUtility.IconContent("UnityLogo").image), versionText, versionStatus);
                }
                //Folder

                /*
                 * {
                 #if !PACKAGE_MANAGER
                 *  string folderText = (Installer.IS_CORRECT_BASE_FOLDER) ? "Correct location" : "Outside \"PostProcessing/\"";
                 *  SCPE_GUI.Status folderStatus = (Installer.IS_CORRECT_BASE_FOLDER) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error;
                 *
                 *  SCPE_GUI.DrawStatusBox(new GUIContent("SC Post Effects folder", EditorGUIUtility.IconContent("FolderEmpty Icon").image), folderText, folderStatus);
                 *
                 *  if (!Installer.IS_CORRECT_BASE_FOLDER && (PostProcessingInstallation.IS_INSTALLED))
                 *  {
                 *      EditorGUILayout.HelpBox("Please move the SC Post Effects folder to where you've installed the Post Processing Stack", MessageType.Error);
                 *  }
                 #endif
                 * }
                 */
                //Color space
                {
                    string          colorText    = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? "Linear" : "Linear is recommended";
                    SCPE_GUI.Status folderStatus = (UnityEditor.PlayerSettings.colorSpace == ColorSpace.Linear) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Warning;

                    SCPE_GUI.DrawStatusBox(new GUIContent("Color space", EditorGUIUtility.IconContent("d_PreTextureRGB").image), colorText, folderStatus);
                }

                //Post Processing Stack
                string          ppsText   = (PostProcessingInstallation.IS_INSTALLED) ? (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub) ? "Installed (GitHub)" : "Installed (Package Manager)" : "Not installed";
                SCPE_GUI.Status ppsStatus = (PostProcessingInstallation.IS_INSTALLED) ? SCPE_GUI.Status.Ok : SCPE_GUI.Status.Error;

                string ppsLabel = "Post Processing Stack v2";
#if PACKAGE_MANAGER
                ppsLabel = "Post Processing";
#endif
                SCPE_GUI.DrawStatusBox(new GUIContent(ppsLabel, EditorGUIUtility.IconContent("Camera Gizmo").image), ppsText, ppsStatus);

                if (PostProcessingInstallation.IS_INSTALLED == false)
                {
#if PACKAGE_MANAGER
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        EditorGUILayout.LabelField("       Installation source", EditorStyles.label);

                        if (GUILayout.Button(new GUIContent("GitHub"), PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub ? SCPE_GUI.ToggleButtonLeftToggled : SCPE_GUI.ToggleButtonLeftNormal))
                        {
                            PostProcessingInstallation.Config = PostProcessingInstallation.Configuration.GitHub;
                        }
                        if (GUILayout.Button(new GUIContent("Package Manager"), PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.PackageManager ? SCPE_GUI.ToggleButtonRightToggled : SCPE_GUI.ToggleButtonRightNormal))
                        {
                            PostProcessingInstallation.Config = PostProcessingInstallation.Configuration.PackageManager;
                        }
                    }
#else
                    PostProcessingInstallation.Config = PostProcessingInstallation.Configuration.GitHub;
#endif

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub)
                        {
                            if (SCPE_GUI.DrawActionBox(string.IsNullOrEmpty(PostProcessingInstallation.PACKAGE_PATH) ? "Download" : "Install", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image))
                            {
                                //Download
                                if (PostProcessingInstallation.PACKAGE_PATH.Contains(".unitypackage") == false)
                                {
                                    Application.OpenURL(PostProcessingInstallation.PP_DOWNLOAD_URL);
                                    if (EditorUtility.DisplayDialog("Post Processing Stack download", "Once the file has been downloaded, locate the file path and install it", "Browse"))
                                    {
                                        PostProcessingInstallation.PACKAGE_PATH = EditorUtility.OpenFilePanel("Package download location", "", "unitypackage");
                                    }
                                }
                                //Install
                                else
                                {
                                    PostProcessingInstallation.InstallPackage();
                                }
                            }
                        }
                        else
                        {
                            if (SCPE_GUI.DrawActionBox("Install", EditorGUIUtility.IconContent("BuildSettings.Standalone.Small").image))
                            {
                                PostProcessingInstallation.InstallPackage();
                            }
                        }
                    }

                    EditorGUILayout.Space();

                    if (PostProcessingInstallation.Config == PostProcessingInstallation.Configuration.GitHub)
                    {
                        using (new EditorGUILayout.HorizontalScope())
                        {
                            EditorGUILayout.LabelField(new GUIContent(" Package location", EditorGUIUtility.IconContent("d_UnityLogo").image));

                            EditorGUILayout.TextField(PostProcessingInstallation.PACKAGE_PATH, SCPE_GUI.PathField, GUILayout.MaxWidth(180f));

                            if (GUILayout.Button("...", GUILayout.MaxWidth(30f)))
                            {
                                PostProcessingInstallation.PACKAGE_PATH = EditorUtility.OpenFilePanel("Package download location", "", "unitypackage");
                            }
                        }
                    }
                    else
                    {
                    }
                } //End if-installed

                EditorGUILayout.Space();
            }


            //Validate for errors before allowing to continue
            hasError = !UnityVersionCheck.COMPATIBLE;
            //hasError = !Installer.IS_CORRECT_BASE_FOLDER;
            hasError = (PostProcessingInstallation.IS_INSTALLED == false);
        }