Fix popupmessage appearing behind the player when moving (#1401)

This commit is contained in:
DrSmugleaf
2020-07-24 14:26:39 +02:00
committed by GitHub
parent 5e2109a2d6
commit 1eac63e5bb
3 changed files with 106 additions and 31 deletions

View File

@@ -27,6 +27,7 @@ namespace Content.Client
[Dependency] private IInputManager _inputManager; [Dependency] private IInputManager _inputManager;
[Dependency] private IEyeManager _eyeManager; [Dependency] private IEyeManager _eyeManager;
[Dependency] private IClientNetManager _netManager; [Dependency] private IClientNetManager _netManager;
[Dependency] private IEntityManager _entityManager;
#pragma warning restore 649 #pragma warning restore 649
private readonly List<PopupLabel> _aliveLabels = new List<PopupLabel>(); private readonly List<PopupLabel> _aliveLabels = new List<PopupLabel>();
@@ -36,21 +37,41 @@ namespace Content.Client
{ {
DebugTools.Assert(!_initialized); DebugTools.Assert(!_initialized);
_netManager.RegisterNetMessage<MsgDoNotify>(nameof(MsgDoNotify), DoNotifyMessage); _netManager.RegisterNetMessage<MsgDoNotifyCursor>(nameof(MsgDoNotifyCursor), DoNotifyCursor);
_netManager.RegisterNetMessage<MsgDoNotifyCoordinates>(nameof(MsgDoNotifyCoordinates), DoNotifyCoordinates);
_netManager.RegisterNetMessage<MsgDoNotifyEntity>(nameof(MsgDoNotifyEntity), DoNotifyEntity);
_initialized = true; _initialized = true;
} }
private void DoNotifyMessage(MsgDoNotify message) private void DoNotifyCursor(MsgDoNotifyCursor message)
{
if (message.AtCursor)
{ {
PopupMessage(message.Message); PopupMessage(message.Message);
} }
else
private void DoNotifyCoordinates(MsgDoNotifyCoordinates message)
{ {
PopupMessage(_eyeManager.WorldToScreen(message.Coordinates), message.Message); PopupMessage(_eyeManager.WorldToScreen(message.Coordinates), message.Message);
} }
private void DoNotifyEntity(MsgDoNotifyEntity message)
{
if (!_entityManager.TryGetEntity(message.Entity, out var entity))
{
return;
}
PopupMessage(_eyeManager.WorldToScreen(entity.Transform.GridPosition), message.Message);
}
public override void PopupMessage(IEntity source, IEntity viewer, string message)
{
if (viewer != _playerManager.LocalPlayer.ControlledEntity)
{
return;
}
PopupMessage(_eyeManager.WorldToScreen(source.Transform.GridPosition), message);
} }
public override void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message) public override void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message)

View File

@@ -25,10 +25,27 @@ namespace Content.Server
{ {
DebugTools.Assert(!_initialized); DebugTools.Assert(!_initialized);
_netManager.RegisterNetMessage<MsgDoNotify>(nameof(MsgDoNotify)); _netManager.RegisterNetMessage<MsgDoNotifyCursor>(nameof(MsgDoNotifyCursor));
_netManager.RegisterNetMessage<MsgDoNotifyCoordinates>(nameof(MsgDoNotifyCoordinates));
_netManager.RegisterNetMessage<MsgDoNotifyEntity>(nameof(MsgDoNotifyEntity));
_initialized = true; _initialized = true;
} }
public override void PopupMessage(IEntity source, IEntity viewer, string message)
{
if (!viewer.TryGetComponent(out IActorComponent actor))
{
return;
}
var netMessage = _netManager.CreateNetMessage<MsgDoNotifyEntity>();
netMessage.Entity = source.Uid;
netMessage.Message = message;
_netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient);
}
public override void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message) public override void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message)
{ {
if (!viewer.TryGetComponent(out IActorComponent actor)) if (!viewer.TryGetComponent(out IActorComponent actor))
@@ -36,9 +53,10 @@ namespace Content.Server
return; return;
} }
var netMessage = _netManager.CreateNetMessage<MsgDoNotify>(); var netMessage = _netManager.CreateNetMessage<MsgDoNotifyCoordinates>();
netMessage.Coordinates = coordinates; netMessage.Coordinates = coordinates;
netMessage.Message = message; netMessage.Message = message;
_netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient); _netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient);
} }
@@ -49,9 +67,9 @@ namespace Content.Server
return; return;
} }
var netMessage = _netManager.CreateNetMessage<MsgDoNotify>(); var netMessage = _netManager.CreateNetMessage<MsgDoNotifyCursor>();
netMessage.Message = message; netMessage.Message = message;
netMessage.AtCursor = true;
_netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient); _netManager.ServerSendMessage(netMessage, actor.playerSession.ConnectedClient);
} }

