From f364d6d2aa4ee45d6d23e41d272b0de059a028e6 Mon Sep 17 00:00:00 2001 From: SDraw Date: Thu, 15 Sep 2022 21:16:01 +0000 Subject: [PATCH] Better ones --- ml_amt/.github/img_02.png | Bin 28050 -> 0 bytes ml_amt/.github/img_03.png | Bin 47537 -> 0 bytes ml_amt/.github/img_04.png | Bin 7762 -> 0 bytes ml_amt/.github/img_05.png | Bin 8121 -> 0 bytes ml_amt/.github/img_06.png | Bin 7765 -> 0 bytes ml_amt/.github/img_07.png | Bin 8033 -> 0 bytes ml_amt/.github/img_08.png | Bin 2322 -> 0 bytes ml_amt/Main.cs | 40 ++++++-- ml_amt/MotionTweaker.cs | 134 ++++++++++++++++++-------- ml_amt/Properties/AssemblyInfo.cs | 6 +- ml_amt/README.md | 39 +++----- ml_amt/Settings.cs | 108 +++++++++++++++------ ml_amt/resources/menu.js | 31 +++++- ml_fpt/Main.cs | 154 ++++++++++++++++-------------- ml_fpt/Properties/AssemblyInfo.cs | 6 +- 15 files changed, 332 insertions(+), 186 deletions(-) delete mode 100644 ml_amt/.github/img_02.png delete mode 100644 ml_amt/.github/img_03.png delete mode 100644 ml_amt/.github/img_04.png delete mode 100644 ml_amt/.github/img_05.png delete mode 100644 ml_amt/.github/img_06.png delete mode 100644 ml_amt/.github/img_07.png delete mode 100644 ml_amt/.github/img_08.png diff --git a/ml_amt/.github/img_02.png b/ml_amt/.github/img_02.png deleted file mode 100644 index d5e1486927624d62e7327977e6d48bd76cc832a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28050 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
qc=NGKBGWeZQY(<;B&qZnK0vnacJ_q&V@ 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 diff --git a/ml_amt/.github/img_03.png b/ml_amt/.github/img_03.png deleted file mode 100644 index 898b2ea4aa72362e4a9fea43499dc77acb372602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47537 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 z 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ʖ@zduKcZ}7Ic;3=a*w|3fGKhVq_!&q%)Y&;s>jv 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 diff --git a/ml_amt/.github/img_04.png b/ml_amt/.github/img_04.png deleted file mode 100644 index aca0733dd5248d8b2f165b39020ac9fcb21d6cc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7762 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 JE>lE={|`XW4=n%y diff --git a/ml_amt/.github/img_05.png b/ml_amt/.github/img_05.png deleted file mode 100644 index e359c5f0cc2e066ce62f4d975b908b246a43f403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8121 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 diff --git a/ml_amt/Main.cs b/ml_amt/Main.cs index 011a084..a95dc0e 100644 --- a/ml_amt/Main.cs +++ b/ml_amt/Main.cs @@ -13,10 +13,13 @@ namespace ml_amt ms_instance = this; Settings.Init(); - Settings.IKOverrideChange += this.OnIKOverrideChange; + Settings.IKOverrideCrouchChange += this.OnIKOverrideCrouchChange; Settings.CrouchLimitChange += this.OnCrouchLimitChange; - Settings.DetectPoseChange += this.OnDetectPoseChange; + Settings.IKOverrideProneChange += this.OnIKOverrideProneChange; Settings.ProneLimitChange += this.OnProneLimitChange; + Settings.PoseTransitionsChange += this.OnPoseTransitonsChange; + Settings.AdjustedMovementChange += this.OnAdjustedMovementChange; + Settings.IKOverrideFlyChange += this.OnIKOverrideFlyChange; HarmonyInstance.Patch( typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)), @@ -38,33 +41,50 @@ namespace ml_amt yield return null; m_localTweaker = PlayerSetup.Instance.gameObject.AddComponent(); - m_localTweaker.SetIKOverride(Settings.IKOverride); + m_localTweaker.SetIKOverrideCrouch(Settings.IKOverrideCrouch); m_localTweaker.SetCrouchLimit(Settings.CrouchLimit); - m_localTweaker.SetDetectPose(Settings.DetectPose); + m_localTweaker.SetIKOverrideCrouch(Settings.IKOverrideProne); m_localTweaker.SetProneLimit(Settings.ProneLimit); + m_localTweaker.SetPoseTransitions(Settings.PoseTransitions); + m_localTweaker.SetAdjustedMovement(Settings.AdjustedMovement); + m_localTweaker.SetIKOverrideFly(Settings.IKOverrideFly); } - - - void OnIKOverrideChange(bool p_state) + + void OnIKOverrideCrouchChange(bool p_state) { if(m_localTweaker != null) - m_localTweaker.SetIKOverride(p_state); + m_localTweaker.SetIKOverrideCrouch(p_state); } void OnCrouchLimitChange(float p_value) { if(m_localTweaker != null) m_localTweaker.SetCrouchLimit(p_value); } - void OnDetectPoseChange(bool p_state) + void OnIKOverrideProneChange(bool p_state) { if(m_localTweaker != null) - m_localTweaker.SetDetectPose(p_state); + m_localTweaker.SetIKOverrideProne(p_state); } void OnProneLimitChange(float p_value) { if(m_localTweaker != null) m_localTweaker.SetProneLimit(p_value); } + void OnPoseTransitonsChange(bool p_state) + { + if(m_localTweaker != null) + m_localTweaker.SetPoseTransitions(p_state); + } + void OnAdjustedMovementChange(bool p_state) + { + if(m_localTweaker != null) + m_localTweaker.SetAdjustedMovement(p_state); + } + void OnIKOverrideFlyChange(bool p_state) + { + if(m_localTweaker != null) + m_localTweaker.SetIKOverrideFly(p_state); + } static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear(); void OnAvatarClear() diff --git a/ml_amt/MotionTweaker.cs b/ml_amt/MotionTweaker.cs index dee04d2..2c48ae2 100644 --- a/ml_amt/MotionTweaker.cs +++ b/ml_amt/MotionTweaker.cs @@ -1,4 +1,5 @@ using ABI_RC.Core.Player; +using ABI_RC.Systems.MovementSystem; using RootMotion.FinalIK; using System.Collections.Generic; using UnityEngine; @@ -8,11 +9,14 @@ namespace ml_amt class MotionTweaker : MonoBehaviour { static System.Reflection.FieldInfo ms_rootVelocity = typeof(IKSolverVR).GetField("rootVelocity", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + static System.Reflection.FieldInfo ms_groundedRaw = typeof(MovementSystem).GetField("_isGroundedRaw", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); enum ParameterType { - Upright + Upright, + GroundedRaw } + enum ParameterSyncType { Local, @@ -41,18 +45,21 @@ namespace ml_amt bool m_avatarReady = false; bool m_compatibleAvatar = false; - - bool m_ikOverride = true; - float m_currentUpright = 1f; + float m_upright = 1f; PoseState m_poseState = PoseState.Standing; + bool m_ikOverrideCrouch = true; float m_crouchLimit = 0.65f; bool m_customCrouchLimit = false; - bool m_detectPose = true; + bool m_ikOverrideProne = true; float m_proneLimit = 0.3f; bool m_customProneLimit = false; + bool m_poseTransitions = true; + bool m_adjustedMovement = true; + bool m_ikOverrideFly = true; + bool m_customLocomotionOffset = false; Vector3 m_locomotionOffset = Vector3.zero; @@ -71,36 +78,51 @@ namespace ml_amt Matrix4x4 l_hmdMatrix = PlayerSetup.Instance.transform.GetMatrix().inverse * (PlayerSetup.Instance._inVr ? PlayerSetup.Instance.vrHeadTracker.transform.GetMatrix() : PlayerSetup.Instance.desktopCameraRig.transform.GetMatrix()); float l_currentHeight = Mathf.Clamp((l_hmdMatrix * ms_pointVector).y, 0f, float.MaxValue); float l_avatarViewHeight = Mathf.Clamp(PlayerSetup.Instance.GetViewPointHeight() * PlayerSetup.Instance._avatar.transform.localScale.y, 0f, float.MaxValue); - m_currentUpright = Mathf.Clamp((((l_currentHeight > 0f) && (l_avatarViewHeight > 0f)) ? (l_currentHeight / l_avatarViewHeight) : 0f), 0f, 1f); - PoseState l_poseState = (m_currentUpright <= m_proneLimit) ? PoseState.Proning : ((m_currentUpright <= m_crouchLimit) ? PoseState.Crouching : PoseState.Standing); + m_upright = Mathf.Clamp((((l_currentHeight > 0f) && (l_avatarViewHeight > 0f)) ? (l_currentHeight / l_avatarViewHeight) : 0f), 0f, 1f); + PoseState l_poseState = (m_upright <= m_proneLimit) ? PoseState.Proning : ((m_upright <= m_crouchLimit) ? PoseState.Crouching : PoseState.Standing); if((m_vrIk != null) && m_vrIk.enabled) { - if(m_ikOverride && (m_poseState != l_poseState) && (l_poseState == PoseState.Standing)) - ms_rootVelocity.SetValue(m_vrIk.solver, Vector3.zero); + if(m_poseState != l_poseState) + { + // Weird fix of torso shaking + if(m_ikOverrideCrouch && (l_poseState == PoseState.Standing)) + ms_rootVelocity.SetValue(m_vrIk.solver, Vector3.zero); + if(m_ikOverrideProne && !m_ikOverrideCrouch && (l_poseState == PoseState.Crouching)) + ms_rootVelocity.SetValue(m_vrIk.solver, Vector3.zero); + } - if(m_detectPose && !m_compatibleAvatar && !PlayerSetup.Instance.fullBodyActive) + if(m_poseTransitions && !m_compatibleAvatar && !PlayerSetup.Instance.fullBodyActive) { switch(l_poseState) { case PoseState.Standing: { - PlayerSetup.Instance._movementSystem.ChangeCrouch(false); - PlayerSetup.Instance._movementSystem.ChangeProne(false); - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", false); // Forced to stop transitioning to standing locomotion - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", false); // Forced to stop transitioning to standing locomotion + if(m_adjustedMovement) + { + MovementSystem.Instance.ChangeCrouch(false); // + MovementSystem.Instance.ChangeProne(false); // Affects movement speed + } + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", false); // + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", false); // Force to stop transitioning to standing locomotion while moving } break; case PoseState.Crouching: - PlayerSetup.Instance._movementSystem.ChangeCrouch(true); + { + if(m_adjustedMovement) + MovementSystem.Instance.ChangeCrouch(true); + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", true); PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", false); - break; + } + break; case PoseState.Proning: { - PlayerSetup.Instance._movementSystem.ChangeProne(true); + if(m_adjustedMovement) + MovementSystem.Instance.ChangeProne(true); + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", false); PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", true); } @@ -122,10 +144,24 @@ namespace ml_amt switch(l_param.m_sync) { case ParameterSyncType.Local: - PlayerSetup.Instance._animator.SetFloat(l_param.m_hash, m_currentUpright); + PlayerSetup.Instance._animator.SetFloat(l_param.m_hash, m_upright); break; case ParameterSyncType.Synced: - PlayerSetup.Instance.changeAnimatorParam(l_param.m_name, m_currentUpright); + PlayerSetup.Instance.changeAnimatorParam(l_param.m_name, m_upright); + break; + } + } + break; + + case ParameterType.GroundedRaw: + { + switch(l_param.m_sync) + { + case ParameterSyncType.Local: + PlayerSetup.Instance._animator.SetBool(l_param.m_hash, (bool)ms_groundedRaw.GetValue(MovementSystem.Instance)); + break; + case ParameterSyncType.Synced: + PlayerSetup.Instance.changeAnimatorParam(l_param.m_name, (bool)ms_groundedRaw.GetValue(MovementSystem.Instance) ? 1f : 0f); break; } } @@ -207,45 +243,65 @@ namespace ml_amt void OnIKPreUpdate() { - if(m_ikOverride) - { - m_locomotionWeight = m_vrIk.solver.locomotion.weight; - if(m_poseState != PoseState.Standing) - m_vrIk.solver.locomotion.weight = 0f; - } + m_locomotionWeight = m_vrIk.solver.locomotion.weight; + + if((m_ikOverrideCrouch && (m_poseState != PoseState.Standing)) || (m_ikOverrideProne && (m_poseState == PoseState.Proning))) + m_vrIk.solver.locomotion.weight = 0f; + if(m_ikOverrideFly && MovementSystem.Instance.flying) + m_vrIk.solver.locomotion.weight = 0f; } void OnIKPostUpdate() { - if(m_ikOverride) - m_vrIk.solver.locomotion.weight = m_locomotionWeight; + m_vrIk.solver.locomotion.weight = m_locomotionWeight; } - public void SetIKOverride(bool p_state) + public void SetIKOverrideCrouch(bool p_state) { - m_ikOverride = p_state; + m_ikOverrideCrouch = p_state; } public void SetCrouchLimit(float p_value) { if(!m_customCrouchLimit) m_crouchLimit = Mathf.Clamp(p_value, 0f, 1f); } - public void SetDetectPose(bool p_state) + public void SetIKOverrideProne(bool p_state) { - m_detectPose = p_state; - - if(!m_detectPose && m_avatarReady && !m_compatibleAvatar && PlayerSetup.Instance._inVr) - { - PlayerSetup.Instance._movementSystem.ChangeCrouch(false); - PlayerSetup.Instance._movementSystem.ChangeProne(false); - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", false); - PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", false); - } + m_ikOverrideProne = p_state; } public void SetProneLimit(float p_value) { if(!m_customProneLimit) m_proneLimit = Mathf.Clamp(p_value, 0f, 1f); } + public void SetPoseTransitions(bool p_state) + { + m_poseTransitions = p_state; + + if(!m_poseTransitions && m_avatarReady && !m_compatibleAvatar && PlayerSetup.Instance._inVr) + { + if(m_adjustedMovement) + { + MovementSystem.Instance.ChangeCrouch(false); + MovementSystem.Instance.ChangeProne(false); + } + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Crouching", false); + PlayerSetup.Instance.animatorManager.SetAnimatorParameterBool("Prone", false); + } + } + public void SetAdjustedMovement(bool p_state) + { + m_adjustedMovement = p_state; + + if(!m_adjustedMovement && m_poseTransitions && m_avatarReady && !m_compatibleAvatar && PlayerSetup.Instance._inVr) + { + MovementSystem.Instance.ChangeCrouch(false); + MovementSystem.Instance.ChangeProne(false); + } + } + public void SetIKOverrideFly(bool p_state) + { + m_ikOverrideFly = p_state; + } } } diff --git a/ml_amt/Properties/AssemblyInfo.cs b/ml_amt/Properties/AssemblyInfo.cs index 13ce87b..eb375a6 100644 --- a/ml_amt/Properties/AssemblyInfo.cs +++ b/ml_amt/Properties/AssemblyInfo.cs @@ -1,10 +1,10 @@ using System.Reflection; [assembly: AssemblyTitle("AvatarMotionTweaker")] -[assembly: AssemblyVersion("1.0.8")] -[assembly: AssemblyFileVersion("1.0.8")] +[assembly: AssemblyVersion("1.0.9")] +[assembly: AssemblyFileVersion("1.0.9")] -[assembly: MelonLoader.MelonInfo(typeof(ml_amt.AvatarMotionTweaker), "AvatarMotionTweaker", "1.0.8", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +[assembly: MelonLoader.MelonInfo(typeof(ml_amt.AvatarMotionTweaker), "AvatarMotionTweaker", "1.0.9", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file diff --git a/ml_amt/README.md b/ml_amt/README.md index f811f6c..90ccbed 100644 --- a/ml_amt/README.md +++ b/ml_amt/README.md @@ -10,40 +10,29 @@ This mod adds features for AAS animator and avatar locomotion behaviour. # Usage Available mod's settings in `Settings - Implementation - Avatar Motion Tweaker`: -* **IK locomotion override:** disables legs locomotion/autostep upon HMD reaching height of `CrouchLimit`; default value - `true`. -* **Crouch limit:** defines first limit; default value - `65`. +* **IK override while crouching:** disables legs locomotion/autostep upon HMD reaching `Crouch limit`; default value - `true`. +* **Crouch limit:** defines crouch limit; default value - `65`. * Note: Can be overrided by avatar. For this avatar has to have child gameobject with name `CrouchLimit`, its Y-axis location will be used as limit, should be in range [0.0, 1.0]. -* **Detect pose (regular avatars):** forces regular avatars' animations to transit to crouching/proning animation states; default value - `true`. - * Note: Avatar is considered as regular if its animator doesn't have `Upright` parameter. -* **Prone limit (regular avatars):** defines second limit; default value - `30`. +* **IK override while crouching:** disables legs locomotion/autostep upon HMD reaching height of `Prone limit`; default value - `true`. +* **Prone limit:** defines second limit; default value - `30`. * Note: Can be overrided by avatar. For this avatar has to have child gameobject with name `ProneLimit`, its Y-axis location will be used as limit, should be in range [0.0, 1.0]. - * Note: Has no effect for mod compatible avatars. +* **IK override while flying:** disables legs locomotion/autostep in fly mode; default value - `true`. +* **Pose transitions:** allows regular avatars animator to transit in crouch/prone states; default value - `true`. + * Note: Avatar is considered as regular if its AAS animator doesn't have `Upright` parameter. +* **Adjusted pose movement speed:** scales movement speed upon crouching/proning; default value - `true`. + * Note: Requires enabled `Pose transitions` option. Available additional parameters for AAS animator: -* **`Upright`:** defines linear coefficient between current viewpoint height and avatar's viewpoint height. Range - [0.0,1.0] (0.0 - floor, 1.0 - full standing). +* **`Upright`:** defines linear coefficient between current viewpoint height and avatar's viewpoint height; float, range - [0.0, 1.0]. * Note: Can be set as local-only (not synced) if starts with `#` character. * Note: Defining this parameter in AAS animator will consider avatar as compatible with mod. +* **`GroundedRaw`:** defines instant grounding state of player instead of delayed default parameter `Grounded`. + * Note: Can be set as local-only (not synced) if starts with `#` character. Additional avatars tweaks: * If avatar has child object with name `LocomotionOffset` its local position will be used for offsetting VRIK locomotion center. - -## Advanced usage in AAS animator for mixed desktop and VR -* To differentiate between desktop and VR players use `CVR Parameter Stream` component on avatar's root gameobject. As example, `InVR` and `InFBT` are boolean typed animator parameters: -![](.github/img_02.png) -* Add additional transitions between standing, crouching and proning blend trees: -![](.github/img_03.png) -* Add conditions for new VR transitions: - * Standing -> Crouching: - ![](.github/img_04.png) - * Crouching -> Standing: - ![](.github/img_05.png) - * Crouching -> Proning: - ![](.github/img_06.png) - * Proning -> Crouching: - ![](.github/img_07.png) -* Add condition check for all desktop transitions: -![](.github/img_08.png) # Notes * Usage of `Upright` parameter for transition between poses (standing/crouching/proning) in desktop mode is useless, because in this case your animations are updating value of `Upright` parameter, not the other way around. -* Please, keep your avatar root object at identity scale. Thank you. \ No newline at end of file +* **Adjusted pose movement speed** option isn't applied to compatible avatars, in progress. +* Please, keep your avatars' root object at identity scale. Thank you. diff --git a/ml_amt/Settings.cs b/ml_amt/Settings.cs index 1790502..b645775 100644 --- a/ml_amt/Settings.cs +++ b/ml_amt/Settings.cs @@ -9,34 +9,46 @@ namespace ml_amt { enum ModSetting { - IKOverride = 0, + IKOverrideCrouch = 0, CrouchLimit, - DetectPose, - ProneLimit + IKOverrideProne, + ProneLimit, + PoseTransitions, + AdjustedMovement, + IKOverrideFly }; - static bool ms_ikOverride = true; + static bool ms_ikOverrideCrouch = true; static float ms_crouchLimit = 0.65f; - static bool ms_detectPose = true; + static bool ms_ikOverrideProne = true; static float ms_proneLimit = 0.3f; + static bool ms_poseTransitions = true; + static bool ms_adjustedMovement = true; + static bool ms_ikOverrideFly = true; static MelonLoader.MelonPreferences_Category ms_category = null; static List ms_entries = null; - static public event Action IKOverrideChange; + static public event Action IKOverrideCrouchChange; static public event Action CrouchLimitChange; - static public event Action DetectPoseChange; + static public event Action IKOverrideProneChange; static public event Action ProneLimitChange; + static public event Action PoseTransitionsChange; + static public event Action AdjustedMovementChange; + static public event Action IKOverrideFlyChange; public static void Init() { ms_category = MelonLoader.MelonPreferences.CreateCategory("AMT"); ms_entries = new List(); - ms_entries.Add(ms_category.CreateEntry(ModSetting.IKOverride.ToString(), true)); + ms_entries.Add(ms_category.CreateEntry(ModSetting.IKOverrideCrouch.ToString(), true)); ms_entries.Add(ms_category.CreateEntry(ModSetting.CrouchLimit.ToString(), 65)); - ms_entries.Add(ms_category.CreateEntry(ModSetting.DetectPose.ToString(), true)); + ms_entries.Add(ms_category.CreateEntry(ModSetting.IKOverrideProne.ToString(), true)); ms_entries.Add(ms_category.CreateEntry(ModSetting.ProneLimit.ToString(), 30)); + ms_entries.Add(ms_category.CreateEntry(ModSetting.PoseTransitions.ToString(), true)); + ms_entries.Add(ms_category.CreateEntry(ModSetting.AdjustedMovement.ToString(), true)); + ms_entries.Add(ms_category.CreateEntry(ModSetting.IKOverrideFly.ToString(), true)); Load(); @@ -67,10 +79,13 @@ namespace ml_amt static void Load() { - ms_ikOverride = (bool)ms_entries[(int)ModSetting.IKOverride].BoxedValue; + ms_ikOverrideCrouch = (bool)ms_entries[(int)ModSetting.IKOverrideCrouch].BoxedValue; ms_crouchLimit = ((int)ms_entries[(int)ModSetting.CrouchLimit].BoxedValue) * 0.01f; - ms_detectPose = (bool)ms_entries[(int)ModSetting.DetectPose].BoxedValue; + ms_ikOverrideProne = (bool)ms_entries[(int)ModSetting.IKOverrideProne].BoxedValue; ms_proneLimit = ((int)ms_entries[(int)ModSetting.ProneLimit].BoxedValue) * 0.01f; + ms_poseTransitions = (bool)ms_entries[(int)ModSetting.PoseTransitions].BoxedValue; + ms_adjustedMovement = (bool)ms_entries[(int)ModSetting.AdjustedMovement].BoxedValue; + ms_ikOverrideFly = (bool)ms_entries[(int)ModSetting.IKOverrideFly].BoxedValue; } static void OnSliderUpdate(string p_name, string p_value) @@ -83,13 +98,15 @@ namespace ml_amt { ms_crouchLimit = int.Parse(p_value) * 0.01f; CrouchLimitChange?.Invoke(ms_crouchLimit); - } break; - + } + break; + case ModSetting.ProneLimit: { ms_proneLimit = int.Parse(p_value) * 0.01f; ProneLimitChange?.Invoke(ms_proneLimit); - } break; + } + break; } ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value); @@ -102,16 +119,38 @@ namespace ml_amt { switch(l_setting) { - case ModSetting.IKOverride: + case ModSetting.IKOverrideCrouch: { - ms_ikOverride = bool.Parse(p_value); - IKOverrideChange?.Invoke(ms_ikOverride); - } break; + ms_ikOverrideCrouch = bool.Parse(p_value); + IKOverrideCrouchChange?.Invoke(ms_ikOverrideCrouch); + } + break; - case ModSetting.DetectPose: + case ModSetting.IKOverrideProne: { - ms_detectPose = bool.Parse(p_value); - DetectPoseChange?.Invoke(ms_detectPose); + ms_ikOverrideProne = bool.Parse(p_value); + IKOverrideProneChange?.Invoke(ms_ikOverrideProne); + } + break; + + case ModSetting.PoseTransitions: + { + ms_poseTransitions = bool.Parse(p_value); + PoseTransitionsChange?.Invoke(ms_poseTransitions); + } + break; + + case ModSetting.AdjustedMovement: + { + ms_adjustedMovement = bool.Parse(p_value); + AdjustedMovementChange?.Invoke(ms_adjustedMovement); + } + break; + + case ModSetting.IKOverrideFly: + { + ms_ikOverrideFly = bool.Parse(p_value); + IKOverrideFlyChange?.Invoke(ms_ikOverrideFly); } break; } @@ -119,24 +158,33 @@ namespace ml_amt } } + public static bool IKOverrideCrouch + { + get => ms_ikOverrideCrouch; + } public static float CrouchLimit { get => ms_crouchLimit; } - - public static bool IKOverride + public static bool IKOverrideProne { - get => ms_ikOverride; + get => ms_ikOverrideProne; } - - public static bool DetectPose - { - get => ms_detectPose; - } - public static float ProneLimit { get => ms_proneLimit; } + public static bool PoseTransitions + { + get => ms_poseTransitions; + } + public static bool AdjustedMovement + { + get => ms_adjustedMovement; + } + public static bool IKOverrideFly + { + get => ms_ikOverrideFly; + } } } diff --git a/ml_amt/resources/menu.js b/ml_amt/resources/menu.js index a541b22..5891d17 100644 --- a/ml_amt/resources/menu.js +++ b/ml_amt/resources/menu.js @@ -181,9 +181,9 @@ function inp_toggle_mod_amt(_obj, _callbackName) {

-
IK locomotion override:
+
IK override while crouching:
-
+
@@ -195,18 +195,39 @@ function inp_toggle_mod_amt(_obj, _callbackName) {
-
Detect pose (regular avatars):
+
IK override while proning:
-
+
-
Prone limit (regular avatars):
+
Prone limit:
+ +
+
IK override while flying:
+
+
+
+
+ +
+
Pose transitions:
+
+
+
+
+ +
+
Adjusted pose movement speed:
+
+
+
+
`; document.getElementById('settings-implementation').appendChild(l_block); diff --git a/ml_fpt/Main.cs b/ml_fpt/Main.cs index b27dbb2..a486260 100644 --- a/ml_fpt/Main.cs +++ b/ml_fpt/Main.cs @@ -9,17 +9,19 @@ namespace ml_fpt public class FourPointTracking : MelonLoader.MelonMod { static FourPointTracking ms_instance = null; + + bool m_ready = false; IndexIK m_indexIk = null; CVR_IK_Calibrator m_ikCalibrator = null; + RootMotion.FinalIK.VRIK m_vrIK = null; + RuntimeAnimatorController m_runtimeAnimator = null; - bool m_inCalibration = false; + bool m_calibrationActive = false; + object m_calibrationTask = null; + int m_hipsTrackerIndex = -1; - - RuntimeAnimatorController m_oldRuntimeAnimator = null; - RootMotion.FinalIK.VRIK m_origVrIk = null; - - bool m_playerReady = false; + Transform m_hips = null; public override void OnApplicationStart() { @@ -35,54 +37,6 @@ namespace ml_fpt MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); } - public override void OnUpdate() - { - if(m_playerReady && m_inCalibration && (m_hipsTrackerIndex != -1)) - { - if(m_origVrIk != null) - m_origVrIk.enabled = false; - m_ikCalibrator.enabled = false; - m_indexIk.enabled = false; - - Transform l_hips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(true, l_hips); - - if((CVRInputManager.Instance.interactLeftValue > 0.9f) && (CVRInputManager.Instance.interactRightValue > 0.9f)) - { - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.position = l_hips.position; - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.rotation = l_hips.rotation; - - if((m_origVrIk != null) && (m_origVrIk.solver?.spine != null)) - { - m_origVrIk.solver.spine.pelvisTarget = PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target; - m_origVrIk.solver.spine.pelvisPositionWeight = 1f; - m_origVrIk.solver.spine.pelvisRotationWeight = 1f; - m_origVrIk.solver.OnPreUpdate -= this.OverrideIKWeight; - m_origVrIk.solver.IKPositionWeight = 1f; - m_origVrIk.enabled = true; - } - - m_indexIk.enabled = true; - m_ikCalibrator.enabled = true; - - PlayerSetup.Instance._animator.runtimeAnimatorController = m_oldRuntimeAnimator; - - m_ikCalibrator.leftHandModel.SetActive(false); - m_ikCalibrator.rightHandModel.SetActive(false); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowTracker(false); - PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(false); - CVR_InteractableManager.enableInteractions = true; - - if(PlayerSetup.Instance._avatar.GetComponent().avatarUsesAdvancedSettings) - PlayerSetup.Instance.LoadCurrentAvatarSettingsDefault(); - - Reset(); - - ShowHudNotification("Calibration completed"); - } - } - } - System.Collections.IEnumerator WaitForMainMenuView() { while(ViewManager.Instance == null) @@ -111,16 +65,16 @@ namespace ml_fpt m_indexIk = PlayerSetup.Instance.gameObject.GetComponent(); m_ikCalibrator = PlayerSetup.Instance.gameObject.GetComponent(); - m_playerReady = true; + m_ready = true; } void StartCalibration() { - if(m_playerReady && !m_inCalibration && PlayerSetup.Instance._inVr && !PlayerSetup.Instance.avatarIsLoading && PlayerSetup.Instance._animator.isHuman && !m_ikCalibrator.inFullbodyCalibration && !m_ikCalibrator.avatarCalibratedAsFullBody) + if(m_ready && !m_calibrationActive && PlayerSetup.Instance._inVr && !PlayerSetup.Instance.avatarIsLoading && PlayerSetup.Instance._animator.isHuman && !m_ikCalibrator.inFullbodyCalibration && !m_ikCalibrator.avatarCalibratedAsFullBody) { for(int i = 0; i < PlayerSetup.Instance._trackerManager.trackerNames.Length; i++) { - if(PlayerSetup.Instance._trackerManager.trackerNames[i] == "vive_tracker_waist") + if((PlayerSetup.Instance._trackerManager.trackerNames[i] == "vive_tracker_waist") && PlayerSetup.Instance._trackerManager.trackers[i].active) { m_hipsTrackerIndex = i; break; @@ -129,19 +83,22 @@ namespace ml_fpt if(m_hipsTrackerIndex != -1) { - m_oldRuntimeAnimator = PlayerSetup.Instance._animator.runtimeAnimatorController; + m_runtimeAnimator = PlayerSetup.Instance._animator.runtimeAnimatorController; PlayerSetup.Instance._animator.runtimeAnimatorController = PlayerSetup.Instance.tPoseAnimatorController; - m_origVrIk = PlayerSetup.Instance._animator.GetComponent(); - if(m_origVrIk != null) - m_origVrIk.solver.OnPreUpdate += this.OverrideIKWeight; + m_hips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); + m_vrIK = PlayerSetup.Instance._animator.GetComponent(); + + if(m_vrIK != null) + m_vrIK.solver.OnPreUpdate += this.OverrideIKWeight; m_ikCalibrator.leftHandModel.SetActive(true); m_ikCalibrator.rightHandModel.SetActive(true); PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowTracker(true); CVR_InteractableManager.enableInteractions = false; - m_inCalibration = true; + m_calibrationActive = true; + m_calibrationTask = MelonLoader.MelonCoroutines.Start(CalibrationTask()); ViewManager.Instance.ForceUiStatus(false); ShowHudNotification("Calibration started"); @@ -152,19 +109,71 @@ namespace ml_fpt else ShowMenuAlert("Calibraton requirements aren't met: be in VR, be not in FBT or avatar calibration, humanoid avatar"); } - - void Reset() + + System.Collections.IEnumerator CalibrationTask() { - m_inCalibration = false; - m_hipsTrackerIndex = -1; - m_oldRuntimeAnimator = null; - m_origVrIk = null; + while(m_calibrationActive) + { + if(m_vrIK != null) + m_vrIK.enabled = false; + + m_ikCalibrator.enabled = false; + m_indexIk.enabled = false; + + PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(true, m_hips); + + if((CVRInputManager.Instance.interactLeftValue > 0.9f) && (CVRInputManager.Instance.interactRightValue > 0.9f)) + { + PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.position = m_hips.position; + PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target.transform.rotation = m_hips.rotation; + + if(m_vrIK != null) + { + m_vrIK.solver.spine.pelvisTarget = PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].target; + m_vrIK.solver.spine.pelvisPositionWeight = 1f; + m_vrIK.solver.spine.pelvisRotationWeight = 1f; + m_vrIK.solver.OnPreUpdate -= this.OverrideIKWeight; + m_vrIK.solver.IKPositionWeight = 1f; + m_vrIK.enabled = true; + } + + m_indexIk.enabled = true; + m_ikCalibrator.enabled = true; + PlayerSetup.Instance._animator.runtimeAnimatorController = m_runtimeAnimator; + + m_ikCalibrator.leftHandModel.SetActive(false); + m_ikCalibrator.rightHandModel.SetActive(false); + PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowTracker(false); + PlayerSetup.Instance._trackerManager.trackers[m_hipsTrackerIndex].ShowLine(false); + CVR_InteractableManager.enableInteractions = true; + + Reset(); + + ShowHudNotification("Calibration completed"); + } + + yield return null; + } + + m_calibrationTask = null; // Idk if it's safe or not } void OverrideIKWeight() { - if(m_inCalibration && (m_origVrIk != null)) - m_origVrIk.solver.IKPositionWeight = 0f; + if(m_calibrationActive) + { + m_vrIK.solver.IKPositionWeight = 0f; + } + } + + void Reset() + { + m_vrIK = null; + m_runtimeAnimator = null; + m_calibrationActive = false; + m_calibrationTask = null; + m_hipsTrackerIndex = -1; + m_hips = null; } static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear(); @@ -172,8 +181,11 @@ namespace ml_fpt { try { - if(m_inCalibration) + if(m_calibrationActive) { + if(m_calibrationTask != null) + MelonLoader.MelonCoroutines.Stop(m_calibrationTask); + m_indexIk.enabled = true; m_ikCalibrator.enabled = true; diff --git a/ml_fpt/Properties/AssemblyInfo.cs b/ml_fpt/Properties/AssemblyInfo.cs index 101a324..6528cc1 100644 --- a/ml_fpt/Properties/AssemblyInfo.cs +++ b/ml_fpt/Properties/AssemblyInfo.cs @@ -1,10 +1,10 @@ using System.Reflection; [assembly: AssemblyTitle("FourPointTracking")] -[assembly: AssemblyVersion("1.0.4")] -[assembly: AssemblyFileVersion("1.0.4")] +[assembly: AssemblyVersion("1.0.5")] +[assembly: AssemblyFileVersion("1.0.5")] -[assembly: MelonLoader.MelonInfo(typeof(ml_fpt.FourPointTracking), "FourPointTracking", "1.0.4", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +[assembly: MelonLoader.MelonInfo(typeof(ml_fpt.FourPointTracking), "FourPointTracking", "1.0.5", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file