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.Messaging;
using QSB.Player;
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(uint playerId) : base((playerId, true)) { }
public SetVisibleMessage(bool visible) : base(visible) { }
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>
{
private readonly List<uint> _visibleFor = new();
public readonly List<uint> VisibleFor = new();
public override void SendInitialState(uint to)
{
this.SendMessage(new SetFaceOpenMessage(AttachedObject._isFaceOpen) { To = to });
this.SendMessage(new SetEnabledMessage(AttachedObject.enabled) { To = to });
foreach (var playerId in _visibleFor)
{
this.SendMessage(new SetVisibleMessage(playerId) { To = to });
}
this.SendMessage(new VisibleForMessage(VisibleFor) { To = to });
}
public override async UniTask Init(CancellationToken ct)
@ -40,19 +37,19 @@ public class QSBAlarmTotem : WorldObject<AlarmTotem>
QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave;
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)
{
if (visible)
{
_visibleFor.SafeAdd(playerId);
VisibleFor.SafeAdd(playerId);
}
else
{
_visibleFor.QuickRemove(playerId);
VisibleFor.QuickRemove(playerId);
}
}