mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 14:29:25 +00:00
96 lines
No EOL
3.2 KiB
C#
96 lines
No EOL
3.2 KiB
C#
|
|
using MelonLoader;
|
|
using NAK.DesktopVRSwitch.VRModeTrackers;
|
|
using UnityEngine;
|
|
|
|
namespace NAK.DesktopVRSwitch;
|
|
|
|
public class DesktopVRSwitch : MelonMod
|
|
{
|
|
internal static MelonLogger.Instance Logger;
|
|
|
|
public override void OnInitializeMelon()
|
|
{
|
|
Logger = LoggerInstance;
|
|
|
|
RegisterVRModeTrackers();
|
|
|
|
// main manager
|
|
ApplyPatches(typeof(HarmonyPatches.CheckVRPatches));
|
|
// nameplate fixes
|
|
ApplyPatches(typeof(HarmonyPatches.CameraFacingObjectPatches));
|
|
// pickup fixes
|
|
ApplyPatches(typeof(HarmonyPatches.CVRPickupObjectPatches));
|
|
// lazy fix to reset iksystem
|
|
ApplyPatches(typeof(HarmonyPatches.IKSystemPatches));
|
|
// post processing fixes
|
|
ApplyPatches(typeof(HarmonyPatches.CVRWorldPatches));
|
|
|
|
// prevent steamvr behaviour from closing game
|
|
ApplyPatches(typeof(HarmonyPatches.SteamVRBehaviourPatches));
|
|
|
|
InitializeIntegration("BTKUILib", Integrations.BTKUIAddon.Initialize);
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (!Input.GetKeyDown(KeyCode.F6) || !Input.GetKey(KeyCode.LeftControl))
|
|
return;
|
|
|
|
if (VRModeSwitchManager.Instance != null)
|
|
VRModeSwitchManager.Instance.AttemptSwitch();
|
|
}
|
|
|
|
private static void RegisterVRModeTrackers()
|
|
{
|
|
// Core trackers
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CheckVRTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new MetaPortTracker());
|
|
|
|
// HUD trackers
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CohtmlHudTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new HudOperationsTracker());
|
|
|
|
// Player trackers
|
|
VRModeSwitchManager.RegisterVRModeTracker(new PlayerSetupTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new MovementSystemTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new IKSystemTracker());
|
|
|
|
// Menu trackers
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CVR_MenuManagerTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new ViewManagerTracker());
|
|
|
|
// Interaction trackers
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CVRInputManagerTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CVR_InteractableManagerTracker());
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CVRGestureRecognizerTracker());
|
|
|
|
// Portable camera tracker
|
|
VRModeSwitchManager.RegisterVRModeTracker(new PortableCameraTracker());
|
|
|
|
// CVRWorld tracker - Must come after PlayerSetupTracker
|
|
VRModeSwitchManager.RegisterVRModeTracker(new CVRWorldTracker());
|
|
}
|
|
|
|
private static void InitializeIntegration(string modName, Action integrationAction)
|
|
{
|
|
if (RegisteredMelons.All(it => it.Info.Name != modName))
|
|
return;
|
|
|
|
Logger.Msg($"Initializing {modName} integration.");
|
|
integrationAction.Invoke();
|
|
}
|
|
|
|
private void ApplyPatches(Type type)
|
|
{
|
|
try
|
|
{
|
|
HarmonyInstance.PatchAll(type);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
LoggerInstance.Msg($"Failed while patching {type.Name}!");
|
|
LoggerInstance.Error(e);
|
|
}
|
|
}
|
|
} |