using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; using HarmonyLib; using NitroxClient.GameLogic; using NitroxModel.Helper; using UnityEngine; namespace NitroxPatcher.Patches.Dynamic; /// /// Replaces local use of by /// public sealed partial class LeakingRadiation_Update_Patch : NitroxPatch, IDynamicPatch { public static readonly MethodInfo TARGET_METHOD = Reflect.Method((LeakingRadiation t) => t.Update()); private static readonly MethodInfo INSERTED_METHOD = Reflect.Method(() => GetDeltaTime()); private static readonly MethodInfo MATCHING_FIELD = Reflect.Property(() => Time.deltaTime).GetGetMethod(); public static IEnumerable Transpiler(IEnumerable instructions) { return new CodeMatcher(instructions).MatchStartForward(new CodeMatch(OpCodes.Call, MATCHING_FIELD)) .SetOperandAndAdvance(INSERTED_METHOD) .InstructionEnumeration(); } /// /// Wrapper for dependency resolving and variable querying /// public static float GetDeltaTime() { return Resolve().DeltaTime; } }