diff --git a/CommunityBugFixCollection/PauseAnimatorUpdates.cs b/CommunityBugFixCollection/PauseAnimatorUpdates.cs new file mode 100644 index 0000000..7749df8 --- /dev/null +++ b/CommunityBugFixCollection/PauseAnimatorUpdates.cs @@ -0,0 +1,36 @@ +using FrooxEngine; +using HarmonyLib; +using MonkeyLoader.Resonite; +using System; +using System.Collections.Generic; +using System.Text; + +namespace CommunityBugFixCollection +{ + [HarmonyPatchCategory(nameof(PauseAnimatorUpdates))] + [HarmonyPatch(typeof(Animator), nameof(Animator.OnCommonUpdate))] + internal sealed class PauseAnimatorUpdates : ResoniteMonkey + { + public override bool CanBeDisabled => true; + + private static bool Prefix(Animator __instance) + { + __instance._playback.ClipLength = (__instance.Clip.Asset?.Data?.GlobalDuration).GetValueOrDefault(); + + if (!__instance._fieldMappersValid) + __instance.GenerateFieldMappers(); + + if (__instance.IsPlaying) + { + var position = __instance.Position; + + foreach (var fieldMapper in __instance._fieldMappers) + fieldMapper.Set(position); + } + + return false; + } + + private static bool Prepare() => Enabled; + } +} \ No newline at end of file