mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 14:29:25 +00:00
[DesktopVRSwitch] More fixes for 2023r171.
This commit is contained in:
parent
9f01f8e6a7
commit
3d6b1f75a4
17 changed files with 67 additions and 62 deletions
|
@ -3,7 +3,6 @@ using ABI_RC.Core.Savior;
|
||||||
using ABI_RC.Core.Util.Object_Behaviour;
|
using ABI_RC.Core.Util.Object_Behaviour;
|
||||||
using ABI_RC.Systems.IK;
|
using ABI_RC.Systems.IK;
|
||||||
using ABI_RC.Systems.IK.TrackingModules;
|
using ABI_RC.Systems.IK.TrackingModules;
|
||||||
using cohtml;
|
|
||||||
using cohtml.Net;
|
using cohtml.Net;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using NAK.DesktopVRSwitch.Patches;
|
using NAK.DesktopVRSwitch.Patches;
|
||||||
|
@ -103,7 +102,7 @@ internal class CVRPickupObjectPatches
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Transform vrOrigin = __instance.gripOrigin;
|
Transform vrOrigin = __instance.gripOrigin;
|
||||||
Transform desktopOrigin = vrOrigin?.Find("[Desktop]");
|
Transform desktopOrigin = vrOrigin != null ? vrOrigin.Find("[Desktop]") : null;
|
||||||
if (vrOrigin != null && desktopOrigin != null)
|
if (vrOrigin != null && desktopOrigin != null)
|
||||||
{
|
{
|
||||||
CVRPickupObjectTracker tracker = __instance.gameObject.AddComponent<CVRPickupObjectTracker>();
|
CVRPickupObjectTracker tracker = __instance.gameObject.AddComponent<CVRPickupObjectTracker>();
|
||||||
|
@ -122,9 +121,12 @@ internal class CVRPickupObjectPatches
|
||||||
internal class CohtmlUISystemPatches
|
internal class CohtmlUISystemPatches
|
||||||
{
|
{
|
||||||
[HarmonyPrefix]
|
[HarmonyPrefix]
|
||||||
[HarmonyPatch(typeof(UISystem), nameof(UISystem.RegisterGamepad))]
|
[HarmonyPatch(typeof(UISystem), nameof(UISystem.RegisterGamepad), typeof(uint), typeof(string), typeof(uint), typeof(uint), typeof(IntPtr))]
|
||||||
|
[HarmonyPatch(typeof(UISystem), nameof(UISystem.RegisterGamepad), typeof(uint), typeof(string), typeof(uint), typeof(uint))]
|
||||||
|
[HarmonyPatch(typeof(UISystem), nameof(UISystem.UpdateGamepadState), typeof(cohtml.GamepadState))]
|
||||||
|
[HarmonyPatch(typeof(UISystem), nameof(UISystem.UpdateGamepadState), typeof(uint), typeof(float[]), typeof(float[]))]
|
||||||
[HarmonyPatch(typeof(UISystem), nameof(UISystem.UnregisterGamepad))]
|
[HarmonyPatch(typeof(UISystem), nameof(UISystem.UnregisterGamepad))]
|
||||||
[HarmonyPatch(typeof(UISystem), nameof(UISystem.UpdateGamepadState))]
|
[HarmonyPatch(typeof(UISystem), nameof(UISystem.UpdateGamepadStateExtended))]
|
||||||
private static bool Prefix_UISystem_FuckOff()
|
private static bool Prefix_UISystem_FuckOff()
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +155,9 @@ internal class SteamVRBehaviourPatches
|
||||||
|
|
||||||
// If we don't switch fast enough, SteamVR will force close.
|
// If we don't switch fast enough, SteamVR will force close.
|
||||||
// World Transition might cause issues. Might need to override.
|
// World Transition might cause issues. Might need to override.
|
||||||
VRModeSwitchManager.Instance?.AttemptSwitch();
|
if (VRModeSwitchManager.Instance != null)
|
||||||
|
VRModeSwitchManager.Instance.AttemptSwitch();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
using BTKUILib;
|
using BTKUILib;
|
||||||
using BTKUILib.UIObjects;
|
using BTKUILib.UIObjects;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using ABI_RC.Core.Base;
|
|
||||||
|
|
||||||
namespace NAK.DesktopVRSwitch.Integrations;
|
namespace NAK.DesktopVRSwitch.Integrations;
|
||||||
|
|
||||||
|
@ -55,10 +54,10 @@ public static class BTKUIAddon
|
||||||
category.AddToggle(entry.DisplayName, entry.Description, entry.Value).OnValueUpdated += b => entry.Value = b;
|
category.AddToggle(entry.DisplayName, entry.Description, entry.Value).OnValueUpdated += b => entry.Value = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddMelonSlider(ref Page page, MelonLoader.MelonPreferences_Entry<float> entry, float min, float max, int decimalPlaces = 2)
|
// private static void AddMelonSlider(ref Page page, MelonLoader.MelonPreferences_Entry<float> entry, float min, float max, int decimalPlaces = 2)
|
||||||
{
|
// {
|
||||||
page.AddSlider(entry.DisplayName, entry.Description, entry.Value, min, max, decimalPlaces).OnValueUpdated += f => entry.Value = f;
|
// page.AddSlider(entry.DisplayName, entry.Description, entry.Value, min, max, decimalPlaces).OnValueUpdated += f => entry.Value = f;
|
||||||
}
|
// }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
|
@ -37,10 +37,11 @@ public class DesktopVRSwitch : MelonMod
|
||||||
|
|
||||||
public override void OnUpdate()
|
public override void OnUpdate()
|
||||||
{
|
{
|
||||||
if (Input.GetKeyDown(KeyCode.F6) && Input.GetKey(KeyCode.LeftControl))
|
if (!Input.GetKeyDown(KeyCode.F6) || !Input.GetKey(KeyCode.LeftControl))
|
||||||
{
|
return;
|
||||||
VRModeSwitchManager.Instance?.AttemptSwitch();
|
|
||||||
}
|
if (VRModeSwitchManager.Instance != null)
|
||||||
|
VRModeSwitchManager.Instance.AttemptSwitch();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RegisterVRModeTrackers()
|
private static void RegisterVRModeTrackers()
|
||||||
|
|
|
@ -6,7 +6,7 @@ public static class ModSettings
|
||||||
{
|
{
|
||||||
internal const string SettingsCategory = nameof(DesktopVRSwitch);
|
internal const string SettingsCategory = nameof(DesktopVRSwitch);
|
||||||
|
|
||||||
public static readonly MelonPreferences_Category Category =
|
private static readonly MelonPreferences_Category Category =
|
||||||
MelonPreferences.CreateCategory(SettingsCategory);
|
MelonPreferences.CreateCategory(SettingsCategory);
|
||||||
|
|
||||||
public static readonly MelonPreferences_Entry<bool> EntryEnterCalibrationOnSwitch =
|
public static readonly MelonPreferences_Entry<bool> EntryEnterCalibrationOnSwitch =
|
||||||
|
|
|
@ -27,6 +27,6 @@ using System.Reflection;
|
||||||
namespace NAK.DesktopVRSwitch.Properties;
|
namespace NAK.DesktopVRSwitch.Properties;
|
||||||
internal static class AssemblyInfoParams
|
internal static class AssemblyInfoParams
|
||||||
{
|
{
|
||||||
public const string Version = "4.4.0";
|
public const string Version = "4.4.1";
|
||||||
public const string Author = "NotAKidoS";
|
public const string Author = "NotAKidoS";
|
||||||
}
|
}
|
|
@ -10,22 +10,22 @@ internal class VRModeSwitchDebugger : MonoBehaviour
|
||||||
|
|
||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
if (_switchCoroutine == null)
|
if (_switchCoroutine != null)
|
||||||
{
|
return;
|
||||||
|
|
||||||
_switchCoroutine = StartCoroutine(SwitchLoop());
|
_switchCoroutine = StartCoroutine(SwitchLoop());
|
||||||
_sleep = new WaitForSeconds(2f);
|
_sleep = new WaitForSeconds(2f);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void OnDisable()
|
private void OnDisable()
|
||||||
{
|
{
|
||||||
if (_switchCoroutine != null)
|
if (_switchCoroutine == null)
|
||||||
{
|
return;
|
||||||
|
|
||||||
StopCoroutine(_switchCoroutine);
|
StopCoroutine(_switchCoroutine);
|
||||||
_switchCoroutine = null;
|
_switchCoroutine = null;
|
||||||
_sleep = null;
|
_sleep = null;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private IEnumerator SwitchLoop()
|
private IEnumerator SwitchLoop()
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class VRModeSwitchManager : MonoBehaviour
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
public static bool IsInXR() => XRGeneralSettings.Instance.Manager.activeLoader != null;
|
private static bool IsInXR() => XRGeneralSettings.Instance.Manager.activeLoader != null;
|
||||||
|
|
||||||
public void AttemptSwitch() => StartCoroutine(StartSwitchInternal());
|
public void AttemptSwitch() => StartCoroutine(StartSwitchInternal());
|
||||||
|
|
||||||
|
@ -56,10 +56,12 @@ public class VRModeSwitchManager : MonoBehaviour
|
||||||
if (SwitchInProgress)
|
if (SwitchInProgress)
|
||||||
yield break;
|
yield break;
|
||||||
|
|
||||||
|
bool useWorldTransition = UseWorldTransition;
|
||||||
SwitchInProgress = true;
|
SwitchInProgress = true;
|
||||||
|
|
||||||
yield return null;
|
yield return null;
|
||||||
|
|
||||||
if (UseWorldTransition)
|
if (useWorldTransition)
|
||||||
yield return StartCoroutine(StartTransition());
|
yield return StartCoroutine(StartTransition());
|
||||||
|
|
||||||
bool isUsingVr = IsInXR();
|
bool isUsingVr = IsInXR();
|
||||||
|
@ -68,7 +70,7 @@ public class VRModeSwitchManager : MonoBehaviour
|
||||||
|
|
||||||
yield return StartCoroutine(XRAndReloadAvatar(!isUsingVr));
|
yield return StartCoroutine(XRAndReloadAvatar(!isUsingVr));
|
||||||
|
|
||||||
if (UseWorldTransition)
|
if (useWorldTransition)
|
||||||
yield return StartCoroutine(ContinueTransition());
|
yield return StartCoroutine(ContinueTransition());
|
||||||
|
|
||||||
SwitchInProgress = false;
|
SwitchInProgress = false;
|
||||||
|
@ -145,7 +147,7 @@ public class VRModeSwitchManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var playerCamera = Utils.GetPlayerCameraObject(isUsingVr).GetComponent<Camera>();
|
Camera playerCamera = Utils.GetPlayerCameraObject(isUsingVr).GetComponent<Camera>();
|
||||||
switchEvent?.Invoke(this, new VRModeEventArgs(isUsingVr, playerCamera));
|
switchEvent?.Invoke(this, new VRModeEventArgs(isUsingVr, playerCamera));
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using ABI_RC.Core.Savior;
|
using ABI_RC.Core.Savior;
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace NAK.DesktopVRSwitch.VRModeTrackers;
|
namespace NAK.DesktopVRSwitch.VRModeTrackers;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using ABI_RC.Core.Savior;
|
using ABI_RC.Systems.InputManagement;
|
||||||
using ABI_RC.Systems.InputManagement;
|
|
||||||
using ABI_RC.Systems.InputManagement.InputModules;
|
using ABI_RC.Systems.InputManagement.InputModules;
|
||||||
|
|
||||||
namespace NAK.DesktopVRSwitch.VRModeTrackers;
|
namespace NAK.DesktopVRSwitch.VRModeTrackers;
|
||||||
|
|
|
@ -20,8 +20,9 @@ public class CVRPickupObjectTracker : MonoBehaviour
|
||||||
|
|
||||||
public void OnPostSwitch(object sender, VRModeSwitchManager.VRModeEventArgs args)
|
public void OnPostSwitch(object sender, VRModeSwitchManager.VRModeEventArgs args)
|
||||||
{
|
{
|
||||||
if (_pickupObject != null)
|
if (_pickupObject == null)
|
||||||
{
|
return;
|
||||||
|
|
||||||
// Drop the object if it is being held locally
|
// Drop the object if it is being held locally
|
||||||
if (_pickupObject._controllerRay != null)
|
if (_pickupObject._controllerRay != null)
|
||||||
_pickupObject._controllerRay.DropObject(true);
|
_pickupObject._controllerRay.DropObject(true);
|
||||||
|
@ -30,4 +31,3 @@ public class CVRPickupObjectTracker : MonoBehaviour
|
||||||
(_storedGripOrigin, _pickupObject.gripOrigin) = (_pickupObject.gripOrigin, _storedGripOrigin);
|
(_storedGripOrigin, _pickupObject.gripOrigin) = (_pickupObject.gripOrigin, _storedGripOrigin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -16,8 +16,9 @@ public class CVR_InteractableManagerTracker : VRModeTracker
|
||||||
|
|
||||||
private void OnPostSwitch(object sender, VRModeSwitchManager.VRModeEventArgs args)
|
private void OnPostSwitch(object sender, VRModeSwitchManager.VRModeEventArgs args)
|
||||||
{
|
{
|
||||||
DesktopVRSwitch.Logger.Msg($"Setting CVRInputManager inputEnabled & CVR_InteractableManager enableInteractions to {!args.IsUsingVr}");
|
DesktopVRSwitch.Logger.Msg($"Enabling CVR_InteractableManager enableInteractions.");
|
||||||
|
|
||||||
CVR_InteractableManager.enableInteractions = !args.IsUsingVr;
|
// ?
|
||||||
|
CVR_InteractableManager.enableInteractions = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -29,7 +29,6 @@ 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 = args.IsUsingVr;
|
CVR_MenuManager.Instance.coreData.core.inVr = args.IsUsingVr;
|
||||||
CVR_MenuManager.Instance.quickMenu.transform.localPosition = Vector3.zero;
|
CVR_MenuManager.Instance.quickMenu.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
|
||||||
CVR_MenuManager.Instance.quickMenu.transform.localRotation = Quaternion.identity;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -21,10 +21,14 @@ public class CohtmlHudTracker : VRModeTracker
|
||||||
DesktopVRSwitch.Logger.Msg("Configuring new hud affinity for CohtmlHud.");
|
DesktopVRSwitch.Logger.Msg("Configuring new hud affinity for CohtmlHud.");
|
||||||
|
|
||||||
CohtmlHud.Instance.gameObject.transform.parent = Utils.GetPlayerCameraObject(args.IsUsingVr).transform;
|
CohtmlHud.Instance.gameObject.transform.parent = Utils.GetPlayerCameraObject(args.IsUsingVr).transform;
|
||||||
|
|
||||||
// This handles rotation and position
|
// This handles rotation and position
|
||||||
CVRTools.ConfigureHudAffinity();
|
CVRTools.ConfigureHudAffinity();
|
||||||
CohtmlHud.Instance.gameObject.transform.localScale = new Vector3(1.2f, 1f, 1.2f);
|
CohtmlHud.Instance.gameObject.transform.localScale = new Vector3(1.2f, 1f, 1.2f);
|
||||||
|
|
||||||
CohtmlHud.Instance.markMenuAsReady();
|
// required to set menu vr mode (why is it offset in js?)
|
||||||
|
CohtmlHud.uiCoreGameData.isVr = args.IsUsingVr;
|
||||||
|
if (CohtmlHud.Instance._isReady)
|
||||||
|
CohtmlHud.Instance.hudView.View.TriggerEvent("updateCoreGameVars", CohtmlHud.uiCoreGameData);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -64,7 +64,7 @@ public class IKSystemTracker : VRModeTracker
|
||||||
|
|
||||||
private void SetupSteamVRTrackingModule(bool enableVR)
|
private void SetupSteamVRTrackingModule(bool enableVR)
|
||||||
{
|
{
|
||||||
var openVRModule = IKSystem.Instance._trackingModules.OfType<SteamVRTrackingModule>().FirstOrDefault();
|
SteamVRTrackingModule openVRModule = IKSystem.Instance._trackingModules.OfType<SteamVRTrackingModule>().FirstOrDefault();
|
||||||
|
|
||||||
if (openVRModule != null)
|
if (openVRModule != null)
|
||||||
{
|
{
|
||||||
|
@ -75,8 +75,7 @@ public class IKSystemTracker : VRModeTracker
|
||||||
}
|
}
|
||||||
else if (enableVR)
|
else if (enableVR)
|
||||||
{
|
{
|
||||||
var newVRModule = new SteamVRTrackingModule();
|
IKSystem.Instance.AddTrackingModule(new SteamVRTrackingModule());
|
||||||
IKSystem.Instance.AddTrackingModule(newVRModule);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -59,7 +59,7 @@ public class MovementSystemTracker : VRModeTracker
|
||||||
DesktopVRSwitch.Logger.Msg("Resetting MovementSystem mobility and applying stored position and rotation.");
|
DesktopVRSwitch.Logger.Msg("Resetting MovementSystem mobility and applying stored position and rotation.");
|
||||||
|
|
||||||
MovementSystem.Instance.rotationPivot = Utils.GetPlayerCameraObject(intoVR).transform;
|
MovementSystem.Instance.rotationPivot = Utils.GetPlayerCameraObject(intoVR).transform;
|
||||||
MovementSystem.Instance.TeleportToPosRot(preSwitchWorldPosition, preSwitchWorldRotation, false);
|
MovementSystem.Instance.TeleportToPosRot(preSwitchWorldPosition, preSwitchWorldRotation);
|
||||||
|
|
||||||
if (!intoVR)
|
if (!intoVR)
|
||||||
MovementSystem.Instance.UpdateColliderCenter(MovementSystem.Instance.transform.position);
|
MovementSystem.Instance.UpdateColliderCenter(MovementSystem.Instance.transform.position);
|
||||||
|
@ -67,7 +67,5 @@ public class MovementSystemTracker : VRModeTracker
|
||||||
MovementSystem.Instance.ChangeCrouch(false);
|
MovementSystem.Instance.ChangeCrouch(false);
|
||||||
MovementSystem.Instance.ChangeProne(false);
|
MovementSystem.Instance.ChangeProne(false);
|
||||||
MovementSystem.Instance.SetImmobilized(false);
|
MovementSystem.Instance.SetImmobilized(false);
|
||||||
|
|
||||||
yield break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -18,7 +18,7 @@ internal static class XRHandler
|
||||||
if (XRGeneralSettings.Instance.Manager.activeLoader != null)
|
if (XRGeneralSettings.Instance.Manager.activeLoader != null)
|
||||||
XRGeneralSettings.Instance.Manager.StartSubsystems();
|
XRGeneralSettings.Instance.Manager.StartSubsystems();
|
||||||
else
|
else
|
||||||
StopXR();
|
yield return StopXR();
|
||||||
|
|
||||||
yield return null;
|
yield return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
{
|
{
|
||||||
"_id": 103,
|
"_id": 103,
|
||||||
"name": "DesktopVRSwitch",
|
"name": "DesktopVRSwitch",
|
||||||
"modversion": "4.4.0",
|
"modversion": "4.4.1",
|
||||||
"gameversion": "2022r170p1",
|
"gameversion": "2023r171",
|
||||||
"loaderversion": "0.6.1",
|
"loaderversion": "0.6.1",
|
||||||
"modtype": "Mod",
|
"modtype": "Mod",
|
||||||
"author": "NotAKidoS",
|
"author": "NotAKidoS",
|
||||||
"description": "Allows you to switch between Desktop and VR with a keybind.\n**Press Control + F6 to switch.**\n\nWhile this mod is a nice convienence feature to have access to, not every ChilloutVR system or mod is built to support it. I cannot possibly cover every edge case or mitigate issues with every mod. **Use at your own discretion.**",
|
"description": "Allows you to switch between Desktop and VR with a keybind.\n**Press Control + F6 to switch.**\n\nWhile this mod is a nice convenience feature to have access to, not every ChilloutVR system or mod is built to support it. I cannot possibly cover every edge case or mitigate issues with every mod. **Use at your own discretion.**",
|
||||||
"searchtags": [
|
"searchtags": [
|
||||||
"desktop",
|
"desktop",
|
||||||
"vr",
|
"vr",
|
||||||
"switch",
|
"switch",
|
||||||
"hotswap"
|
"restart"
|
||||||
],
|
],
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"None"
|
"None"
|
||||||
],
|
],
|
||||||
"downloadlink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/releases/download/r12/DesktopVRSwitch.dll",
|
"downloadlink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/releases/download/r20/DesktopVRSwitch.dll",
|
||||||
"sourcelink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/tree/main/DesktopVRSwitch/",
|
"sourcelink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/tree/main/DesktopVRSwitch/",
|
||||||
"changelog": "- Fixed issue with Zoom gamerule being ignored if first joined in VR.\n- Fixed issue with post processing settings not being updated.\n- Fixed conflict with Third Person.\n- Fixed conflict with DesktopVRIK.\n- Potentially fixed rare Cohtml crash regarding Gamepad registering on switch.\n- Potentially fixed eye tracking not being handled on switch.\n- Fixed a bunch of QualitySettings that SteamVR would override not being reset on switch to Desktop.\n- Potentially fixed issue where entering VR after restarting SteamVR resulted in low renderscale.\n- Fixed issue with CVRPickupObject patch breaking other mods.\n- Reworked how SteamVR is initialized & deinitialized.\n- Hijacked world transition system for switch transition.\n- Added option to automatically switch to Desktop when closing SteamVR.",
|
"changelog": "- Fixes for 2023r171.",
|
||||||
"embedcolor": "3498db"
|
"embedcolor": "3498db"
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue