From da42d3da5731114e4b8572b18511990d56fe42b7 Mon Sep 17 00:00:00 2001
From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com>
Date: Fri, 13 Jan 2023 18:30:22 -0600
Subject: [PATCH] simplified mod, added proper BTKUILib support
---
.../BTKUI_Integration/BTKUI_Integration.cs | 30 ++
DesktopVRIK/DesktopVRIK.cs | 57 +++-
DesktopVRIK/DesktopVRIK.csproj | 12 +-
DesktopVRIK/HarmonyPatches.cs | 319 +++++++++---------
DesktopVRIK/Main.cs | 56 +--
DesktopVRIK/Properties/AssemblyInfo.cs | 11 +-
6 files changed, 273 insertions(+), 212 deletions(-)
create mode 100644 DesktopVRIK/BTKUI_Integration/BTKUI_Integration.cs
diff --git a/DesktopVRIK/BTKUI_Integration/BTKUI_Integration.cs b/DesktopVRIK/BTKUI_Integration/BTKUI_Integration.cs
new file mode 100644
index 0000000..c0b9b1c
--- /dev/null
+++ b/DesktopVRIK/BTKUI_Integration/BTKUI_Integration.cs
@@ -0,0 +1,30 @@
+using System.Runtime.CompilerServices;
+using BTKUILib;
+using BTKUILib.UIObjects;
+
+namespace NAK.Melons.DesktopVRIK.BTKUI_Integration;
+
+public static class BTKUI_Integration
+{
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ public static void Init()
+ {
+ Page miscPage = QuickMenuAPI.MiscTabPage;
+ Category CategoryUI = miscPage.AddCategory("DesktopVRIK");
+
+ var setting_Enabled = CategoryUI.AddToggle(DesktopVRIKMod.m_entryEnabled.DisplayName, DesktopVRIKMod.m_entryEnabled.Description, DesktopVRIKMod.m_entryEnabled.Value);
+ setting_Enabled.OnValueUpdated += b => DesktopVRIKMod.m_entryEnabled.Value = b;
+
+ var setting_EnforceViewPosition = CategoryUI.AddToggle(DesktopVRIKMod.m_entryEnforceViewPosition.DisplayName, DesktopVRIKMod.m_entryEnforceViewPosition.Description, DesktopVRIKMod.m_entryEnforceViewPosition.Value);
+ setting_EnforceViewPosition.OnValueUpdated += b => DesktopVRIKMod.m_entryEnforceViewPosition.Value = b;
+
+ var setting_DisableEmoteVRIK = CategoryUI.AddToggle(DesktopVRIKMod.m_entryEmoteVRIK.DisplayName, DesktopVRIKMod.m_entryEmoteVRIK.Description, DesktopVRIKMod.m_entryEmoteVRIK.Value);
+ setting_DisableEmoteVRIK.OnValueUpdated += b => DesktopVRIKMod.m_entryEmoteVRIK.Value = b;
+
+ var setting_DisableEmoteLookAtIK = CategoryUI.AddToggle(DesktopVRIKMod.m_entryEmoteLookAtIK.DisplayName, DesktopVRIKMod.m_entryEmoteLookAtIK.Description, DesktopVRIKMod.m_entryEmoteLookAtIK.Value);
+ setting_DisableEmoteLookAtIK.OnValueUpdated += b => DesktopVRIKMod.m_entryEmoteLookAtIK.Value = b;
+
+ var setting_EmulateHipMovementWeight = miscPage.AddSlider(DesktopVRIKMod.m_entryEmulateVRChatHipMovementWeight.DisplayName, DesktopVRIKMod.m_entryEmulateVRChatHipMovementWeight.Description, DesktopVRIKMod.m_entryEmulateVRChatHipMovementWeight.Value, 0f, 1f);
+ setting_EmulateHipMovementWeight.OnValueUpdated += f => DesktopVRIKMod.m_entryEmulateVRChatHipMovementWeight.Value = f;
+ }
+}
\ No newline at end of file
diff --git a/DesktopVRIK/DesktopVRIK.cs b/DesktopVRIK/DesktopVRIK.cs
index 83b8408..99c2dee 100644
--- a/DesktopVRIK/DesktopVRIK.cs
+++ b/DesktopVRIK/DesktopVRIK.cs
@@ -7,19 +7,17 @@ using RootMotion.FinalIK;
using UnityEngine;
using UnityEngine.Events;
-namespace DesktopVRIK;
+namespace NAK.Melons.DesktopVRIK;
public class DesktopVRIK : MonoBehaviour
{
public static DesktopVRIK Instance;
- public bool Setting_Enabled,
- Setting_EmulateVRChatHipMovement,
- Setting_EnforceViewPosition,
- Setting_EmoteVRIK,
- Setting_EmoteLookAtIK,
- Setting_PlantFeet;
- public float Setting_EmulateVRChatHipMovementWeight;
+ public static bool Setting_Enabled,
+ Setting_EnforceViewPosition,
+ Setting_EmoteVRIK,
+ Setting_EmoteLookAtIK;
+ public static float Setting_EmulateVRChatHipMovementWeight;
public Transform viewpoint;
public Vector3 initialCamPos;
@@ -31,6 +29,7 @@ public class DesktopVRIK : MonoBehaviour
public void ChangeViewpointHandling(bool enabled)
{
+ if (Setting_EnforceViewPosition == enabled) return;
Setting_EnforceViewPosition = enabled;
if (enabled)
{
@@ -39,28 +38,43 @@ public class DesktopVRIK : MonoBehaviour
}
PlayerSetup.Instance.desktopCamera.transform.localPosition = initialCamPos;
}
-
+
public void OnPreSolverUpdate()
{
+ //this order matters, rotation offset will be choppy if avatar is not cenetered first
//Reset avatar offset (VRIK will literally make you walk away from root otherwise)
IKSystem.vrik.transform.localPosition = Vector3.zero;
IKSystem.vrik.transform.localRotation = Quaternion.identity;
//VRChat hip movement emulation
- if (Setting_EmulateVRChatHipMovement)
+ if (Setting_EmulateVRChatHipMovementWeight != 0)
{
float angle = PlayerSetup.Instance.desktopCamera.transform.localEulerAngles.x;
- angle = (angle > 180) ? angle - 360 : angle;
- float weight = (Setting_EmulateVRChatHipMovementWeight - MovementSystem.Instance.movementVector.magnitude);
- Quaternion rotation = Quaternion.AngleAxis(angle * weight, IKSystem.Instance.avatar.transform.right);
+ if (angle > 180) angle -= 360;
+ float leanAmount = angle * (1 - MovementSystem.Instance.movementVector.magnitude) * Setting_EmulateVRChatHipMovementWeight;
+ Quaternion rotation = Quaternion.AngleAxis(leanAmount, IKSystem.Instance.avatar.transform.right);
IKSystem.vrik.solver.AddRotationOffset(IKSolverVR.RotationOffset.Head, rotation);
}
- IKSystem.vrik.solver.plantFeet = Setting_PlantFeet;
+ IKSystem.vrik.solver.plantFeet = true;
}
public void CalibrateDesktopVRIK(CVRAvatar avatar)
{
+ //ikpose layer (specified by avatar author)
+ int? ikposeLayerIndex = PlayerSetup.Instance.animatorManager.GetAnimatorLayerIndex("IKPose");
+ int? locoLayerIndex = PlayerSetup.Instance.animatorManager.GetAnimatorLayerIndex("Locomotion/Emotes");
+
+ if (ikposeLayerIndex != -1)
+ {
+ PlayerSetup.Instance.animatorManager.SetAnimatorLayerWeight("IKPose", 1f);
+ if (locoLayerIndex != -1)
+ {
+ PlayerSetup.Instance.animatorManager.SetAnimatorLayerWeight("Locomotion/Emotes", 0f);
+ }
+ IKSystem.Instance.animator.Update(0f);
+ }
+
+
//Stuff to make bad armatures work (Fuck you Default Robot Kyle)
- IKSystem.Instance.animator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
avatar.transform.localPosition = Vector3.zero;
Quaternion originalRotation = avatar.transform.rotation;
avatar.transform.rotation = Quaternion.identity;
@@ -69,10 +83,11 @@ public class DesktopVRIK : MonoBehaviour
IKSystem.vrik.fixTransforms = false;
IKSystem.vrik.solver.plantFeet = false;
- IKSystem.vrik.solver.locomotion.weight = 1f;
+ IKSystem.vrik.solver.locomotion.weight = 0f;
IKSystem.vrik.solver.locomotion.angleThreshold = 30f;
IKSystem.vrik.solver.locomotion.maxLegStretch = 0.75f;
//nuke weights
+ IKSystem.vrik.AutoDetectReferences();
IKSystem.vrik.solver.spine.headClampWeight = 0f;
IKSystem.vrik.solver.spine.minHeadHeight = 0f;
IKSystem.vrik.solver.leftArm.positionWeight = 0f;
@@ -115,7 +130,15 @@ public class DesktopVRIK : MonoBehaviour
IKSystem.vrik.onPreSolverUpdate.AddListener(new UnityAction(this.OnPreSolverUpdate));
}
- //(Fuck you Default Robot Kyle).. oh wait nvm, not related
+ if (ikposeLayerIndex != -1)
+ {
+ PlayerSetup.Instance.animatorManager.SetAnimatorLayerWeight("IKPose", 0f);
+ if (locoLayerIndex != -1)
+ {
+ PlayerSetup.Instance.animatorManager.SetAnimatorLayerWeight("Locomotion/Emotes", 1f);
+ }
+ }
+
avatar.transform.rotation = originalRotation;
IKSystem.Instance.ResetIK();
}
diff --git a/DesktopVRIK/DesktopVRIK.csproj b/DesktopVRIK/DesktopVRIK.csproj
index c947a92..c432ed3 100644
--- a/DesktopVRIK/DesktopVRIK.csproj
+++ b/DesktopVRIK/DesktopVRIK.csproj
@@ -18,21 +18,21 @@
..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll
+
+ ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll
+
..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll
-
- ..\..\Giamoz\Giamoz\bin\Debug\net472\Giamoz.dll
-
C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll
-
- C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\SteamVR.dll
-
..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll
+
+ ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AssetBundleModule.dll
+
C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll
diff --git a/DesktopVRIK/HarmonyPatches.cs b/DesktopVRIK/HarmonyPatches.cs
index 07629d0..7f4132e 100644
--- a/DesktopVRIK/HarmonyPatches.cs
+++ b/DesktopVRIK/HarmonyPatches.cs
@@ -4,7 +4,6 @@ using ABI_RC.Core.Savior;
using ABI_RC.Systems.IK;
using ABI_RC.Systems.IK.SubSystems;
using ABI_RC.Systems.MovementSystem;
-using ABI_RC.Core.Player.AvatarTracking.Local;
using HarmonyLib;
using RootMotion.FinalIK;
using UnityEngine;
@@ -33,17 +32,17 @@ using UnityEngine;
**/
-namespace DesktopVRIK;
+namespace NAK.Melons.DesktopVRIK.HarmonyPatches;
-[HarmonyPatch]
-internal class HarmonyPatches
+class PlayerSetupPatches
{
+ private static bool emotePlayed = false;
[HarmonyPostfix]
[HarmonyPatch(typeof(PlayerSetup), "SetupAvatarGeneral")]
- private static void SetupDesktopIKSystem(ref CVRAvatar ____avatarDescriptor, ref Animator ____animator)
+ static void SetupDesktopIKSystem(ref CVRAvatar ____avatarDescriptor, ref Animator ____animator)
{
- if (!MetaPort.Instance.isUsingVr && DesktopVRIK.Instance.Setting_Enabled)
+ if (!MetaPort.Instance.isUsingVr && DesktopVRIK.Setting_Enabled)
{
if (____avatarDescriptor != null && ____animator != null && ____animator.isHuman)
{
@@ -53,11 +52,56 @@ internal class HarmonyPatches
}
}
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PlayerSetup), "Update")]
+ private static void CorrectVRIK(ref bool ____emotePlaying, ref LookAtIK ___lookIK)
+ {
+ if (!MetaPort.Instance.isUsingVr && DesktopVRIK.Setting_Enabled)
+ {
+ bool changed = ____emotePlaying != emotePlayed;
+ if (changed)
+ {
+ emotePlayed = ____emotePlaying;
+ IKSystem.vrik.transform.localPosition = Vector3.zero;
+ IKSystem.vrik.transform.localRotation = Quaternion.identity;
+ if (DesktopVRIK.Setting_EmoteLookAtIK && ___lookIK != null)
+ {
+ ___lookIK.enabled = !____emotePlaying;
+ }
+ if (DesktopVRIK.Setting_EmoteVRIK)
+ {
+ BodySystem.TrackingEnabled = !____emotePlaying;
+ IKSystem.vrik.solver?.Reset();
+ }
+ }
+ }
+ }
+
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PlayerSetup), "HandleDesktopCameraPosition")]
+ private static void Postfix_PlayerSetup_HandleDesktopCameraPosition(bool ignore, ref PlayerSetup __instance, ref MovementSystem ____movementSystem, ref int ___headBobbingLevel)
+ {
+ if (DesktopVRIK.Setting_Enabled && DesktopVRIK.Setting_EnforceViewPosition)
+ {
+ if (!____movementSystem.disableCameraControl || ignore)
+ {
+ if (___headBobbingLevel == 2 && DesktopVRIK.Instance.viewpoint != null)
+ {
+ __instance.desktopCamera.transform.localPosition = Vector3.zero;
+ __instance.desktopCameraRig.transform.position = DesktopVRIK.Instance.viewpoint.position;
+ }
+ }
+ }
+ }
+}
+
+class IKSystemPatches
+{
[HarmonyPostfix]
[HarmonyPatch(typeof(IKSystem), "InitializeAvatar")]
private static void InitializeDesktopAvatarVRIK(CVRAvatar avatar, ref VRIK ____vrik, ref HumanPoseHandler ____poseHandler, ref HumanPose ___humanPose)
{
- if (!MetaPort.Instance.isUsingVr && DesktopVRIK.Instance.Setting_Enabled)
+ if (!MetaPort.Instance.isUsingVr && DesktopVRIK.Setting_Enabled)
{
if (IKSystem.Instance.animator != null && IKSystem.Instance.animator.avatar != null && IKSystem.Instance.animator.avatar.isHuman)
{
@@ -66,11 +110,12 @@ internal class HarmonyPatches
{
____poseHandler = new HumanPoseHandler(IKSystem.Instance.animator.avatar, IKSystem.Instance.animator.transform);
}
+
____poseHandler.GetHumanPose(ref ___humanPose);
- for (int i = 0; i < TPoseMuscles.Length; i++)
- {
- IKSystem.Instance.ApplyMuscleValue((MuscleIndex)i, TPoseMuscles[i], ref ___humanPose.muscles);
- }
+ //for (int i = 0; i < TPoseMuscles.Length; i++)
+ //{
+ // IKSystem.Instance.ApplyMuscleValue((MuscleIndex)i, TPoseMuscles[i], ref ___humanPose.muscles);
+ //}
____poseHandler.SetHumanPose(ref ___humanPose);
//need IKSystem to see VRIK component for setup
@@ -85,158 +130,102 @@ internal class HarmonyPatches
}
}
- private static bool emotePlayed = false;
-
- [HarmonyPostfix]
- [HarmonyPatch(typeof(PlayerSetup), "Update")]
- private static void CorrectVRIK(ref bool ____emotePlaying, ref LookAtIK ___lookIK)
+ private static readonly float[] TPoseMuscles = new float[]
{
- if (MetaPort.Instance.isUsingVr || DesktopVRIK.Instance == null) return;
-
- //might need to rework this in the future
- if (____emotePlaying && !emotePlayed)
- {
- emotePlayed = true;
- if (DesktopVRIK.Instance.Setting_EmoteVRIK)
- {
- BodySystem.TrackingEnabled = false;
- //IKSystem.vrik.solver.Reset();
- }
- if (DesktopVRIK.Instance.Setting_EmoteLookAtIK && ___lookIK != null)
- {
- ___lookIK.enabled = false;
- }
- IKSystem.vrik.transform.localPosition = Vector3.zero;
- IKSystem.vrik.transform.localRotation = Quaternion.identity;
- }
- else if (!____emotePlaying && emotePlayed)
- {
- emotePlayed = false;
- IKSystem.vrik.solver.Reset();
- BodySystem.TrackingEnabled = true;
- if (___lookIK != null)
- {
- ___lookIK.enabled = true;
- }
- IKSystem.vrik.transform.localPosition = Vector3.zero;
- IKSystem.vrik.transform.localRotation = Quaternion.identity;
- }
- }
-
- [HarmonyPostfix]
- [HarmonyPatch(typeof(PlayerSetup), "HandleDesktopCameraPosition")]
- private static void Postfix_PlayerSetup_HandleDesktopCameraPosition(bool ignore, ref PlayerSetup __instance, ref MovementSystem ____movementSystem, ref int ___headBobbingLevel)
- {
- if (DesktopVRIK.Instance.Setting_EnforceViewPosition)
- {
- if (!____movementSystem.disableCameraControl || ignore)
- {
- if (___headBobbingLevel == 2 && DesktopVRIK.Instance.viewpoint != null)
- {
- __instance.desktopCamera.transform.localPosition = Vector3.zero;
- __instance.desktopCameraRig.transform.position = DesktopVRIK.Instance.viewpoint.position;
- }
- }
- }
- }
-
- private static readonly float[] TPoseMuscles = new float[]
- {
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0f,
- 0.6001086f,
- 8.6213E-05f,
- -0.0003308152f,
- 0.9999163f,
- -9.559652E-06f,
- 3.41413E-08f,
- -3.415095E-06f,
- -1.024528E-07f,
- 0.6001086f,
- 8.602679E-05f,
- -0.0003311098f,
- 0.9999163f,
- -9.510122E-06f,
- 1.707468E-07f,
- -2.732077E-06f,
- 2.035554E-15f,
- -2.748694E-07f,
- 2.619475E-07f,
- 0.401967f,
- 0.3005583f,
- 0.04102772f,
- 0.9998822f,
- -0.04634236f,
- 0.002522987f,
- 0.0003842837f,
- -2.369134E-07f,
- -2.232262E-07f,
- 0.4019674f,
- 0.3005582f,
- 0.04103433f,
- 0.9998825f,
- -0.04634996f,
- 0.00252335f,
- 0.000383302f,
- -1.52127f,
- 0.2634507f,
- 0.4322457f,
- 0.6443988f,
- 0.6669409f,
- -0.4663372f,
- 0.8116828f,
- 0.8116829f,
- 0.6678119f,
- -0.6186608f,
- 0.8116842f,
- 0.8116842f,
- 0.6677991f,
- -0.619225f,
- 0.8116842f,
- 0.811684f,
- 0.6670032f,
- -0.465875f,
- 0.811684f,
- 0.8116836f,
- -1.520098f,
- 0.2613016f,
- 0.432256f,
- 0.6444503f,
- 0.6668426f,
- -0.4670413f,
- 0.8116828f,
- 0.8116828f,
- 0.6677986f,
- -0.6192409f,
- 0.8116841f,
- 0.811684f,
- 0.6677839f,
- -0.6198869f,
- 0.8116839f,
- 0.8116838f,
- 0.6668782f,
- -0.4667901f,
- 0.8116842f,
- 0.811684f
- };
-
-}
\ No newline at end of file
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0f,
+ 0.6001086f,
+ 8.6213E-05f,
+ -0.0003308152f,
+ 0.9999163f,
+ -9.559652E-06f,
+ 3.41413E-08f,
+ -3.415095E-06f,
+ -1.024528E-07f,
+ 0.6001086f,
+ 8.602679E-05f,
+ -0.0003311098f,
+ 0.9999163f,
+ -9.510122E-06f,
+ 1.707468E-07f,
+ -2.732077E-06f,
+ 2.035554E-15f,
+ -2.748694E-07f,
+ 2.619475E-07f,
+ 0.401967f,
+ 0.3005583f,
+ 0.04102772f,
+ 0.9998822f,
+ -0.04634236f,
+ 0.002522987f,
+ 0.0003842837f,
+ -2.369134E-07f,
+ -2.232262E-07f,
+ 0.4019674f,
+ 0.3005582f,
+ 0.04103433f,
+ 0.9998825f,
+ -0.04634996f,
+ 0.00252335f,
+ 0.000383302f,
+ -1.52127f,
+ 0.2634507f,
+ 0.4322457f,
+ 0.6443988f,
+ 0.6669409f,
+ -0.4663372f,
+ 0.8116828f,
+ 0.8116829f,
+ 0.6678119f,
+ -0.6186608f,
+ 0.8116842f,
+ 0.8116842f,
+ 0.6677991f,
+ -0.619225f,
+ 0.8116842f,
+ 0.811684f,
+ 0.6670032f,
+ -0.465875f,
+ 0.811684f,
+ 0.8116836f,
+ -1.520098f,
+ 0.2613016f,
+ 0.432256f,
+ 0.6444503f,
+ 0.6668426f,
+ -0.4670413f,
+ 0.8116828f,
+ 0.8116828f,
+ 0.6677986f,
+ -0.6192409f,
+ 0.8116841f,
+ 0.811684f,
+ 0.6677839f,
+ -0.6198869f,
+ 0.8116839f,
+ 0.8116838f,
+ 0.6668782f,
+ -0.4667901f,
+ 0.8116842f,
+ 0.811684f
+ };
+}
diff --git a/DesktopVRIK/Main.cs b/DesktopVRIK/Main.cs
index 6a25069..e236813 100644
--- a/DesktopVRIK/Main.cs
+++ b/DesktopVRIK/Main.cs
@@ -2,35 +2,42 @@
using MelonLoader;
using UnityEngine;
-namespace DesktopVRIK;
+namespace NAK.Melons.DesktopVRIK;
public class DesktopVRIKMod : MelonMod
{
internal const string SettingsCategory = "DesktopVRIK";
- private static MelonPreferences_Category m_categoryDesktopVRIK;
- private static MelonPreferences_Entry m_entryEnabled,
- m_entryEmulateHipMovement,
- m_entryEnforceViewPosition,
- m_entryEmoteVRIK,
- m_entryEmoteLookAtIK,
- m_entryPlantFeet;
- private static MelonPreferences_Entry m_entryEmulateVRChatHipMovementWeight;
+ internal static MelonPreferences_Category m_categoryDesktopVRIK;
+ internal static MelonPreferences_Entry m_entryEnabled,
+ m_entryEnforceViewPosition,
+ m_entryEmoteVRIK,
+ m_entryEmoteLookAtIK;
+ internal static MelonPreferences_Entry m_entryEmulateVRChatHipMovementWeight;
public override void OnInitializeMelon()
{
m_categoryDesktopVRIK = MelonPreferences.CreateCategory(SettingsCategory);
- m_entryEnabled = m_categoryDesktopVRIK.CreateEntry("Enabled", true, description: "Attempt to give Desktop VRIK on avatar load.");
- m_entryEmulateHipMovement = m_categoryDesktopVRIK.CreateEntry("Emulate Hip Movement", true, description: "Emulates VRChat-like hip movement when moving head up/down on desktop.");
- m_entryEmulateVRChatHipMovementWeight = m_categoryDesktopVRIK.CreateEntry("Hip Movement Weight", 0.5f, description: "The weight modifier for the hip movement.");
+ m_entryEnabled = m_categoryDesktopVRIK.CreateEntry("Enabled", true, description: "Toggle DesktopVRIK entirely. Requires avatar reload.");
+ m_entryEmulateVRChatHipMovementWeight = m_categoryDesktopVRIK.CreateEntry("Body Movement Weight", 0.5f, description: "Emulates VRChat-like body movement when looking up/down. Set to 0 to disable.");
m_entryEnforceViewPosition = m_categoryDesktopVRIK.CreateEntry("Enforce View Position", false, description: "Corrects view position to use VRIK offsets.");
m_entryEmoteVRIK = m_categoryDesktopVRIK.CreateEntry("Disable Emote VRIK", true, description: "Disable VRIK while emoting. Only disable if you are ok with looking dumb.");
m_entryEmoteLookAtIK = m_categoryDesktopVRIK.CreateEntry("Disable Emote LookAtIK", true, description: "Disable LookAtIK while emoting. This setting doesn't really matter, as LookAtIK isn't networked while doing an emote.");
- m_entryPlantFeet = m_categoryDesktopVRIK.CreateEntry("Plant Feet", true, description: "Enables Plant Feet for VRIK while in Desktop. Keeps avatar on ground when entering Idle instead of hovering.");
foreach (var setting in m_categoryDesktopVRIK.Entries)
{
setting.OnEntryValueChangedUntyped.Subscribe(OnUpdateSettings);
}
+ //BTKUILib Misc Support
+ if (MelonMod.RegisteredMelons.Any(it => it.Info.Name == "BTKUILib"))
+ {
+ MelonLogger.Msg("Initializing BTKUILib support.");
+ BTKUI_Integration.BTKUI_Integration.Init();
+ }
+
+ //Apply patches (i stole)
+ ApplyPatches(typeof(HarmonyPatches.PlayerSetupPatches));
+ ApplyPatches(typeof(HarmonyPatches.IKSystemPatches));
+
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
}
@@ -47,14 +54,25 @@ public class DesktopVRIKMod : MelonMod
private void UpdateAllSettings()
{
if (!DesktopVRIK.Instance) return;
- DesktopVRIK.Instance.Setting_Enabled = m_entryEnabled.Value;
- DesktopVRIK.Instance.Setting_EmulateVRChatHipMovement = m_entryEmulateHipMovement.Value;
- DesktopVRIK.Instance.Setting_EmulateVRChatHipMovementWeight = Mathf.Clamp01(m_entryEmulateVRChatHipMovementWeight.Value);
- DesktopVRIK.Instance.Setting_EmoteVRIK = m_entryEmoteVRIK.Value;
- DesktopVRIK.Instance.Setting_EmoteLookAtIK = m_entryEmoteLookAtIK.Value;
- DesktopVRIK.Instance.Setting_PlantFeet = m_entryPlantFeet.Value;
+ DesktopVRIK.Setting_Enabled = m_entryEnabled.Value;
+ DesktopVRIK.Setting_EmulateVRChatHipMovementWeight = Mathf.Clamp01(m_entryEmulateVRChatHipMovementWeight.Value);
+ DesktopVRIK.Setting_EmoteVRIK = m_entryEmoteVRIK.Value;
+ DesktopVRIK.Setting_EmoteLookAtIK = m_entryEmoteLookAtIK.Value;
DesktopVRIK.Instance.ChangeViewpointHandling(m_entryEnforceViewPosition.Value);
}
private void OnUpdateSettings(object arg1, object arg2) => UpdateAllSettings();
+
+ private void ApplyPatches(Type type)
+ {
+ try
+ {
+ HarmonyInstance.PatchAll(type);
+ }
+ catch (Exception e)
+ {
+ LoggerInstance.Msg($"Failed while patching {type.Name}!");
+ LoggerInstance.Error(e);
+ }
+ }
}
\ No newline at end of file
diff --git a/DesktopVRIK/Properties/AssemblyInfo.cs b/DesktopVRIK/Properties/AssemblyInfo.cs
index 47ffe51..fecfa4f 100644
--- a/DesktopVRIK/Properties/AssemblyInfo.cs
+++ b/DesktopVRIK/Properties/AssemblyInfo.cs
@@ -6,13 +6,13 @@ using System.Reflection;
[assembly: AssemblyVersion(AssemblyInfoParams.Version)]
[assembly: AssemblyFileVersion(AssemblyInfoParams.Version)]
[assembly: AssemblyInformationalVersion(AssemblyInfoParams.Version)]
-[assembly: AssemblyTitle(nameof(DesktopVRIK))]
+[assembly: AssemblyTitle(nameof(NAK.Melons.DesktopVRIK))]
[assembly: AssemblyCompany(AssemblyInfoParams.Author)]
-[assembly: AssemblyProduct(nameof(DesktopVRIK))]
+[assembly: AssemblyProduct(nameof(NAK.Melons.DesktopVRIK))]
[assembly: MelonInfo(
- typeof(DesktopVRIK.DesktopVRIKMod),
- nameof(DesktopVRIK),
+ typeof(NAK.Melons.DesktopVRIK.DesktopVRIKMod),
+ nameof(NAK.Melons.DesktopVRIK),
AssemblyInfoParams.Version,
AssemblyInfoParams.Author,
downloadLink: "https://github.com/NotAKidOnSteam/DesktopVRIK"
@@ -21,10 +21,11 @@ using System.Reflection;
[assembly: MelonGame("Alpha Blend Interactive", "ChilloutVR")]
[assembly: MelonPlatform(MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
[assembly: MelonPlatformDomain(MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
+[assembly: MelonOptionalDependencies("BTKUILib")]
namespace DesktopVRIK.Properties;
internal static class AssemblyInfoParams
{
- public const string Version = "1.0.4";
+ public const string Version = "1.0.5";
public const string Author = "NotAKidoS";
}
\ No newline at end of file