From d22bc80b4d0840a9bf55a0e4726b62db585848a4 Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Mon, 24 Jun 2024 03:34:19 -0500 Subject: [PATCH] [RelativeSync] Changes --- RelativeSync/Properties/AssemblyInfo.cs | 6 +++--- .../Components/RelativeSyncController.cs | 11 +++++++---- .../Components/RelativeSyncMarker.cs | 14 ++++++++++++-- .../RelativeSync/RelativeSyncManager.cs | 19 +++++++++++++------ RelativeSync/format.json | 8 ++++---- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/RelativeSync/Properties/AssemblyInfo.cs b/RelativeSync/Properties/AssemblyInfo.cs index 05260f5..4e6f16b 100644 --- a/RelativeSync/Properties/AssemblyInfo.cs +++ b/RelativeSync/Properties/AssemblyInfo.cs @@ -20,13 +20,13 @@ using System.Reflection; [assembly: MelonGame("Alpha Blend Interactive", "ChilloutVR")] [assembly: MelonPlatform(MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonPlatformDomain(MelonPlatformDomainAttribute.CompatibleDomains.MONO)] -[assembly: MelonColor(255, 125, 126, 129)] -[assembly: MelonAuthorColor(255, 158, 21, 32)] +[assembly: MelonColor(255, 246, 25, 99)] // red-pink +[assembly: MelonAuthorColor(255, 158, 21, 32)] // red [assembly: HarmonyDontPatchAll] namespace NAK.RelativeSync.Properties; internal static class AssemblyInfoParams { - public const string Version = "1.0.3"; + public const string Version = "1.0.4"; public const string Author = "NotAKidoS"; } \ No newline at end of file diff --git a/RelativeSync/RelativeSync/Components/RelativeSyncController.cs b/RelativeSync/RelativeSync/Components/RelativeSyncController.cs index 8f62322..2e11301 100644 --- a/RelativeSync/RelativeSync/Components/RelativeSyncController.cs +++ b/RelativeSync/RelativeSync/Components/RelativeSyncController.cs @@ -3,7 +3,7 @@ using UnityEngine; namespace NAK.RelativeSync.Components; -[DefaultExecutionOrder(int.MaxValue)] // make sure this runs after NetIKController +[DefaultExecutionOrder(9000)] // make sure this runs after NetIKController, but before Totally Wholesome LineController (9999) public class RelativeSyncController : MonoBehaviour { private const float MaxMagnitude = 750000000000f; @@ -35,12 +35,15 @@ public class RelativeSyncController : MonoBehaviour private void LateUpdate() { - if (puppetMaster._isHidden) - return; + // if (puppetMaster._isHidden) + // return; if (_relativeSyncMarker == null) return; + if (!_relativeSyncMarker.IsComponentActive) + return; + Animator animator = puppetMaster._animator; if (animator == null) return; @@ -66,7 +69,7 @@ public class RelativeSyncController : MonoBehaviour // TODO: handle the case where hip is not synced but is found on remote client float lerp = Mathf.Min((Time.time - _lastUpdate) / _updateInterval, 1f); - + ApplyRelativeRotation(avatarTransform, hipTrans, lerp); ApplyRelativePosition(hipTrans, lerp); diff --git a/RelativeSync/RelativeSync/Components/RelativeSyncMarker.cs b/RelativeSync/RelativeSync/Components/RelativeSyncMarker.cs index d4b4300..0669d81 100644 --- a/RelativeSync/RelativeSync/Components/RelativeSyncMarker.cs +++ b/RelativeSync/RelativeSync/Components/RelativeSyncMarker.cs @@ -1,4 +1,5 @@ -using ABI_RC.Core.Player; +using ABI_RC.Core.InteractionSystem; +using ABI_RC.Core.Player; using ABI_RC.Core.Savior; using ABI.CCK.Components; using UnityEngine; @@ -9,10 +10,15 @@ public class RelativeSyncMarker : MonoBehaviour { public int pathHash { get; private set; } + public bool IsComponentActive + => _component.isActiveAndEnabled; + public bool ApplyRelativePosition = true; public bool ApplyRelativeRotation = true; public bool OnlyApplyRelativeHeading; + private MonoBehaviour _component; + private void Start() { string path = GetGameObjectPath(transform); @@ -42,8 +48,12 @@ public class RelativeSyncMarker : MonoBehaviour private void ConfigureForPotentialMovementParent() { - if (!gameObject.TryGetComponent(out CVRMovementParent movementParent)) + if (!gameObject.TryGetComponent(out CVRMovementParent movementParent)) + { + _component = GetComponent(); // users cant animate enabled state so i dont think matters return; + } + _component = movementParent; // TODO: a refactor may be needed to handle the orientation mode being animated diff --git a/RelativeSync/RelativeSync/RelativeSyncManager.cs b/RelativeSync/RelativeSync/RelativeSyncManager.cs index 940dd1a..9a532f4 100644 --- a/RelativeSync/RelativeSync/RelativeSyncManager.cs +++ b/RelativeSync/RelativeSync/RelativeSyncManager.cs @@ -15,15 +15,22 @@ public static class RelativeSyncManager public static void ApplyRelativeSync(string userId, int target, Vector3 position, Vector3 rotation) { if (!RelativeSyncControllers.TryGetValue(userId, out RelativeSyncController controller)) - if (CVRPlayerManager.Instance.GetPlayerPuppetMaster(userId, out PuppetMaster pm)) - controller = pm.AddComponentIfMissing(); - - if (controller == null) { - RelativeSyncMod.Logger.Error($"Failed to apply relative sync for user {userId}"); - return; + if (CVRPlayerManager.Instance.GetPlayerPuppetMaster(userId, out PuppetMaster pm)) + { + controller = pm.AddComponentIfMissing(); + RelativeSyncMod.Logger.Msg($"Found PuppetMaster for user {userId}. This user is now eligible for relative sync."); + } + else + { + RelativeSyncControllers.Add(userId, null); // add null controller to prevent future lookups + RelativeSyncMod.Logger.Warning($"Failed to find PuppetMaster for user {userId}. This is likely because the user is blocked or has blocked you. This user will not be eligible for relative sync until next game restart."); + } } + if (controller == null) + return; + // find target transform RelativeSyncMarker syncMarker = null; if (target != NoTarget) RelativeSyncTransforms.TryGetValue(target, out syncMarker); diff --git a/RelativeSync/format.json b/RelativeSync/format.json index 93c0bb2..2aa8797 100644 --- a/RelativeSync/format.json +++ b/RelativeSync/format.json @@ -1,7 +1,7 @@ { "_id": 211, "name": "RelativeSync", - "modversion": "1.0.3", + "modversion": "1.0.4", "gameversion": "2024r175", "loaderversion": "0.6.1", "modtype": "Mod", @@ -16,8 +16,8 @@ "requirements": [ "None" ], - "downloadlink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/releases/download/r29/RelativeSync.dll", + "downloadlink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/releases/download/r34/RelativeSync.dll", "sourcelink": "https://github.com/NotAKidOnSteam/NAK_CVR_Mods/tree/main/RelativeSync/", - "changelog": "- Enabled the Experimental settings to fix **local** jitter on Movement Parents by default\n- Adjusted BBCC No Interpolation fix to account for potential native fix (now respects initial value)", - "embedcolor": "#507e64" + "changelog": "- Fixed log spam when receiving relative sync data from a blocked user (thanks Mod Network for still forwarding that data -_-).\n- Adjusted execution order to apply relative sync before Totally Wholesomes LineController.\n- Adjusted Relative Sync to still apply to avatar distance-hidden users.\n- Adjusted Relative Sync to not apply if the CVRSeat or Movement Parent is disabled on receiving client.", + "embedcolor": "#f61963" } \ No newline at end of file