From caf952a3c2b871b51e5250b7dfd833271abcf876 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 29 Mar 2022 13:46:44 -0700 Subject: [PATCH] QSBLightSensor: use remote call --- .../Messages/SetEnabledMessage.cs | 4 ++- .../Patches/LightSensorPatches.cs | 25 ++++++++------ .../WorldObjects/QSBLightSensor.cs | 33 ------------------- 3 files changed, 18 insertions(+), 44 deletions(-) diff --git a/QSB/EchoesOfTheEye/LightSensorSync/Messages/SetEnabledMessage.cs b/QSB/EchoesOfTheEye/LightSensorSync/Messages/SetEnabledMessage.cs index df03e1ca..ea345a9d 100644 --- a/QSB/EchoesOfTheEye/LightSensorSync/Messages/SetEnabledMessage.cs +++ b/QSB/EchoesOfTheEye/LightSensorSync/Messages/SetEnabledMessage.cs @@ -1,10 +1,12 @@ using QSB.EchoesOfTheEye.LightSensorSync.WorldObjects; using QSB.Messaging; +using QSB.Patches; namespace QSB.EchoesOfTheEye.LightSensorSync.Messages; internal class SetEnabledMessage : QSBWorldObjectMessage { public SetEnabledMessage(bool data) : base(data) { } - public override void OnReceiveRemote() => WorldObject.SetEnabled(Data); + public override void OnReceiveRemote() => + QSBPatch.RemoteCall(WorldObject.AttachedObject.OnSectorOccupantsUpdated, Data); } diff --git a/QSB/EchoesOfTheEye/LightSensorSync/Patches/LightSensorPatches.cs b/QSB/EchoesOfTheEye/LightSensorSync/Patches/LightSensorPatches.cs index 079932a3..a45241ae 100644 --- a/QSB/EchoesOfTheEye/LightSensorSync/Patches/LightSensorPatches.cs +++ b/QSB/EchoesOfTheEye/LightSensorSync/Patches/LightSensorPatches.cs @@ -19,26 +19,31 @@ internal class LightSensorPatches : QSBPatch [HarmonyPatch(nameof(SingleLightSensor.OnSectorOccupantsUpdated))] private static bool OnSectorOccupantsUpdated(SingleLightSensor __instance) { - if (!QSBWorldSync.AllObjectsReady) - { - return true; - } - - var flag = __instance._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe); - if (flag && !__instance.enabled) + var enable = !Remote + ? __instance._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe) + : (bool)RemoteData; + if (enable && !__instance.enabled) { __instance.enabled = true; - __instance.GetWorldObject().SendMessage(new SetEnabledMessage(true)); + if (!Remote && QSBWorldSync.AllObjectsReady) + { + __instance.GetWorldObject().SendMessage(new SetEnabledMessage(true)); + } + __instance._lightDetector.GetShape().enabled = true; if (__instance._preserveStateWhileDisabled) { __instance._fixedUpdateFrameDelayCount = 10; } } - else if (!flag && __instance.enabled) + else if (!enable && __instance.enabled) { __instance.enabled = false; - __instance.GetWorldObject().SendMessage(new SetEnabledMessage(false)); + if (!Remote && QSBWorldSync.AllObjectsReady) + { + __instance.GetWorldObject().SendMessage(new SetEnabledMessage(false)); + } + __instance._lightDetector.GetShape().enabled = false; if (!__instance._preserveStateWhileDisabled) { diff --git a/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs b/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs index 612b7725..33d4a1b7 100644 --- a/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs +++ b/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs @@ -14,37 +14,4 @@ internal class QSBLightSensor : WorldObject public override void SendInitialState(uint to) => this.SendMessage(new SetEnabledMessage(AttachedObject.enabled)); - - public void SetEnabled(bool enabled) - { - if (AttachedObject._sector && AttachedObject._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe)) - { - // local player is in sector, do not disable lights - return; - } - - if (enabled && !AttachedObject.enabled) - { - AttachedObject.enabled = true; - AttachedObject._lightDetector.GetShape().enabled = true; - if (AttachedObject._preserveStateWhileDisabled) - { - AttachedObject._fixedUpdateFrameDelayCount = 10; - } - } - else if (!enabled && AttachedObject.enabled) - { - AttachedObject.enabled = false; - AttachedObject._lightDetector.GetShape().enabled = false; - if (!AttachedObject._preserveStateWhileDisabled) - { - if (AttachedObject._illuminated) - { - AttachedObject.OnDetectDarkness.Invoke(); - } - - AttachedObject._illuminated = false; - } - } - } }