using System; using System.Reflection; using HarmonyLib; using NitroxClient.Communication.Abstract; using NitroxClient.GameLogic.InitialSync; using NitroxModel.Helper; using NitroxModel.Packets; namespace NitroxPatcher.Patches.Dynamic; /// /// Notice the server of a Ping color change /// public sealed class PingInstance_Set_Patches : NitroxPatch, IDynamicPatch { private static readonly MethodInfo TARGET_METHOD_COLOR = Reflect.Method((PingInstance t) => t.SetColor(default)); private static readonly MethodInfo TARGET_METHOD_VISIBLE = Reflect.Method((PingInstance t) => t.SetVisible(default)); public static void PrefixColor(PingInstance __instance, int index) { // Only notice server if there's a change on client-side if (__instance.colorIndex == index) { return; } if (PlayerPreferencesInitialSyncProcessor.TryGetKeyForPingInstance(__instance, out string pingKey, out bool _)) { Resolve().Send(new SignalPingPreferenceChanged(pingKey, __instance.visible, index)); } } public static void PrefixVisible(PingInstance __instance, bool value) { // Only notice server if there's a change on client-side if (__instance.visible == value) { return; } if (PlayerPreferencesInitialSyncProcessor.TryGetKeyForPingInstance(__instance, out string pingKey, out bool _)) { Resolve().Send(new SignalPingPreferenceChanged(pingKey, value, __instance.colorIndex)); } } public override void Patch(Harmony harmony) { PatchPrefix(harmony, TARGET_METHOD_COLOR, ((Action)PrefixColor).Method); PatchPrefix(harmony, TARGET_METHOD_VISIBLE, ((Action)PrefixVisible).Method); } }