[DesktopVRSwitch] Dumb fixes

This commit is contained in:
NotAKidoS 2023-08-02 17:18:35 -05:00
parent be82bf228c
commit dcc23233c7
2 changed files with 20 additions and 19 deletions

View file

@ -4,6 +4,7 @@ using System.Collections;
using UnityEngine; using UnityEngine;
using UnityEngine.Events; using UnityEngine.Events;
using UnityEngine.XR; using UnityEngine.XR;
using UnityEngine.XR.Management;
using Valve.VR; using Valve.VR;
/** /**
@ -81,22 +82,18 @@ public class VRModeSwitchManager : MonoBehaviour
} }
// Check if OpenVR is running // Check if OpenVR is running
bool isUsingVr = IsInVR(); bool isUsingVr = IsInXR();
InvokeOnPreSwitch(isUsingVr); InvokeOnPreSwitch(isUsingVr);
// Start switch // Start switch
if (!isUsingVr) if (!isUsingVr)
{ yield return StartCoroutine(StartXR());
yield return StartCoroutine(StartSteamVR());
}
else else
{ StopXR();
StopSteamVR();
}
// Check for updated VR mode // Check for updated VR mode
if (isUsingVr != IsInVR()) if (isUsingVr != IsInXR())
{ {
// reload the local avatar // reload the local avatar
if (ReloadLocalAvatar) if (ReloadLocalAvatar)
@ -149,26 +146,27 @@ public class VRModeSwitchManager : MonoBehaviour
SafeInvokeUnityEvent(OnFailVRModeSwitch, isUsingVr); SafeInvokeUnityEvent(OnFailVRModeSwitch, isUsingVr);
} }
public bool IsInVR() => XRSettings.enabled; public bool IsInXR() => XRGeneralSettings.Instance.Manager.activeLoader != null;
private IEnumerator StartSteamVR() private IEnumerator StartXR()
{ {
XRSettings.LoadDeviceByName(XRSETTINGS_DEVICE);
yield return null; // wait a frame before checking yield return null; // wait a frame before checking
yield return XRGeneralSettings.Instance.Manager.InitializeLoader();
if (!string.IsNullOrEmpty(XRSettings.loadedDeviceName))
if (XRGeneralSettings.Instance.Manager.activeLoader != null)
{ {
//SteamVR.Initialize is fucking useless XRGeneralSettings.Instance.Manager.StartSubsystems();
SteamVR_Behaviour.Initialize(true);
SteamVR_Behaviour.instance.InitializeSteamVR(true);
} }
yield return null; yield return null;
yield break; yield break;
} }
private void StopSteamVR() private void StopXR()
{ {
if (!XRGeneralSettings.Instance.Manager.isInitializationComplete)
return;
// Forces SteamVR to reinitialize SteamVR_Input next switch // Forces SteamVR to reinitialize SteamVR_Input next switch
SteamVR_ActionSet_Manager.DisableAllActionSets(); SteamVR_ActionSet_Manager.DisableAllActionSets();
SteamVR_Input.initialized = false; SteamVR_Input.initialized = false;
@ -178,8 +176,8 @@ public class VRModeSwitchManager : MonoBehaviour
SteamVR.enabled = false; // disposes SteamVR SteamVR.enabled = false; // disposes SteamVR
// Disable UnityXR // Disable UnityXR
XRSettings.LoadDeviceByName(""); XRGeneralSettings.Instance.Manager.StopSubsystems();
XRSettings.enabled = false; XRGeneralSettings.Instance.Manager.DeinitializeLoader();
// We don't really need to wait a frame on Stop() // We don't really need to wait a frame on Stop()
} }

View file

@ -1,4 +1,5 @@
using ABI_RC.Core.InteractionSystem; using ABI_RC.Core.InteractionSystem;
using UnityEngine;
namespace NAK.DesktopVRSwitch.VRModeTrackers; namespace NAK.DesktopVRSwitch.VRModeTrackers;
@ -28,5 +29,7 @@ public class CVR_MenuManagerTracker : VRModeTracker
DesktopVRSwitch.Logger.Msg("Updating CVR_Menu_Data core data."); DesktopVRSwitch.Logger.Msg("Updating CVR_Menu_Data core data.");
CVR_MenuManager.Instance.coreData.core.inVr = intoVR; CVR_MenuManager.Instance.coreData.core.inVr = intoVR;
CVR_MenuManager.Instance.quickMenu.transform.localPosition = Vector3.zero;
CVR_MenuManager.Instance.quickMenu.transform.localRotation = Quaternion.identity;
} }
} }