This commit is contained in:
JohnCorby 2022-05-27 19:11:04 -07:00
parent 4bc32dd66e
commit c5eef09cac
4 changed files with 28 additions and 36 deletions

View File

@ -1,22 +0,0 @@
using QSB.EchoesOfTheEye.LightSensorSync.WorldObjects;
using QSB.Messaging;
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
internal class LightSensorIlluminatedMessage : QSBWorldObjectMessage<QSBLightSensor, bool>
{
public LightSensorIlluminatedMessage(bool illuminated) : base(illuminated) { }
public override void OnReceiveLocal() => OnReceiveRemote();
public override void OnReceiveRemote()
{
if (Data)
{
WorldObject._illuminatedBy.SafeAdd(From);
}
else
{
WorldObject._illuminatedBy.QuickRemove(From);
}
}
}

View File

@ -0,0 +1,11 @@
using QSB.EchoesOfTheEye.LightSensorSync.WorldObjects;
using QSB.Messaging;
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
internal class SetIlluminatedMessage : QSBWorldObjectMessage<QSBLightSensor, bool>
{
public SetIlluminatedMessage(bool illuminated) : base(illuminated) { }
public override void OnReceiveLocal() => OnReceiveRemote();
public override void OnReceiveRemote() => WorldObject.SetIlluminated(From, Data);
}

View File

@ -48,21 +48,11 @@ internal class LightSensorPatches : QSBPatch
if (!clientIlluminated && qsbLightSensor._clientIlluminated)
{
qsbLightSensor.SendMessage(new LightSensorIlluminatedMessage(true));
qsbLightSensor.SendMessage(new SetIlluminatedMessage(true));
}
else if (clientIlluminated && !qsbLightSensor._clientIlluminated)
{
qsbLightSensor.SendMessage(new LightSensorIlluminatedMessage(false));
}
var illuminated = __instance._illuminated;
if (!illuminated && __instance._illuminated)
{
__instance.OnDetectLight.Invoke();
}
else if (illuminated && !__instance._illuminated)
{
__instance.OnDetectDarkness.Invoke();
qsbLightSensor.SendMessage(new SetIlluminatedMessage(false));
}
return false;

View File

@ -15,7 +15,7 @@ internal class QSBLightSensor : WorldObject<SingleLightSensor>
public Action OnDetectLocalDarkness;
internal bool _clientIlluminated;
internal List<uint> _illuminatedBy;
private readonly List<uint> _illuminatedBy = new();
public override void SendInitialState(uint to) { }
@ -23,5 +23,18 @@ internal class QSBLightSensor : WorldObject<SingleLightSensor>
public override void OnRemoval() => QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave;
private void OnPlayerLeave(PlayerInfo player) =>
_illuminatedBy.QuickRemove(player.PlayerId);
SetIlluminated(player.PlayerId, false);
public void SetIlluminated(uint playerId, bool illuminated)
{
// var illuminated = __instance._illuminated;
// if (!illuminated && __instance._illuminated)
// {
// __instance.OnDetectLight.Invoke();
// }
// else if (illuminated && !__instance._illuminated)
// {
// __instance.OnDetectDarkness.Invoke();
// }
}
}