Fix popupmessage appearing behind the player when moving (#1401)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user