mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 09:39: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.EchoesOfTheEye.LightSensorSync.WorldObjects;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
|
using QSB.Patches;
|
||||||
|
|
||||||
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
|
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
|
||||||
|
|
||||||
internal class SetEnabledMessage : QSBWorldObjectMessage<QSBLightSensor, bool>
|
internal class SetEnabledMessage : QSBWorldObjectMessage<QSBLightSensor, bool>
|
||||||
{
|
{
|
||||||
public SetEnabledMessage(bool data) : base(data) { }
|
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))]
|
[HarmonyPatch(nameof(SingleLightSensor.OnSectorOccupantsUpdated))]
|
||||||
private static bool OnSectorOccupantsUpdated(SingleLightSensor __instance)
|
private static bool OnSectorOccupantsUpdated(SingleLightSensor __instance)
|
||||||
{
|
{
|
||||||
if (!QSBWorldSync.AllObjectsReady)
|
var enable = !Remote
|
||||||
{
|
? __instance._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe)
|
||||||
return true;
|
: (bool)RemoteData;
|
||||||
}
|
if (enable && !__instance.enabled)
|
||||||
|
|
||||||
var flag = __instance._sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe);
|
|
||||||
if (flag && !__instance.enabled)
|
|
||||||
{
|
{
|
||||||
__instance.enabled = true;
|
__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;
|
__instance._lightDetector.GetShape().enabled = true;
|
||||||
if (__instance._preserveStateWhileDisabled)
|
if (__instance._preserveStateWhileDisabled)
|
||||||
{
|
{
|
||||||
__instance._fixedUpdateFrameDelayCount = 10;
|
__instance._fixedUpdateFrameDelayCount = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!flag && __instance.enabled)
|
else if (!enable && __instance.enabled)
|
||||||
{
|
{
|
||||||
__instance.enabled = false;
|
__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;
|
__instance._lightDetector.GetShape().enabled = false;
|
||||||
if (!__instance._preserveStateWhileDisabled)
|
if (!__instance._preserveStateWhileDisabled)
|
||||||
{
|
{
|
||||||
|
@ -14,37 +14,4 @@ internal class QSBLightSensor : WorldObject<SingleLightSensor>
|
|||||||
|
|
||||||
public override void SendInitialState(uint to) =>
|
public override void SendInitialState(uint to) =>
|
||||||
this.SendMessage(new SetEnabledMessage(AttachedObject.enabled));
|
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