From 684b330a4c8b059af8019eeb82834437c3c24ae2 Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:14:08 -0500 Subject: [PATCH] [AlternateIKSystem] Slight cleanup of BodyControls --- AlternateIKSystem/IK/BodyControl.cs | 96 ++++++++++++------- .../IK/IKHandlers/IKHandlerDesktop.cs | 2 +- AlternateIKSystem/IK/IKManager.cs | 32 +------ NAK_CVR_Mods.sln | 6 ++ 4 files changed, 71 insertions(+), 65 deletions(-) diff --git a/AlternateIKSystem/IK/BodyControl.cs b/AlternateIKSystem/IK/BodyControl.cs index 7b4c9f9..df9767f 100644 --- a/AlternateIKSystem/IK/BodyControl.cs +++ b/AlternateIKSystem/IK/BodyControl.cs @@ -1,42 +1,12 @@ -using RootMotion.FinalIK; +using ABI_RC.Core.Player; +using ABI_RC.Systems.MovementSystem; +using RootMotion.FinalIK; +using UnityEngine; namespace NAK.AlternateIKSystem.IK; -public static class BodyControl +public class BodyControl { - #region Tracking Controls - - public static bool TrackingAll = true; - public static bool TrackingHead = true; - public static bool TrackingPelvis = true; - public static bool TrackingLeftArm = true; - public static bool TrackingRightArm = true; - public static bool TrackingLeftLeg = true; - public static bool TrackingRightLeg = true; - - //TODO: dont do this, it is effective but lazy - public static bool TrackingLocomotion - { - get => _trackingLocomotion; - set - { - if (_trackingLocomotion == value) - return; - - _trackingLocomotion = value; - IKManager.solver?.Reset(); - } - } - private static bool _trackingLocomotion = true; - - public static float TrackingPositionWeight = 1f; - - // TODO: decide if these are considered "Tracking Controls" - public static float TrackingUpright = 1f; - public static float TrackingMaxRootAngle = 0f; - - #endregion - #region Player Settings public static bool useHipTracking = true; @@ -53,12 +23,68 @@ public static class BodyControl #endregion + #region Tracking Controls + + public static bool TrackingAll = true; + public static bool TrackingHead = true; + public static bool TrackingPelvis = true; + public static bool TrackingLeftArm = true; + public static bool TrackingRightArm = true; + public static bool TrackingLeftLeg = true; + public static bool TrackingRightLeg = true; + public static bool TrackingLocomotion = true; + public static float TrackingPositionWeight = 1f; + + // TODO: decide if this is considered "Tracking Controls" + public static float TrackingMaxRootAngle = 0f; + + #endregion + + #region Avatar Info + + public static float AvatarUpright = 1f; + + #endregion + #region BodyControl Configuration public static float InvalidTrackerDistance = 1f; #endregion + public void Update() + { + TrackingAll = ShouldTrackAll(); + TrackingLocomotion = ShouldTrackLocomotion(); + AvatarUpright = GetPlayerUpright(); + } + + #region Private Methods + + private static bool ShouldTrackAll() + { + return !PlayerSetup.Instance._emotePlaying; + } + + private static bool ShouldTrackLocomotion() + { + return !(MovementSystem.Instance.movementVector.magnitude > 0f + || MovementSystem.Instance.crouching + || MovementSystem.Instance.prone + || MovementSystem.Instance.flying + || MovementSystem.Instance.sitting + || !MovementSystem.Instance._isGrounded); + } + + private static float GetPlayerUpright() + { + float avatarHeight = PlayerSetup.Instance._avatarHeight; + float currentHeight = PlayerSetup.Instance.GetViewRelativePosition().y; + return Mathf.Clamp01((avatarHeight > 0f) ? (currentHeight / avatarHeight) : 0f); + } + + #endregion + #region Solver Weight Helpers public static void SetHeadWeight(IKSolverVR.Spine spine, LookAtIK lookAtIk, float weight) diff --git a/AlternateIKSystem/IK/IKHandlers/IKHandlerDesktop.cs b/AlternateIKSystem/IK/IKHandlers/IKHandlerDesktop.cs index 729ac4b..96c1e61 100644 --- a/AlternateIKSystem/IK/IKHandlers/IKHandlerDesktop.cs +++ b/AlternateIKSystem/IK/IKHandlers/IKHandlerDesktop.cs @@ -124,7 +124,7 @@ internal class IKHandlerDesktop : IKHandler { // Lerp locomotion weight, lerp to BodyControl.TrackingUpright??? float targetWeight = - (BodyControl.TrackingAll && BodyControl.TrackingLocomotion && BodyControl.TrackingUpright > 0.8f) + (BodyControl.TrackingAll && BodyControl.TrackingLocomotion && BodyControl.AvatarUpright > 0.8f) ? 1f : 0.0f; _locomotionWeight = Mathf.Lerp(_locomotionWeight, targetWeight, Time.deltaTime * 20f); diff --git a/AlternateIKSystem/IK/IKManager.cs b/AlternateIKSystem/IK/IKManager.cs index 6e5cbd4..1956ea9 100644 --- a/AlternateIKSystem/IK/IKManager.cs +++ b/AlternateIKSystem/IK/IKManager.cs @@ -14,6 +14,8 @@ public class IKManager : MonoBehaviour { public static IKManager Instance; + public BodyControl BodyControl = new BodyControl(); + public static VRIK vrik => _vrik; private static VRIK _vrik; public static IKSolverVR solver => _vrik?.solver; @@ -60,9 +62,7 @@ public class IKManager : MonoBehaviour private void Update() { - BodyControl.TrackingAll = ShouldTrackAll(); - BodyControl.TrackingUpright = GetPlayerUpright(); - BodyControl.TrackingLocomotion = ShouldTrackLocomotion(); + BodyControl.Update(); if (!_isAvatarInitialized) return; @@ -171,32 +171,6 @@ public class IKManager : MonoBehaviour #endregion - #region Private Methods - - private bool ShouldTrackAll() - { - return !PlayerSetup.Instance._emotePlaying; - } - - private bool ShouldTrackLocomotion() - { - return !(MovementSystem.Instance.movementVector.magnitude > 0f - || MovementSystem.Instance.crouching - || MovementSystem.Instance.prone - || MovementSystem.Instance.flying - || MovementSystem.Instance.sitting - || !MovementSystem.Instance._isGrounded); - } - - private float GetPlayerUpright() - { - float avatarHeight = PlayerSetup.Instance._avatarHeight; - float currentHeight = PlayerSetup.Instance.GetViewRelativePosition().y; - return Mathf.Clamp01((avatarHeight > 0f) ? (currentHeight / avatarHeight) : 0f); - } - - #endregion - #region IK Initialization private void InitializeDesktopIk() diff --git a/NAK_CVR_Mods.sln b/NAK_CVR_Mods.sln index a26599d..04f941b 100644 --- a/NAK_CVR_Mods.sln +++ b/NAK_CVR_Mods.sln @@ -77,6 +77,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EzCurls", "EzCurls\EzCurls. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AlternateIKSystem", "AlternateIKSystem\AlternateIKSystem.csproj", "{CAB05E13-B529-4CDA-A2B5-B62E122408F8}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NoDepthOnlyFlat", "NoDepthOnlyFlat\NoDepthOnlyFlat.csproj", "{6F2F8774-40CF-4DE1-BC6C-DC00CA76D6A8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -231,6 +233,10 @@ Global {CAB05E13-B529-4CDA-A2B5-B62E122408F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {CAB05E13-B529-4CDA-A2B5-B62E122408F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {CAB05E13-B529-4CDA-A2B5-B62E122408F8}.Release|Any CPU.Build.0 = Release|Any CPU + {6F2F8774-40CF-4DE1-BC6C-DC00CA76D6A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F2F8774-40CF-4DE1-BC6C-DC00CA76D6A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F2F8774-40CF-4DE1-BC6C-DC00CA76D6A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F2F8774-40CF-4DE1-BC6C-DC00CA76D6A8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE