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; } }
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)); }
internal void MarkForUninstall(IPreferences prefs) { MarkedForUninstall = true; if (DebugModes.IsEnabled("DynamoPackageStates")) { PackageState = PackageStates.PendingUnload; } if (!prefs.PackageDirectoriesToUninstall.Contains(RootDirectory)) { prefs.PackageDirectoriesToUninstall.Add(RootDirectory); } }
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); } }
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(); }
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; } }
public PackageEntry(string version, PackageStates state) { Version = version; State = state; }
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; }