diff --git a/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs b/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs index 4c9b0b5944..c99828d77e 100644 --- a/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs +++ b/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using System.Threading.Tasks; using Content.Server.Buckle.Components; using Content.Server.Hands.Components; @@ -98,7 +98,7 @@ namespace Content.IntegrationTests.Tests.Buckle Assert.NotNull(buckle.BuckledTo); Assert.True(buckle.Buckled); - var player = IoCManager.Resolve().GetAllPlayers().Single(); + var player = IoCManager.Resolve().Sessions.Single(); Assert.True(((BuckleComponentState) buckle.GetComponentState(player)).Buckled); Assert.False(actionBlocker.CanMove(human.Uid)); Assert.False(actionBlocker.CanChangeDirection(human.Uid)); diff --git a/Content.IntegrationTests/Tests/Commands/PardonCommand.cs b/Content.IntegrationTests/Tests/Commands/PardonCommand.cs index b48c9afcc7..cf86fcd0e6 100644 --- a/Content.IntegrationTests/Tests/Commands/PardonCommand.cs +++ b/Content.IntegrationTests/Tests/Commands/PardonCommand.cs @@ -1,4 +1,5 @@ -using System; +using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Content.Server.Database; @@ -27,7 +28,7 @@ namespace Content.IntegrationTests.Tests.Commands await server.WaitAssertion(async () => { - var clientSession = sPlayerManager.GetAllPlayers().Single(); + var clientSession = sPlayerManager.Sessions.Single(); var clientId = clientSession.UserId; // No bans on record diff --git a/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs b/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs index e16a77ffa5..9a55c5eaf4 100644 --- a/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs +++ b/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs @@ -59,10 +59,7 @@ namespace Content.IntegrationTests.Tests s.Post(() => { - IoCManager.Resolve() - .GetAllPlayers() - .Single() - .JoinGame(); + IoCManager.Resolve().ServerSessions.Single().JoinGame(); var mapMan = IoCManager.Resolve(); diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/ActionsComponentTests.cs b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/ActionsComponentTests.cs index 845121a157..85da3e7612 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/ActionsComponentTests.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/ActionsComponentTests.cs @@ -70,8 +70,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs await server.WaitAssertion(() => { - var player = serverPlayerManager.GetAllPlayers().Single(); - var playerEnt = player.AttachedEntity; + var playerEnt = serverPlayerManager.Sessions.Single().AttachedEntity; var actionsComponent = playerEnt!.GetComponent(); // player should begin with their innate actions granted @@ -153,8 +152,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs // now revoke the action and check that the client sees it as revoked await server.WaitAssertion(() => { - var player = serverPlayerManager.GetAllPlayers().Single(); - var playerEnt = player.AttachedEntity; + var playerEnt = serverPlayerManager.Sessions.Single().AttachedEntity; var actionsComponent = playerEnt!.GetComponent(); actionsComponent.Revoke(ActionType.DebugInstant); }); @@ -246,7 +244,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs await server.WaitAssertion(() => { - serverPlayerEnt = serverPlayerManager.GetAllPlayers().Single().AttachedEntity; + serverPlayerEnt = serverPlayerManager.Sessions.Single().AttachedEntity; serverActionsComponent = serverPlayerEnt!.GetComponent(); // spawn and give them an item that has actions diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs index a517b5fc16..d5e42d1aff 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs @@ -2,12 +2,11 @@ using System.Linq; using System.Threading.Tasks; using Content.Client.Alerts; using Content.Client.Alerts.UI; -using Content.Client.UserInterface; using Content.Server.Alert; using Content.Shared.Alert; using NUnit.Framework; using Robust.Client.UserInterface; -using IPlayerManager = Robust.Server.Player.IPlayerManager; +using Robust.Server.Player; namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs { @@ -28,8 +27,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs await server.WaitAssertion(() => { - var player = serverPlayerManager.GetAllPlayers().Single(); - var playerEnt = player.AttachedEntity; + var playerEnt = serverPlayerManager.Sessions.Single().AttachedEntity; Assert.NotNull(playerEnt); var alertsComponent = playerEnt.GetComponent(); Assert.NotNull(alertsComponent); @@ -69,8 +67,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs await server.WaitAssertion(() => { - var player = serverPlayerManager.GetAllPlayers().Single(); - var playerEnt = player.AttachedEntity; + var playerEnt = serverPlayerManager.Sessions.Single().AttachedEntity; Assert.NotNull(playerEnt); var alertsComponent = playerEnt.GetComponent(); Assert.NotNull(alertsComponent); diff --git a/Content.IntegrationTests/Tests/MindEntityDeletionTest.cs b/Content.IntegrationTests/Tests/MindEntityDeletionTest.cs index 5e285ae584..f63a7d100a 100644 --- a/Content.IntegrationTests/Tests/MindEntityDeletionTest.cs +++ b/Content.IntegrationTests/Tests/MindEntityDeletionTest.cs @@ -1,7 +1,6 @@ -using System.Linq; +using System.Linq; using System.Threading.Tasks; using Content.Server.Mind; -using Content.Server.Players; using Content.Shared.Coordinates; using NUnit.Framework; using Robust.Server.GameObjects; @@ -26,7 +25,7 @@ namespace Content.IntegrationTests.Tests Mind mind = null; server.Assert(() => { - var player = IoCManager.Resolve().GetAllPlayers().Single(); + var player = IoCManager.Resolve().ServerSessions.Single(); var mapMan = IoCManager.Resolve(); var entMgr = IoCManager.Resolve(); @@ -71,7 +70,7 @@ namespace Content.IntegrationTests.Tests Mind mind = null; server.Assert(() => { - var player = IoCManager.Resolve().GetAllPlayers().Single(); + var player = IoCManager.Resolve().ServerSessions.Single(); var mapMan = IoCManager.Resolve(); var entMgr = IoCManager.Resolve(); @@ -116,7 +115,7 @@ namespace Content.IntegrationTests.Tests MapId map = default; server.Assert(() => { - var player = IoCManager.Resolve().GetAllPlayers().Single(); + var player = IoCManager.Resolve().ServerSessions.Single(); var mapMan = IoCManager.Resolve(); diff --git a/Content.IntegrationTests/Tests/Networking/ConnectTest.cs b/Content.IntegrationTests/Tests/Networking/ConnectTest.cs index 1c8439bba6..4aada01df3 100644 --- a/Content.IntegrationTests/Tests/Networking/ConnectTest.cs +++ b/Content.IntegrationTests/Tests/Networking/ConnectTest.cs @@ -50,7 +50,7 @@ namespace Content.IntegrationTests.Tests.Networking var playerManager = server.ResolveDependency(); Assert.That(playerManager.PlayerCount, Is.EqualTo(1)); - Assert.That(playerManager.GetAllPlayers().First().Status, Is.EqualTo(SessionStatus.InGame)); + Assert.That(playerManager.Sessions.First().Status, Is.EqualTo(SessionStatus.InGame)); var clEntityManager = client.ResolveDependency(); var svEntityManager = server.ResolveDependency(); diff --git a/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs b/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs index 75288a7eaf..85662f29e1 100644 --- a/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs +++ b/Content.IntegrationTests/Tests/Networking/SimplePredictReconcileTest.cs @@ -90,7 +90,7 @@ namespace Content.IntegrationTests.Tests.Networking { // Spawn dummy component entity. var map = sMapManager.CreateMap(); - var player = sPlayerManager.GetAllPlayers().Single(); + var player = sPlayerManager.ServerSessions.Single(); serverEnt = sEntityManager.SpawnEntity(null, new MapCoordinates((0, 0), map)); serverComponent = serverEnt.AddComponent(); diff --git a/Content.IntegrationTests/Tests/PDA/PDAExtensionsTests.cs b/Content.IntegrationTests/Tests/PDA/PDAExtensionsTests.cs index bc90dd0095..18ba577046 100644 --- a/Content.IntegrationTests/Tests/PDA/PDAExtensionsTests.cs +++ b/Content.IntegrationTests/Tests/PDA/PDAExtensionsTests.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using System.Threading.Tasks; using Content.Server.Access.Components; using Content.Server.Hands.Components; @@ -59,7 +59,7 @@ namespace Content.IntegrationTests.Tests.PDA await server.WaitAssertion(() => { - var player = sPlayerManager.GetAllPlayers().Single().AttachedEntity; + var player = sPlayerManager.Sessions.Single().AttachedEntity; Assert.NotNull(player); diff --git a/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs b/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs index 908df67153..de1a38198f 100644 --- a/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs +++ b/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs @@ -1,10 +1,13 @@ using System.Collections.Generic; +using System.Linq; using Content.Server.AI.Components; using Content.Shared.Damage; using JetBrains.Annotations; using Robust.Server.Player; using Robust.Shared.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Player; namespace Content.Server.AI.WorldState.States.Mobs { @@ -22,8 +25,9 @@ namespace Content.Server.AI.WorldState.States.Mobs return result; } - var playerManager = IoCManager.Resolve(); - var nearbyPlayers = playerManager.GetPlayersInRange(Owner.Transform.Coordinates, (int) controller.VisionRadius); + var nearbyPlayers = Filter.Empty() + .AddInRange(Owner.Transform.MapPosition, controller.VisionRadius) + .Recipients; foreach (var player in nearbyPlayers) { diff --git a/Content.Server/Administration/AdminSystem.cs b/Content.Server/Administration/AdminSystem.cs index 6ced89a021..a7796b2cbf 100644 --- a/Content.Server/Administration/AdminSystem.cs +++ b/Content.Server/Administration/AdminSystem.cs @@ -2,7 +2,6 @@ using System.Linq; using Content.Server.Administration.Managers; using Content.Server.Players; using Content.Server.Roles; -using Content.Server.Traitor; using Content.Shared.Administration; using Content.Shared.Administration.Events; using Robust.Server.GameObjects; @@ -113,7 +112,7 @@ namespace Content.Server.Administration { var ev = new FullPlayerListEvent(); ev.PlayersInfo.Clear(); - foreach (var session in _playerManager.GetAllPlayers()) + foreach (var session in _playerManager.ServerSessions) { ev.PlayersInfo.Add(GetPlayerInfo(session)); } diff --git a/Content.Server/Chat/Managers/ChatManager.cs b/Content.Server/Chat/Managers/ChatManager.cs index 01612ba2e0..cbad133f93 100644 --- a/Content.Server/Chat/Managers/ChatManager.cs +++ b/Content.Server/Chat/Managers/ChatManager.cs @@ -147,7 +147,7 @@ namespace Content.Server.Chat.Managers var clients = new List(); - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.Sessions) { if (player.AttachedEntity == null) continue; var transform = player.AttachedEntity.Transform; @@ -222,15 +222,18 @@ namespace Content.Server.Chat.Managers action = FormattedMessage.EscapeText(action); - var pos = source.Transform.Coordinates; - var clients = _playerManager.GetPlayersInRange(pos, VoiceRange).Select(p => p.ConnectedClient); + var clients = Filter.Empty() + .AddInRange(source.Transform.MapPosition, VoiceRange) + .Recipients + .Select(p => p.ConnectedClient) + .ToList(); var msg = _netManager.CreateNetMessage(); msg.Channel = ChatChannel.Emotes; msg.Message = action; msg.MessageWrap = Loc.GetString("chat-manager-entity-me-wrap-message", ("entityName",source.Name)); msg.SenderEntity = source.Uid; - _netManager.ServerSendToMany(msg, clients.ToList()); + _netManager.ServerSendToMany(msg, clients); } public void SendOOC(IPlayerSession player, string message) @@ -324,10 +327,11 @@ namespace Content.Server.Chat.Managers private IEnumerable GetDeadChatClients() { - return _playerManager - .GetPlayersBy(x => x.AttachedEntity != null && x.AttachedEntity.HasComponent()) - .Select(p => p.ConnectedClient) - .Union(_adminManager.ActiveAdmins.Select(p => p.ConnectedClient)); + return Filter.Empty() + .AddWhereAttachedEntity(uid => _entManager.HasComponent(uid)) + .Recipients + .Union(_adminManager.ActiveAdmins) + .Select(p => p.ConnectedClient); } public void SendAdminChat(IPlayerSession player, string message) diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index f14018c3e5..3e1ebd1d74 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Content.Server.Camera; @@ -10,7 +10,6 @@ using Content.Shared.Physics; using Content.Shared.Sound; using Content.Shared.Tag; using Robust.Server.GameObjects; -using Robust.Server.Player; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -43,7 +42,6 @@ namespace Content.Server.Explosion.EntitySystems [Dependency] private readonly IEntityLookup _entityLookup = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IMapManager _maps = default!; - [Dependency] private readonly IPlayerManager _players = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tiles = default!; @@ -74,7 +72,9 @@ namespace Content.Server.Explosion.EntitySystems private void CameraShakeInRange(EntityCoordinates epicenter, float maxRange) { - var players = _players.GetPlayersInRange(epicenter, (int) Math.Ceiling(maxRange)); + var players = Filter.Empty() + .AddInRange(epicenter.ToMap(EntityManager), MathF.Ceiling(maxRange)) + .Recipients; foreach (var player in players) { diff --git a/Content.Server/GameTicking/GameTicker.Updates.cs b/Content.Server/GameTicking/GameTicker.Updates.cs index 566842fdf4..2c67e686a1 100644 --- a/Content.Server/GameTicking/GameTicker.Updates.cs +++ b/Content.Server/GameTicking/GameTicker.Updates.cs @@ -37,7 +37,7 @@ namespace Content.Server.GameTicking // Can't simple check the current connected player count since that doesn't update // before PlayerStatusChanged gets fired. // So in the disconnect handler we'd still see a single player otherwise. - var playersOnline = _playerManager.GetAllPlayers().Any(p => p.Status != SessionStatus.Disconnected); + var playersOnline = _playerManager.Sessions.Any(p => p.Status != SessionStatus.Disconnected); if (playersOnline || !_updateOnRoundEnd) { // Still somebody online. diff --git a/Content.Server/GameTicking/Presets/PresetTraitorDeathMatch.cs b/Content.Server/GameTicking/Presets/PresetTraitorDeathMatch.cs index 1e0cdd93b0..14a784ab6a 100644 --- a/Content.Server/GameTicking/Presets/PresetTraitorDeathMatch.cs +++ b/Content.Server/GameTicking/Presets/PresetTraitorDeathMatch.cs @@ -143,7 +143,7 @@ namespace Content.Server.GameTicking.Presets { // Collate people to avoid... var existingPlayerPoints = new List(); - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.ServerSessions) { var avoidMeMind = player.Data.ContentData()?.Mind; if ((avoidMeMind == null) || (avoidMeMind == ignoreMe)) diff --git a/Content.Server/GameTicking/Rules/RuleDeathMatch.cs b/Content.Server/GameTicking/Rules/RuleDeathMatch.cs index fc77f15697..003cb8d4fb 100644 --- a/Content.Server/GameTicking/Rules/RuleDeathMatch.cs +++ b/Content.Server/GameTicking/Rules/RuleDeathMatch.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Threading; using Content.Server.Chat.Managers; using Content.Shared.CCVar; @@ -58,7 +60,7 @@ namespace Content.Server.GameTicking.Rules return; IPlayerSession? winner = null; - foreach (var playerSession in _playerManager.GetAllPlayers()) + foreach (var playerSession in _playerManager.ServerSessions) { var playerEntity = playerSession.AttachedEntity; if (playerEntity == null diff --git a/Content.Server/GameTicking/Rules/RuleSuspicion.cs b/Content.Server/GameTicking/Rules/RuleSuspicion.cs index d10a871b93..d5634d7ff2 100644 --- a/Content.Server/GameTicking/Rules/RuleSuspicion.cs +++ b/Content.Server/GameTicking/Rules/RuleSuspicion.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Threading; using Content.Server.Chat.Managers; using Content.Server.Doors; @@ -25,7 +27,7 @@ namespace Content.Server.GameTicking.Rules /// /// Simple GameRule that will do a TTT-like gamemode with traitors. /// - public sealed class RuleSuspicion : GameRule, IEntityEventSubscriber + public sealed class RuleSuspicion : GameRule { private static readonly TimeSpan DeadCheckDelay = TimeSpan.FromSeconds(1); @@ -86,7 +88,7 @@ namespace Content.Server.GameTicking.Rules var traitorsAlive = 0; var innocentsAlive = 0; - foreach (var playerSession in _playerManager.GetAllPlayers()) + foreach (var playerSession in _playerManager.ServerSessions) { if (playerSession.AttachedEntity == null || !playerSession.AttachedEntity.TryGetComponent(out MobStateComponent? mobState) diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index 2573b2512d..1972d5637e 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -218,7 +218,7 @@ namespace Content.Server.Ghost { var players = new Dictionary(); - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.Sessions) { if (player.AttachedEntity != null) { diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 872008a2c2..86be3f020d 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -24,9 +24,9 @@ namespace Content.Server.Ghost.Roles public class GhostRoleSystem : EntitySystem { [Dependency] private readonly EuiManager _euiManager = default!; - [Dependency] private IPlayerManager _playerManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; - private uint _nextRoleIdentifier = 0; + private uint _nextRoleIdentifier; private bool _needsUpdateGhostRoleCount = true; private readonly Dictionary _ghostRoles = new(); private readonly Dictionary _openUis = new(); @@ -96,7 +96,7 @@ namespace Content.Server.Ghost.Roles { if (_openMakeGhostRoleUis.Remove(session, out var eui)) { - eui?.Close(); + eui.Close(); } } @@ -119,8 +119,10 @@ namespace Content.Server.Ghost.Roles { _needsUpdateGhostRoleCount = false; var response = new GhostUpdateGhostRoleCountEvent(_ghostRoles.Count); - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.Sessions) + { RaiseNetworkEvent(response, player.ConnectedClient); + } } } diff --git a/Content.Server/Gravity/EntitySystems/GravityShakeSystem.cs b/Content.Server/Gravity/EntitySystems/GravityShakeSystem.cs index c0451a2f60..a4653cf6e8 100644 --- a/Content.Server/Gravity/EntitySystems/GravityShakeSystem.cs +++ b/Content.Server/Gravity/EntitySystems/GravityShakeSystem.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using Content.Server.Camera; using Content.Shared.Gravity; using Robust.Server.Player; @@ -25,7 +25,7 @@ namespace Content.Server.Gravity.EntitySystems private const float GravityKick = 100.0f; private const uint ShakeTimes = 10; - private float _internalTimer = 0.0f; + private float _internalTimer; public override void Update(float frameTime) { @@ -77,7 +77,7 @@ namespace Content.Server.Gravity.EntitySystems private void ShakeGrid(GridId gridId) { - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.Sessions) { if (player.AttachedEntity == null || player.AttachedEntity.Transform.GridID != gridId diff --git a/Content.Server/Pointing/EntitySystems/PointingSystem.cs b/Content.Server/Pointing/EntitySystems/PointingSystem.cs index 6e9762a54d..c299e55fb9 100644 --- a/Content.Server/Pointing/EntitySystems/PointingSystem.cs +++ b/Content.Server/Pointing/EntitySystems/PointingSystem.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Content.Server.Ghost.Components; using Content.Server.Players; using Content.Server.Pointing.Components; @@ -20,6 +21,7 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Maths; +using Robust.Shared.Player; using Robust.Shared.Players; using Robust.Shared.Timing; @@ -55,7 +57,7 @@ namespace Content.Server.Pointing.EntitySystems } // TODO: FOV - private void SendMessage(IEntity source, IList viewers, IEntity? pointed, string selfMessage, + private void SendMessage(IEntity source, IEnumerable viewers, IEntity? pointed, string selfMessage, string viewerMessage, string? viewerPointedAtMessage = null) { foreach (var viewer in viewers) @@ -127,15 +129,18 @@ namespace Content.Server.Pointing.EntitySystems } // Get players that are in range and whose visibility layer matches the arrow's. - var viewers = _playerManager.GetPlayersBy((playerSession) => + bool ViewerPredicate(IPlayerSession playerSession) { var ent = playerSession.ContentData()?.Mind?.CurrentEntity; - if (ent is null || (!ent.TryGetComponent(out var eyeComp) || (eyeComp.VisibilityMask & layer) == 0)) - return false; + if (ent is null || (!ent.TryGetComponent(out var eyeComp) || (eyeComp.VisibilityMask & layer) == 0)) return false; return ent.Transform.MapPosition.InRange(player.Transform.MapPosition, PointingRange); - }); + } + + var viewers = Filter.Empty() + .AddWhere(session1 => ViewerPredicate((IPlayerSession) session1)) + .Recipients; string selfMessage; string viewerMessage; diff --git a/Content.Server/Pointing/EntitySystems/RoguePointingSystem.cs b/Content.Server/Pointing/EntitySystems/RoguePointingSystem.cs index ce95d52b8f..c8706537d9 100644 --- a/Content.Server/Pointing/EntitySystems/RoguePointingSystem.cs +++ b/Content.Server/Pointing/EntitySystems/RoguePointingSystem.cs @@ -1,11 +1,10 @@ -using System.Linq; +using System.Linq; using Content.Server.Explosion.EntitySystems; using Content.Server.Pointing.Components; using Content.Shared.MobState.Components; using Content.Shared.Pointing.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; -using Robust.Server.Player; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.IoC; @@ -19,7 +18,6 @@ namespace Content.Server.Pointing.EntitySystems [UsedImplicitly] internal sealed class RoguePointingSystem : EntitySystem { - [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ExplosionSystem _explosions = default!; @@ -44,17 +42,15 @@ namespace Content.Server.Pointing.EntitySystems if (!Resolve(uid, ref component, ref transform)) return null; - var players = _playerManager - .GetPlayersInRange(transform.Coordinates, 15) - .Where(player => player.AttachedEntity != null && player.AttachedEntity.TryGetComponent(out MobStateComponent? mobStateComponent) && !mobStateComponent.IsDead()) + var players = Filter.Empty() + .AddPlayersByPvs(transform.MapPosition) + .RemoveWhereAttachedEntity(euid => !EntityManager.TryGetComponent(euid, out MobStateComponent? mobStateComponent) || mobStateComponent.IsDead()) + .Recipients .ToArray(); - if (players.Length == 0) - { - return null; - } - - return _random.Pick(players).AttachedEntity; + return players.Length != 0 + ? _random.Pick(players).AttachedEntity + : null; } private void UpdateAppearance(EntityUid uid, RoguePointingArrowComponent? component = null, TransformComponent? transform = null, AppearanceComponent? appearance = null) diff --git a/Content.Server/Popups/PopupExtensions.cs b/Content.Server/Popups/PopupExtensions.cs index 2e94ccd9ba..12aa0afe96 100644 --- a/Content.Server/Popups/PopupExtensions.cs +++ b/Content.Server/Popups/PopupExtensions.cs @@ -1,7 +1,11 @@ -using Content.Shared.Popups; +using System.Collections.Generic; +using System.Linq; +using Content.Shared.Popups; using Robust.Server.Player; using Robust.Shared.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Player; namespace Content.Server.Popups { @@ -13,18 +17,11 @@ namespace Content.Server.Popups /// /// The entity on which to popup the message. /// The message to show. - /// - /// The instance of player manager to use, will be resolved automatically - /// if null. - /// - /// - /// The range in which to search for players, defaulting to one screen. - /// - public static void PopupMessageOtherClients(this IEntity source, string message, IPlayerManager? playerManager = null, int range = 15) + public static void PopupMessageOtherClients(this IEntity source, string message) { - playerManager ??= IoCManager.Resolve(); - - var viewers = playerManager.GetPlayersInRange(source.Transform.Coordinates, range); + var viewers = Filter.Empty() + .AddPlayersByPvs(source) + .Recipients; foreach (var viewer in viewers) { @@ -55,7 +52,7 @@ namespace Content.Server.Popups public static void PopupMessageEveryone(this IEntity source, string message, IPlayerManager? playerManager = null, int range = 15) { source.PopupMessage(message); - source.PopupMessageOtherClients(message, playerManager, range); + source.PopupMessageOtherClients(message); } } } diff --git a/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs b/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs index 3e3c0213f3..8a6af0e51b 100644 --- a/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs +++ b/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using Content.Shared.GameTicking; using Content.Shared.Suspicion; @@ -54,7 +54,7 @@ namespace Content.Server.Suspicion.EntitySystems private void SendUpdateToAll() { - foreach (var player in _playerManager.GetAllPlayers().Where(p => p.Status == SessionStatus.InGame)) + foreach (var player in _playerManager.ServerSessions.Where(p => p.Status == SessionStatus.InGame)) { SendUpdateTimerMessage(player); } diff --git a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs index 114f44142a..5deccfc110 100644 --- a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs +++ b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Content.Server.GameTicking; @@ -85,7 +85,7 @@ namespace Content.Server.Voting.Managers vote.CastVote(initiator, 0); } - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.ServerSessions) { if (player != initiator && !_afkManager.IsAfk(player)) { diff --git a/Content.Server/Voting/Managers/VoteManager.cs b/Content.Server/Voting/Managers/VoteManager.cs index e0945c631d..9c3d04a3e0 100644 --- a/Content.Server/Voting/Managers/VoteManager.cs +++ b/Content.Server/Voting/Managers/VoteManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Collections.Immutable; @@ -204,7 +204,7 @@ namespace Content.Server.Voting.Managers private void SendUpdates(VoteReg v) { - foreach (var player in _playerManager.GetAllPlayers()) + foreach (var player in _playerManager.ServerSessions) { SendSingleUpdate(v, player); } @@ -253,7 +253,7 @@ namespace Content.Server.Voting.Managers private void DirtyCanCallVoteAll() { - _playerCanCallVoteDirty.UnionWith(_playerManager.GetAllPlayers()); + _playerCanCallVoteDirty.UnionWith(_playerManager.ServerSessions); } private void SendUpdateCanCallVote(IPlayerSession player)