mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-19 12:40:56 +00:00
QSBLightSensor: use remote call
This commit is contained in:
parent
e9251498cc
commit
caf952a3c2
@ -1,10 +1,12 @@
|
||||
using QSB.EchoesOfTheEye.LightSensorSync.WorldObjects;
|
||||
using QSB.Messaging;
|
||||
using QSB.Patches;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
|
||||
|
||||
internal class SetEnabledMessage : QSBWorldObjectMessage<QSBLightSensor, bool>
|
||||
{
|
||||
public SetEnabledMessage(bool data) : base(data) { }
|
||||
public override void OnReceiveRemote() => WorldObject.SetEnabled(Data);
|
||||
public override void OnReceiveRemote() =>
|
||||
QSBPatch.RemoteCall(WorldObject.AttachedObject.OnSectorOccupantsUpdated, Data);
|
||||
}
|
||||
|
@ -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<QSBLightSensor>().SendMessage(new SetEnabledMessage(true));
|
||||
if (!Remote && QSBWorldSync.AllObjectsReady)
|
||||
{
|
||||
__instance.GetWorldObject<QSBLightSensor>().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<QSBLightSensor>().SendMessage(new SetEnabledMessage(false));
|
||||
if (!Remote && QSBWorldSync.AllObjectsReady)
|
||||
{
|
||||
__instance.GetWorldObject<QSBLightSensor>().SendMessage(new SetEnabledMessage(false));
|
||||
}
|
||||
|
||||
__instance._lightDetector.GetShape().enabled = false;
|
||||
if (!__instance._preserveStateWhileDisabled)
|
||||
{
|
||||
|
@ -14,37 +14,4 @@ internal class QSBLightSensor : WorldObject<SingleLightSensor>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user