diff --git a/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs b/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs index 10571fbc..30e8ee45 100644 --- a/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs +++ b/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBLightSensor.cs @@ -1,7 +1,10 @@ -using QSB.EchoesOfTheEye.LightSensorSync.Messages; +using Cysharp.Threading.Tasks; +using QSB.EchoesOfTheEye.LightSensorSync.Messages; using QSB.Messaging; +using QSB.Player; using QSB.WorldSync; using System; +using System.Threading; namespace QSB.EchoesOfTheEye.LightSensorSync.WorldObjects; @@ -16,4 +19,16 @@ internal class QSBLightSensor : WorldObject public override void SendInitialState(uint to) => this.SendMessage(new LightSensorAuthorityMessage(AuthorityOwner) { To = to }); + + public override async UniTask Init(CancellationToken ct) => QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; + public override void OnRemoval() => QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave; + + private void OnPlayerLeave(PlayerInfo player) + { + if (AuthorityOwner == player.PlayerId) + { + // player left with authority, give it to us if we can + this.SendMessage(new LightSensorAuthorityMessage(AttachedObject.enabled ? QSBPlayerManager.LocalPlayerId : 0)); + } + } }