View File

@@ -1,5 +1,6 @@
using Content.Shared.Interfaces; using Content.Shared.Interfaces;
using Lidgren.Network; using Lidgren.Network;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Network;
using Robust.Shared.Map; using Robust.Shared.Map;
@@ -9,50 +10,85 @@ namespace Content.Shared
{ {
public abstract class SharedNotifyManager : ISharedNotifyManager public abstract class SharedNotifyManager : ISharedNotifyManager
{ {
public void PopupMessage(IEntity source, IEntity viewer, string message) public abstract void PopupMessage(IEntity source, IEntity viewer, string message);
{
// TODO: we might eventually want for this to pass the actual entity,
// so the notify could track the entity movement visually.
PopupMessage(source.Transform.GridPosition, viewer, message);
}
public abstract void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message); public abstract void PopupMessage(GridCoordinates coordinates, IEntity viewer, string message);
public abstract void PopupMessageCursor(IEntity viewer, string message); public abstract void PopupMessageCursor(IEntity viewer, string message);
protected class MsgDoNotify : NetMessage protected class MsgDoNotifyCursor : NetMessage
{ {
#region REQUIRED #region REQUIRED
public const MsgGroups GROUP = MsgGroups.Command; public const MsgGroups GROUP = MsgGroups.Command;
public const string NAME = nameof(MsgDoNotify); public const string NAME = nameof(MsgDoNotifyCursor);
public MsgDoNotify(INetChannel channel) : base(NAME, GROUP) { } public MsgDoNotifyCursor(INetChannel channel) : base(NAME, GROUP) { }
#endregion #endregion
public string Message { get; set; } public string Message { get; set; }
public bool AtCursor { get; set; }
public GridCoordinates Coordinates { get; set; }
public override void ReadFromBuffer(NetIncomingMessage buffer) public override void ReadFromBuffer(NetIncomingMessage buffer)
{ {
Message = buffer.ReadString(); Message = buffer.ReadString();
AtCursor = buffer.ReadBoolean();
if (!AtCursor)
{
Coordinates = buffer.ReadGridLocalCoordinates();
}
} }
public override void WriteToBuffer(NetOutgoingMessage buffer) public override void WriteToBuffer(NetOutgoingMessage buffer)
{ {
buffer.Write(Message); buffer.Write(Message);
buffer.Write(AtCursor); }
}
if (!AtCursor) protected class MsgDoNotifyCoordinates : NetMessage
{ {
#region REQUIRED
public const MsgGroups GROUP = MsgGroups.Command;
public const string NAME = nameof(MsgDoNotifyCoordinates);
public MsgDoNotifyCoordinates(INetChannel channel) : base(NAME, GROUP) { }
#endregion
public string Message { get; set; }
public GridCoordinates Coordinates;
public override void ReadFromBuffer(NetIncomingMessage buffer)
{
Message = buffer.ReadString();
Coordinates = buffer.ReadGridLocalCoordinates();
}
public override void WriteToBuffer(NetOutgoingMessage buffer)
{
buffer.Write(Message);
buffer.Write(Coordinates); buffer.Write(Coordinates);
} }
} }
protected class MsgDoNotifyEntity : NetMessage
{
#region REQUIRED
public const MsgGroups GROUP = MsgGroups.Command;
public const string NAME = nameof(MsgDoNotifyEntity);
public MsgDoNotifyEntity(INetChannel channel) : base(NAME, GROUP) { }
#endregion
public string Message { get; set; }
public EntityUid Entity;
public override void ReadFromBuffer(NetIncomingMessage buffer)
{
Message = buffer.ReadString();
Entity = buffer.ReadEntityUid();
}
public override void WriteToBuffer(NetOutgoingMessage buffer)
{
buffer.Write(Message);
buffer.Write(Entity);
}
} }
} }
} }