using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityStandardAssets.Characters.FirstPerson; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("IdleViewBobMod")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("IdleViewBobMod")] [assembly: AssemblyTitle("IdleViewBobMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Granny2IdleViewBob { [BepInPlugin("com.granny2.idleviewbob", "Idle View Bob", "1.0.0")] public class Plugin : BasePlugin { internal static ManualLogSource Log; public override void Load() { Log = ((BasePlugin)this).Log; Harmony.CreateAndPatchAll(typeof(ControllerPatches), (string)null); } } [HarmonyPatch] public class ControllerPatches { private static Animation idleAnimation; private static bool isInitialized = false; private static bool wasMoving = true; private static float idleTimer = 0f; private const float IDLE_DELAY = 0.1f; [HarmonyPatch(typeof(FirstPersonController_Egen), "Start")] [HarmonyPostfix] public static void StartPostfix(FirstPersonController_Egen __instance) { if (!isInitialized && (Object)(object)__instance.headBobAnimHolder != (Object)null) { idleAnimation = __instance.headBobAnimHolder.GetComponent(); if ((Object)(object)idleAnimation != (Object)null && (TrackedReference)(object)idleAnimation["idle"] != (TrackedReference)null) { idleAnimation["idle"].wrapMode = (WrapMode)2; isInitialized = true; } } } [HarmonyPatch(typeof(FirstPersonController_Egen), "Update")] [HarmonyPostfix] public static void UpdatePostfix(FirstPersonController_Egen __instance) { if (!isInitialized || (Object)(object)idleAnimation == (Object)null) { return; } bool num = Input.GetAxis("Horizontal") != 0f || Input.GetAxis("Vertical") != 0f; bool flag = !__instance.playerCrouch && !__instance.playerCaught && !__instance.playerEscape && __instance.PlayerIsGrounded; if (num || !flag) { if (!wasMoving) { idleAnimation.Stop("idle"); wasMoving = true; } idleTimer = 0f; } else { idleTimer += Time.deltaTime; if (idleTimer >= 0.1f && !idleAnimation.IsPlaying("idle")) { idleAnimation.Play("idle"); wasMoving = false; } } } } }