This commit is contained in:
JohnCorby 2022-04-01 21:56:40 -07:00
parent ccef453de9
commit 0e8c0af483
3 changed files with 25 additions and 14 deletions

View File

@ -1,13 +1,11 @@
using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects; using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects;
using QSB.Messaging; using QSB.Messaging;
using QSB.Player;
namespace QSB.EchoesOfTheEye.AlarmTotemSync.Messages; namespace QSB.EchoesOfTheEye.AlarmTotemSync.Messages;
public class SetVisibleMessage : QSBWorldObjectMessage<QSBAlarmTotem, (uint playerId, bool visible)> public class SetVisibleMessage : QSBWorldObjectMessage<QSBAlarmTotem, bool>
{ {
public SetVisibleMessage(bool visible) : base((QSBPlayerManager.LocalPlayerId, visible)) { } public SetVisibleMessage(bool visible) : base(visible) { }
public SetVisibleMessage(uint playerId) : base((playerId, true)) { }
public override void OnReceiveLocal() => OnReceiveRemote(); public override void OnReceiveLocal() => OnReceiveRemote();
public override void OnReceiveRemote() => WorldObject.SetVisible(Data.playerId, Data.visible); public override void OnReceiveRemote() => WorldObject.SetVisible(From, Data);
} }

View File

@ -0,0 +1,16 @@
using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects;
using QSB.Messaging;
using System.Collections.Generic;
namespace QSB.EchoesOfTheEye.AlarmTotemSync.Messages;
public class VisibleForMessage : QSBWorldObjectMessage<QSBAlarmTotem, List<uint>>
{
public VisibleForMessage(List<uint> visibleFor) : base(visibleFor) { }
public override void OnReceiveRemote()
{
WorldObject.VisibleFor.Clear();
WorldObject.VisibleFor.AddRange(Data);
}
}

View File

@ -11,16 +11,13 @@ namespace QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects;
public class QSBAlarmTotem : WorldObject<AlarmTotem> public class QSBAlarmTotem : WorldObject<AlarmTotem>
{ {
private readonly List<uint> _visibleFor = new(); public readonly List<uint> VisibleFor = new();
public override void SendInitialState(uint to) public override void SendInitialState(uint to)
{ {
this.SendMessage(new SetFaceOpenMessage(AttachedObject._isFaceOpen) { To = to }); this.SendMessage(new SetFaceOpenMessage(AttachedObject._isFaceOpen) { To = to });
this.SendMessage(new SetEnabledMessage(AttachedObject.enabled) { To = to }); this.SendMessage(new SetEnabledMessage(AttachedObject.enabled) { To = to });
foreach (var playerId in _visibleFor) this.SendMessage(new VisibleForMessage(VisibleFor) { To = to });
{
this.SendMessage(new SetVisibleMessage(playerId) { To = to });
}
} }
public override async UniTask Init(CancellationToken ct) public override async UniTask Init(CancellationToken ct)
@ -40,19 +37,19 @@ public class QSBAlarmTotem : WorldObject<AlarmTotem>
QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave; QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave;
private void OnPlayerLeave(PlayerInfo player) => private void OnPlayerLeave(PlayerInfo player) =>
_visibleFor.QuickRemove(player.PlayerId); VisibleFor.QuickRemove(player.PlayerId);
public bool IsVisible() => _visibleFor.Count > 0; public bool IsVisible() => VisibleFor.Count > 0;
public void SetVisible(uint playerId, bool visible) public void SetVisible(uint playerId, bool visible)
{ {
if (visible) if (visible)
{ {
_visibleFor.SafeAdd(playerId); VisibleFor.SafeAdd(playerId);
} }
else else
{ {
_visibleFor.QuickRemove(playerId); VisibleFor.QuickRemove(playerId);
} }
} }