Exemplo n.º 1
0
    public static void ShowWithState(PackageStates packageStates)
    {
        PackageInstallerWindow.packageStates = packageStates;
        PackageInstallerWindow wnd = GetWindow <PackageInstallerWindow>();

        wnd.titleContent = new GUIContent("PackageInstaller");
    }
 private static void End()
 {
     updateState = PackageStates.None;
     addingPackageTime.Stop();
     addingPackageTimeTotal.Stop();
     UnityEditor.EditorUtility.ClearProgressBar();
     EditorApplication.update -= Update;
 }
        public static void Update()
        {
            if (!SteamVR_Settings.instance.autoEnableVR || Application.isPlaying)
            {
                End();
            }

            if (UnityEditor.PlayerSettings.virtualRealitySupported == false)
            {
                ShowDialog();
                return;
            }

            switch (packageState)
            {
            case PackageStates.None:
                //see if we have the package
                listRequest  = UnityEditor.PackageManager.Client.List(true);
                packageState = PackageStates.WaitingForList;
                break;

            case PackageStates.WaitingForList:
                if (listRequest.IsCompleted)
                {
                    if (listRequest.Error != null || listRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                    {
                        packageState = PackageStates.Failed;
                        break;
                    }

                    string packageName = unityOpenVRPackageString;

                    bool hasPackage = listRequest.Result.Any(package => package.name == packageName);

                    if (hasPackage == false)
                    {
                        ShowDialog();
                    }
                    else     //if we do have the package, do nothing
                    {
                        End();
                    }
                }
                break;

            case PackageStates.Failed:
                End();

                string failtext = "The Unity Package Manager failed to verify the OpenVR package. If you were trying to install it you may need to open the Package Manager Window and try to install it manually.";
                UnityEditor.EditorUtility.DisplayDialog("SteamVR", failtext, "Ok");
                Debug.Log("<b>[SteamVR Setup]</b> " + failtext);
                break;
            }
        }
Exemplo n.º 4
0
 internal void UnmarkForUninstall(IPreferences prefs)
 {
     MarkedForUninstall = false;
     if (DebugModes.IsEnabled("DynamoPackageStates"))
     {
         // Should this be a "Loaded state" or something else ?
         // Or maybe state should only be set when trying to Load the package...not here.
         PackageState = PackageStates.Loaded;
     }
     prefs.PackageDirectoriesToUninstall.RemoveAll(x => x.Equals(RootDirectory));
 }
Exemplo n.º 5
0
        internal void MarkForUninstall(IPreferences prefs)
        {
            MarkedForUninstall = true;
            if (DebugModes.IsEnabled("DynamoPackageStates"))
            {
                PackageState = PackageStates.PendingUnload;
            }

            if (!prefs.PackageDirectoriesToUninstall.Contains(RootDirectory))
            {
                prefs.PackageDirectoriesToUninstall.Add(RootDirectory);
            }
        }
Exemplo n.º 6
0
        internal void MarkForUninstall(IPreferences prefs)
        {
            MarkedForUninstall = true;
            if (DebugModes.IsEnabled("DynamoPackageStates"))
            {
                PackageState = PackageStates.PendingUnload;
            }
            else
            {
                RaisePropertyChanged(nameof(EnableOldMarkedForUnistallState));
            }

            if (!prefs.PackageDirectoriesToUninstall.Contains(RootDirectory))
            {
                prefs.PackageDirectoriesToUninstall.Add(RootDirectory);
            }
        }
Exemplo n.º 7
0
 void ImportPackages(PackageStates packageStates)
 {
     if (!packageStates.TimeLine)
     {
         Client.Add("com.unity.timeline");
     }
     if (!packageStates.TMPro)
     {
         Client.Add("com.unity.textmeshpro");
     }
     if (!packageStates.PostProcessingStack)
     {
         Client.Add("com.unity.postprocessing");
     }
     if (!packageStates.OpenVR)
     {
         Client.Add("com.unity.xr.openvr.standalone");
     }
     Close();
 }
Exemplo n.º 8
0
        public static void Update()
        {
            if (SteamVR_Settings.instance.autoEnableVR)
            {
                bool enabledVR = false;

                if (UnityEditor.PlayerSettings.virtualRealitySupported == false)
                {
                    UnityEditor.PlayerSettings.virtualRealitySupported = true;
                    enabledVR = true;
                    Debug.Log("<b>[SteamVR Setup]</b> Enabled virtual reality support in Player Settings. (you can disable this by unchecking Assets/SteamVR/SteamVR_Settings.autoEnableVR)");
                }

                UnityEditor.BuildTargetGroup currentTarget = UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup;

#if (UNITY_5_4 || UNITY_5_3 || UNITY_5_2 || UNITY_5_1 || UNITY_5_0)
                string[] devices = UnityEditorInternal.VR.VREditor.GetVREnabledDevices(currentTarget);
#else
                string[] devices = UnityEditorInternal.VR.VREditor.GetVREnabledDevicesOnTargetGroup(currentTarget);
#endif

                bool hasOpenVR = devices.Any(device => string.Equals(device, openVRString, System.StringComparison.CurrentCultureIgnoreCase));

                if (hasOpenVR == false || enabledVR)
                {
                    string[] newDevices;
                    if (enabledVR && hasOpenVR == false)
                    {
                        newDevices = new string[] { openVRString }; //only list openvr if we enabled it
                    }
                    else
                    {
                        List <string> devicesList = new List <string>(devices); //list openvr as the first option if it wasn't in the list.
                        if (hasOpenVR)
                        {
                            devicesList.Remove(openVRString);
                        }

                        devicesList.Insert(0, openVRString);
                        newDevices = devicesList.ToArray();
                    }

#if (UNITY_5_6 || UNITY_5_4 || UNITY_5_3 || UNITY_5_2 || UNITY_5_1 || UNITY_5_0)
                    UnityEditorInternal.VR.VREditor.SetVREnabledDevices(currentTarget, newDevices);
#else
                    UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(currentTarget, newDevices);
#endif
                    Debug.Log("<b>[SteamVR Setup]</b> Added OpenVR to supported VR SDKs list.");
                }

#if UNITY_2018_1_OR_NEWER
                //2018+ requires us to manually add the OpenVR package

                switch (packageState)
                {
                case PackageStates.None:
                    //see if we have the package
                    listRequest  = UnityEditor.PackageManager.Client.List(true);
                    packageState = PackageStates.WaitingForList;
                    break;

                case PackageStates.WaitingForList:
                    if (listRequest.IsCompleted)
                    {
                        if (listRequest.Error != null || listRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                        {
                            packageState = PackageStates.Failed;
                            break;
                        }

                        bool hasPackage = listRequest.Result.Any(package => package.name == openVRPackageString);

                        if (hasPackage == false)
                        {
                            //if we don't have the package - then install it
                            addRequest   = UnityEditor.PackageManager.Client.Add(openVRPackageString);
                            packageState = PackageStates.WaitingForAdd;
                            addTryCount++;

                            Debug.Log("<b>[SteamVR Setup]</b> Installing OpenVR package...");
                            addingPackageTime.Start();
                            addingPackageTimeTotal.Start();
                        }
                        else
                        {
                            //if we do have the package do nothing
                            packageState = PackageStates.Installed;     //already installed
                        }
                    }
                    break;

                case PackageStates.WaitingForAdd:
                    if (addRequest.IsCompleted)
                    {
                        if (addRequest.Error != null || addRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                        {
                            packageState = PackageStates.Failed;
                            break;
                        }
                        else
                        {
                            //if the package manager says we added it then confirm that with the list
                            listRequest  = UnityEditor.PackageManager.Client.List(true);
                            packageState = PackageStates.WaitingForAddConfirm;
                        }
                    }
                    else
                    {
                        if (addingPackageTimeTotal.Elapsed.TotalSeconds > estimatedTimeToInstall)
                        {
                            estimatedTimeToInstall *= 2;     // :)
                        }
                        string dialogText;
                        if (addTryCount == 1)
                        {
                            dialogText = "Installing OpenVR from Unity Package Manager...";
                        }
                        else
                        {
                            dialogText = "Retrying OpenVR install from Unity Package Manager...";
                        }

                        bool cancel = UnityEditor.EditorUtility.DisplayCancelableProgressBar("SteamVR", dialogText, (float)addingPackageTimeTotal.Elapsed.TotalSeconds / estimatedTimeToInstall);
                        if (cancel)
                        {
                            packageState = PackageStates.Failed;
                        }

                        if (addingPackageTime.Elapsed.TotalSeconds > 10)
                        {
                            Debug.Log("<b>[SteamVR Setup]</b> Waiting for package manager to install OpenVR package...");
                            addingPackageTime.Stop();
                            addingPackageTime.Reset();
                            addingPackageTime.Start();
                        }
                    }
                    break;

                case PackageStates.WaitingForAddConfirm:
                    if (listRequest.IsCompleted)
                    {
                        if (listRequest.Error != null)
                        {
                            packageState = PackageStates.Failed;
                            break;
                        }

                        bool hasPackage = listRequest.Result.Any(package => package.name == openVRPackageString);

                        if (hasPackage == false)
                        {
                            if (addTryCount == 1)
                            {
                                addRequest   = UnityEditor.PackageManager.Client.Add(openVRPackageString);
                                packageState = PackageStates.WaitingForAdd;
                                addTryCount++;

                                Debug.Log("<b>[SteamVR Setup]</b> Retrying OpenVR package install...");
                            }
                            else
                            {
                                packageState = PackageStates.Failed;
                            }
                        }
                        else
                        {
                            packageState = PackageStates.Installed;     //installed successfully

                            Debug.Log("<b>[SteamVR Setup]</b> Successfully installed OpenVR package.");
                        }
                    }
                    break;
                }

                if (packageState == PackageStates.Failed || packageState == PackageStates.Installed)
                {
                    addingPackageTime.Stop();
                    addingPackageTimeTotal.Stop();
                    UnityEditor.EditorUtility.ClearProgressBar();
                    UnityEditor.EditorApplication.update -= Update; //we're done trying to auto-enable vr

                    if (packageState == PackageStates.Failed)
                    {
                        string failtext = "The Unity Package Manager failed to automatically install the OpenVR package. Please open the Package Manager Window and try to install it manually.";
                        UnityEditor.EditorUtility.DisplayDialog("SteamVR", failtext, "Ok");
                        Debug.Log("<b>[SteamVR Setup]</b> " + failtext);
                    }
                }
#else
                UnityEditor.EditorApplication.update -= Update;
#endif
            }
        }
        public static void Update()
        {
            if (!SteamVR_Settings.instance.autoEnableVR || Application.isPlaying)
            {
                End();
            }

            if (UnityEditor.PlayerSettings.virtualRealitySupported == false)
            {
                if (forceInstall == false)
                {
                    int shouldInstall = UnityEditor.EditorUtility.DisplayDialogComplex("SteamVR", "Would you like to enable Virtual Reality mode?\n\nThis will install the OpenVR for Desktop package and enable it in Player Settings.", "Yes", "No, and don't ask again", "No");

                    switch (shouldInstall)
                    {
                    case 0:     //yes
                        UnityEditor.PlayerSettings.virtualRealitySupported = true;
                        break;

                    case 1:     //no
                        End();
                        return;

                    case 2:     //no, don't ask
                        SteamVR_Settings.instance.autoEnableVR = false;
                        SteamVR_Settings.Save();
                        End();
                        return;
                    }
                }

                Debug.Log("<b>[SteamVR Setup]</b> Enabled virtual reality support in Player Settings. (you can disable this by unchecking Assets/SteamVR/SteamVR_Settings.autoEnableVR)");
            }

            switch (updateState)
            {
            case PackageStates.None:
                //see if we have the package
                listRequest = UnityEditor.PackageManager.Client.List(true);
                updateState = PackageStates.WaitingForList;
                break;

            case PackageStates.WaitingForList:
                if (listRequest == null)
                {
                    listRequest = UnityEditor.PackageManager.Client.List(true);
                    updateState = PackageStates.WaitingForList;
                }
                else if (listRequest.IsCompleted)
                {
                    if (listRequest.Error != null || listRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                    {
                        updateState = PackageStates.Failed;
                        break;
                    }

                    string packageName = unityOpenVRPackageString;

                    bool hasPackage = listRequest.Result.Any(package => package.name == packageName);

                    if (hasPackage == false)
                    {
                        //if we don't have the package - then install it
                        addRequest  = UnityEditor.PackageManager.Client.Add(packageName);
                        updateState = PackageStates.WaitingForAdd;
                        addTryCount++;

                        Debug.Log("<b>[SteamVR Setup]</b> Installing OpenVR package...");
                        addingPackageTime.Start();
                        addingPackageTimeTotal.Start();
                    }
                    else
                    {
                        //if we do have the package, make sure it's enabled.
                        updateState = PackageStates.Installed;     //already installed
                    }
                }
                break;

            case PackageStates.WaitingForAdd:
                if (addRequest.IsCompleted)
                {
                    if (addRequest.Error != null || addRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                    {
                        updateState = PackageStates.Failed;
                        break;
                    }
                    else
                    {
                        //if the package manager says we added it then confirm that with the list
                        listRequest = UnityEditor.PackageManager.Client.List(true);
                        updateState = PackageStates.WaitingForAddConfirm;
                    }
                }
                else
                {
                    if (addingPackageTimeTotal.Elapsed.TotalSeconds > estimatedTimeToInstall)
                    {
                        if (addTryCount == 1)
                        {
                            estimatedTimeToInstall *= 2;     //give us more time to retry
                        }
                        else
                        {
                            updateState = PackageStates.Failed;
                        }
                    }

                    string dialogText;
                    if (addTryCount == 1)
                    {
                        dialogText = "Installing OpenVR from Unity Package Manager...";
                    }
                    else
                    {
                        dialogText = "Retrying OpenVR install from Unity Package Manager...";
                    }

                    bool cancel = UnityEditor.EditorUtility.DisplayCancelableProgressBar("SteamVR", dialogText, (float)addingPackageTimeTotal.Elapsed.TotalSeconds / estimatedTimeToInstall);
                    if (cancel)
                    {
                        updateState = PackageStates.Failed;
                    }

                    if (addingPackageTime.Elapsed.TotalSeconds > 10)
                    {
                        Debug.Log("<b>[SteamVR Setup]</b> Waiting for package manager to install OpenVR package...");
                        addingPackageTime.Stop();
                        addingPackageTime.Reset();
                        addingPackageTime.Start();
                    }
                }
                break;

            case PackageStates.WaitingForAddConfirm:
                if (listRequest.IsCompleted)
                {
                    if (listRequest.Error != null)
                    {
                        updateState = PackageStates.Failed;
                        break;
                    }
                    string packageName = unityOpenVRPackageString;

                    bool hasPackage = listRequest.Result.Any(package => package.name == packageName);

                    if (hasPackage == false)
                    {
                        if (addTryCount == 1)
                        {
                            addRequest  = UnityEditor.PackageManager.Client.Add(packageName);
                            updateState = PackageStates.WaitingForAdd;
                            addTryCount++;

                            Debug.Log("<b>[SteamVR Setup]</b> Retrying OpenVR package install...");
                        }
                        else
                        {
                            updateState = PackageStates.Failed;
                        }
                    }
                    else
                    {
                        updateState = PackageStates.Installed;     //installed successfully

                        Debug.Log("<b>[SteamVR Setup]</b> Successfully installed OpenVR Desktop package.");
                    }
                }
                break;

            case PackageStates.Installed:
                UnityEditor.BuildTargetGroup currentTarget = UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup;

                string[] devices = UnityEditorInternal.VR.VREditor.GetVREnabledDevicesOnTargetGroup(currentTarget);

                bool hasOpenVR = false;
                bool isFirst   = false;

                if (devices.Length != 0)
                {
                    int index = Array.FindIndex(devices, device => string.Equals(device, openVRString, System.StringComparison.CurrentCultureIgnoreCase));
                    hasOpenVR = index != -1;
                    isFirst   = index == 0;
                }

                //list openvr as the first option if it was in the list already
                List <string> devicesList = new List <string>(devices);
                if (isFirst == false)
                {
                    if (hasOpenVR == true)
                    {
                        devicesList.Remove(openVRString);
                    }

                    devicesList.Insert(0, openVRString);
                    string[] newDevices = devicesList.ToArray();

                    UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(currentTarget, newDevices);
                    Debug.Log("<b>[SteamVR Setup]</b> Added OpenVR to supported VR SDKs list.");
                }

                End();
                break;

            case PackageStates.Failed:
                End();

                string failtext = "The Unity Package Manager failed to automatically install the OpenVR Desktop package. Please open the Package Manager Window and try to install it manually.";
                UnityEditor.EditorUtility.DisplayDialog("SteamVR", failtext, "Ok");
                Debug.Log("<b>[SteamVR Setup]</b> " + failtext);
                break;
            }
        }
Exemplo n.º 10
0
 public PackageEntry(string version, PackageStates state)
 {
     Version = version;
     State   = state;
 }
Exemplo n.º 11
0
        public static void Update()
        {
            if (SteamVR_Settings.instance.autoEnableVR)
            {
                bool enabledVR = false;

#if UNITY_2020_1_OR_NEWER || OPENVR_XR_API
#if !UNITY_2020_2_OR_NEWER
                if (UnityEditor.PlayerSettings.virtualRealitySupported == true)
                {
                    UnityEditor.PlayerSettings.virtualRealitySupported = false;
                    enabledVR = true;
                    Debug.Log("<b>[SteamVR Setup]</b> Disabled virtual reality support in Player Settings. <b>Because you're using XR Manager. Make sure OpenVR Loader is enabled in XR Manager UI.</b> (you can disable this by unchecking Assets/SteamVR/SteamVR_Settings.autoEnableVR)");
                }
#endif

#if OPENVR_XR_API
                //little hacky, but the public methods weren't working.

                if (isLoaderAssignedMethodParameters == null)
                {
                    isLoaderAssignedMethodParameters = new Type[] { typeof(string), typeof(BuildTargetGroup) }
                }
                ;
                if (isLoaderAssignedCallParameters == null)
                {
                    isLoaderAssignedCallParameters = new object[] { valveOpenVRLoaderType, BuildTargetGroup.Standalone }
                }
                ;
                if (isLoaderAssigned == null)
                {
                    isLoaderAssigned = GetMethod("IsLoaderAssigned", isLoaderAssignedMethodParameters);
                }

                if (installPackageAndAssignLoaderForBuildTarget == null)
                {
                    installPackageAndAssignLoaderForBuildTarget = GetMethod("InstallPackageAndAssignLoaderForBuildTarget");
                }

                if (isLoaderAssigned != null && installPackageAndAssignLoaderForBuildTarget != null)
                {
                    bool isAssigned = (bool)isLoaderAssigned.Invoke(null, isLoaderAssignedCallParameters);

                    if (isAssigned == false)
                    {
                        if (enabledLoaderKey == null)
                        {
                            enabledLoaderKey = string.Format(valveEnabledLoaderKeyTemplate, SteamVR_Settings.instance.editorAppKey);
                        }

                        if (EditorPrefs.HasKey(enabledLoaderKey) == false)
                        {
                            installPackageAndAssignLoaderForBuildTarget.Invoke(null, new object[] { valveOpenVRPackageString, valveOpenVRLoaderType, BuildTargetGroup.Standalone });

                            isAssigned = (bool)isLoaderAssigned.Invoke(null, isLoaderAssignedCallParameters);
                            if (isAssigned)
                            {
                                EditorPrefs.SetBool(enabledLoaderKey, true);

                                Debug.Log("<b>[SteamVR Setup]</b> Enabled OpenVR Loader in XR Management");
                                UnityEditor.EditorApplication.update -= Update;
                            }
                        }
                        else
                        {
                            UnityEditor.EditorApplication.update -= Update;
                        }
                    }
                    else
                    {
                        UnityEditor.EditorApplication.update -= Update;
                    }
                }
#elif UNITY_2020_1_OR_NEWER
                StartAutoUpdater();
#endif
#else
                if (UnityEditor.PlayerSettings.virtualRealitySupported == false)
                {
                    UnityEditor.PlayerSettings.virtualRealitySupported = true;
                    enabledVR = true;
                    Debug.Log("<b>[SteamVR Setup]</b> Enabled virtual reality support in Player Settings. (you can disable this by unchecking Assets/SteamVR/SteamVR_Settings.autoEnableVR)");
                }

                UnityEditor.BuildTargetGroup currentTarget = UnityEditor.EditorUserBuildSettings.selectedBuildTargetGroup;

#if (UNITY_5_4 || UNITY_5_3 || UNITY_5_2 || UNITY_5_1 || UNITY_5_0)
                string[] devices = UnityEditorInternal.VR.VREditor.GetVREnabledDevices(currentTarget);
#else
                string[] devices = UnityEditorInternal.VR.VREditor.GetVREnabledDevicesOnTargetGroup(currentTarget);
#endif

                bool hasOpenVR = devices.Any(device => string.Equals(device, openVRString, System.StringComparison.CurrentCultureIgnoreCase));

                if (hasOpenVR == false || enabledVR)
                {
                    string[] newDevices;
                    if (enabledVR && hasOpenVR == false)
                    {
                        newDevices = new string[] { openVRString }; //only list openvr if we enabled it
                    }
                    else
                    {
                        List <string> devicesList = new List <string>(devices); //list openvr as the first option if it wasn't in the list.
                        if (hasOpenVR)
                        {
                            devicesList.Remove(openVRString);
                        }

                        devicesList.Insert(0, openVRString);
                        newDevices = devicesList.ToArray();
                    }

#if (UNITY_5_6 || UNITY_5_4 || UNITY_5_3 || UNITY_5_2 || UNITY_5_1 || UNITY_5_0)
                    UnityEditorInternal.VR.VREditor.SetVREnabledDevices(currentTarget, newDevices);
#else
                    UnityEditorInternal.VR.VREditor.SetVREnabledDevicesOnTargetGroup(currentTarget, newDevices);
#endif
                    Debug.Log("<b>[SteamVR Setup]</b> Added OpenVR to supported VR SDKs list.");
                }

#if UNITY_2018_2_OR_NEWER
                //2018+ requires us to manually add the OpenVR package
                //2020.1+ has a separate script that does installs

                switch (packageState)
                {
                case PackageStates.None:
                    //see if we have the package
                    listRequest  = UnityEditor.PackageManager.Client.List(true);
                    packageState = PackageStates.WaitingForList;
                    break;

                case PackageStates.WaitingForList:
                    if (listRequest.IsCompleted)
                    {
                        if (listRequest.Error != null || listRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                        {
                            packageState = PackageStates.Failed;
                            break;
                        }

                        string packageName = null;

                        packageName = unityOpenVRPackageString;

                        bool hasPackage = listRequest.Result.Any(package => package.name == packageName);

                        if (hasPackage == false)
                        {
                            //if we don't have the package - then install it
                            addRequest   = UnityEditor.PackageManager.Client.Add(packageName);
                            packageState = PackageStates.WaitingForAdd;
                            addTryCount++;

                            Debug.Log("<b>[SteamVR Setup]</b> Installing OpenVR package...");
                            addingPackageTime.Start();
                            addingPackageTimeTotal.Start();
                        }
                        else
                        {
                            //if we do have the package, do nothing
                            packageState = PackageStates.Installed;     //already installed
                        }
                    }
                    break;

                case PackageStates.WaitingForAdd:
                    if (addRequest.IsCompleted)
                    {
                        if (addRequest.Error != null || addRequest.Status == UnityEditor.PackageManager.StatusCode.Failure)
                        {
                            packageState = PackageStates.Failed;
                            break;
                        }
                        else
                        {
                            //if the package manager says we added it then confirm that with the list
                            listRequest  = UnityEditor.PackageManager.Client.List(true);
                            packageState = PackageStates.WaitingForAddConfirm;
                        }
                    }
                    else
                    {
                        if (addingPackageTimeTotal.Elapsed.TotalSeconds > estimatedTimeToInstall)
                        {
                            estimatedTimeToInstall *= 2;     // :)
                        }
                        string dialogText;
                        if (addTryCount == 1)
                        {
                            dialogText = "Installing OpenVR from Unity Package Manager...";
                        }
                        else
                        {
                            dialogText = "Retrying OpenVR install from Unity Package Manager...";
                        }

                        bool cancel = UnityEditor.EditorUtility.DisplayCancelableProgressBar("SteamVR", dialogText, (float)addingPackageTimeTotal.Elapsed.TotalSeconds / estimatedTimeToInstall);
                        if (cancel)
                        {
                            packageState = PackageStates.Failed;
                        }

                        if (addingPackageTime.Elapsed.TotalSeconds > 10)
                        {
                            Debug.Log("<b>[SteamVR Setup]</b> Waiting for package manager to install OpenVR package...");
                            addingPackageTime.Stop();
                            addingPackageTime.Reset();
                            addingPackageTime.Start();
                        }
                    }
                    break;

                case PackageStates.WaitingForAddConfirm:
                    if (listRequest.IsCompleted)
                    {
                        if (listRequest.Error != null)
                        {
                            packageState = PackageStates.Failed;
                            break;
                        }
                        string packageName = unityOpenVRPackageString;

                        bool hasPackage = listRequest.Result.Any(package => package.name == packageName);

                        if (hasPackage == false)
                        {
                            if (addTryCount == 1)
                            {
                                addRequest   = UnityEditor.PackageManager.Client.Add(packageName);
                                packageState = PackageStates.WaitingForAdd;
                                addTryCount++;

                                Debug.Log("<b>[SteamVR Setup]</b> Retrying OpenVR package install...");
                            }
                            else
                            {
                                packageState = PackageStates.Failed;
                            }
                        }
                        else
                        {
                            packageState = PackageStates.Installed;     //installed successfully

                            Debug.Log("<b>[SteamVR Setup]</b> Successfully installed OpenVR package.");
                        }
                    }
                    break;
                }

                if (packageState == PackageStates.Failed || packageState == PackageStates.Installed)
                {
                    addingPackageTime.Stop();
                    addingPackageTimeTotal.Stop();
                    UnityEditor.EditorUtility.ClearProgressBar();
                    UnityEditor.EditorApplication.update -= Update; //we're done trying to auto-enable vr

                    if (packageState == PackageStates.Failed)
                    {
                        string failtext = "The Unity Package Manager failed to automatically install the OpenVR package. Please open the Package Manager Window and try to install it manually.";
                        UnityEditor.EditorUtility.DisplayDialog("SteamVR", failtext, "Ok");
                        Debug.Log("<b>[SteamVR Setup]</b> " + failtext);
                    }
                }
#else
                UnityEditor.EditorApplication.update -= Update;
#endif
#endif
            }
        }
 private static void End()
 {
     packageState = PackageStates.None;
     UnityEditor.EditorUtility.ClearProgressBar();
     EditorApplication.update -= Update;
 }