| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- using Content.Shared.Popups;
- using Robust.Server.GameObjects;
- using Robust.Server.Player;
- using Robust.Shared.Configuration;
- using Robust.Shared.Map;
- using Robust.Shared.Player;
- namespace Content.Server.Popups
- {
- public sealed class PopupSystem : SharedPopupSystem
- {
- [Dependency] private readonly IPlayerManager _player = default!;
- [Dependency] private readonly IConfigurationManager _cfg = default!;
- [Dependency] private readonly SharedTransformSystem _transform = default!;
- public override void PopupCursor(string? message, PopupType type = PopupType.Small)
- {
- // No local user.
- }
- public override void PopupCursor(string? message, ICommonSession recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- RaiseNetworkEvent(new PopupCursorEvent(message, type), recipient);
- }
- public override void PopupCursor(string? message, EntityUid recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- if (TryComp(recipient, out ActorComponent? actor))
- RaiseNetworkEvent(new PopupCursorEvent(message, type), actor.PlayerSession);
- }
- public override void PopupCoordinates(string? message, EntityCoordinates coordinates, Filter filter, bool replayRecord, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- RaiseNetworkEvent(new PopupCoordinatesEvent(message, type, GetNetCoordinates(coordinates)), filter, replayRecord);
- }
- public override void PopupCoordinates(string? message, EntityCoordinates coordinates, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- var mapPos = _transform.ToMapCoordinates(coordinates);
- var filter = Filter.Empty().AddPlayersByPvs(mapPos, entManager: EntityManager, playerMan: _player, cfgMan: _cfg);
- RaiseNetworkEvent(new PopupCoordinatesEvent(message, type, GetNetCoordinates(coordinates)), filter);
- }
- public override void PopupCoordinates(string? message, EntityCoordinates coordinates, ICommonSession recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- RaiseNetworkEvent(new PopupCoordinatesEvent(message, type, GetNetCoordinates(coordinates)), recipient);
- }
- public override void PopupCoordinates(string? message, EntityCoordinates coordinates, EntityUid recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- if (TryComp(recipient, out ActorComponent? actor))
- RaiseNetworkEvent(new PopupCoordinatesEvent(message, type, GetNetCoordinates(coordinates)), actor.PlayerSession);
- }
- public override void PopupPredictedCoordinates(string? message, EntityCoordinates coordinates, EntityUid? recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- var mapPos = _transform.ToMapCoordinates(coordinates);
- var filter = Filter.Empty().AddPlayersByPvs(mapPos, entManager: EntityManager, playerMan: _player, cfgMan: _cfg);
- if (recipient != null)
- {
- // Don't send to recipient, since they predicted it locally
- filter = filter.RemovePlayerByAttachedEntity(recipient.Value);
- }
- RaiseNetworkEvent(new PopupCoordinatesEvent(message, type, GetNetCoordinates(coordinates)), filter);
- }
- public override void PopupEntity(string? message, EntityUid uid, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- var filter = Filter.Empty().AddPlayersByPvs(uid, entityManager: EntityManager, playerMan: _player, cfgMan: _cfg);
- RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter);
- }
- public override void PopupEntity(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- if (TryComp(recipient, out ActorComponent? actor))
- RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), actor.PlayerSession);
- }
- public override void PopupClient(string? message, EntityUid? recipient, PopupType type = PopupType.Small)
- {
- }
- public override void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small)
- {
- // do nothing duh its for client only
- }
- public override void PopupClient(string? message, EntityCoordinates coordinates, EntityUid? recipient, PopupType type = PopupType.Small)
- {
- }
- public override void PopupEntity(string? message, EntityUid uid, ICommonSession recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), recipient);
- }
- public override void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter, recordReplay);
- }
- public override void PopupPredicted(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small)
- {
- if (message == null)
- return;
- if (recipient != null)
- {
- // Don't send to recipient, since they predicted it locally
- var filter = Filter.PvsExcept(recipient.Value, entityManager: EntityManager);
- RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter);
- }
- else
- {
- // With no recipient, send to everyone (in PVS range)
- RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)));
- }
- }
- public override void PopupPredicted(string? recipientMessage, string? othersMessage, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small)
- {
- PopupPredicted(othersMessage, uid, recipient, type);
- }
- }
- }
|