using System; using System.Diagnostics.CodeAnalysis; using Assets.Scripts; using Assets.Scripts.Objects.Electrical; using HarmonyLib; using JetBrains.Annotations; namespace RemoteControl.Patches { [HarmonyPatch(typeof(LogicStack), nameof(LogicStack.LogicStackTick))] [SuppressMessage("ReSharper", "InconsistentNaming")] // ReSharper disable once InconsistentNaming public class LogicStack_LogicStackTick { private struct State { internal object LockObj; internal bool Taken; } [UsedImplicitly] private static void Prefix(out State __state) { __state = new State { LockObj = SubscriptionManager.Lock, Taken = false }; if (!GameManager.RunSimulation) return; // System.Threading.Monitor.Enter(__state.LockObj, ref __state.Taken); try { RemoteControl.Log("logic stack tick: start prefix"); SubscriptionManager.ApplyUpdates(); RemoteControl.Log("logic stack tick: end prefix"); } catch (Exception e) { RemoteControl.Log($"prefix: Exception {e}:\n {e.StackTrace}"); } } [UsedImplicitly] private static void Postfix(State __state) { try { if (!GameManager.RunSimulation) return; SubscriptionManager.RescanNetworks(); } catch (Exception e) { RemoteControl.Log("logic stack tick: start postfix"); RemoteControl.Log($"postfix: Exception {e}: \n{e.StackTrace}"); RemoteControl.Log("logic stack tick: end postfix"); } finally { // if (__state.Taken) // { // System.Threading.Monitor.Exit(__state.LockObj); // } } } } }