diff --git a/Content.Server/Stories/Shuttles/Systems/RepeatedArrivalsSystem.cs b/Content.Server/Stories/Shuttles/Systems/RepeatedArrivalsSystem.cs index aa9b37b39e..ab883080f2 100644 --- a/Content.Server/Stories/Shuttles/Systems/RepeatedArrivalsSystem.cs +++ b/Content.Server/Stories/Shuttles/Systems/RepeatedArrivalsSystem.cs @@ -33,6 +33,10 @@ public sealed class RepeatedArrivalsSystem : EntitySystem [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; [Dependency] private readonly StationSystem _station = default!; + private EntityQuery _pendingQuery; + private EntityQuery _blacklistQuery; + private EntityQuery _mobQuery; + /// /// If enabled then spawns players on an alternate map so they can take a shuttle to the station. /// @@ -47,6 +51,10 @@ public override void Initialize() SubscribeLocalEvent(OnRoundStarting); + _pendingQuery = GetEntityQuery(); + _blacklistQuery = GetEntityQuery(); + _mobQuery = GetEntityQuery(); + // Don't invoke immediately as it will get set in the natural course of things. Enabled = _cfgManager.GetCVar(CCVars.ArrivalsShuttles); _cfgManager.OnValueChanged(CCVars.ArrivalsShuttles, SetArrivals); @@ -58,23 +66,28 @@ public override void Shutdown() _cfgManager.UnsubValueChanged(CCVars.ArrivalsShuttles, SetArrivals); } - private void DumpChildren(EntityUid uid, - ref FTLStartedEvent args, - EntityQuery pendingEntQuery, - EntityQuery arrivalsBlacklistQuery, - EntityQuery mobQuery, - EntityQuery xformQuery) + private void DumpChildren(EntityUid uid, ref FTLStartedEvent args) { - if (pendingEntQuery.HasComponent(uid)) + var toDump = new List>(); + DumpChildren(uid, ref args, toDump); + foreach (var (ent, xform) in toDump) + { + var rotation = xform.LocalRotation; + _transform.SetCoordinates(ent, new EntityCoordinates(args.FromMapUid!.Value, args.FTLFrom.Transform(xform.LocalPosition))); + _transform.SetWorldRotation(ent, args.FromRotation + rotation); + } + } + + private void DumpChildren(EntityUid uid, ref FTLStartedEvent args, List> toDump) + { + if (_pendingQuery.HasComponent(uid)) return; - var xform = xformQuery.GetComponent(uid); + var xform = Transform(uid); - if (mobQuery.HasComponent(uid) || arrivalsBlacklistQuery.HasComponent(uid)) + if (_mobQuery.HasComponent(uid) || _blacklistQuery.HasComponent(uid)) { - var rotation = xform.LocalRotation; - _transform.SetCoordinates(uid, new EntityCoordinates(args.FromMapUid!.Value, args.FTLFrom.Transform(xform.LocalPosition))); - _transform.SetWorldRotation(uid, args.FromRotation + rotation); + toDump.Add((uid, xform)); return; } @@ -82,7 +95,7 @@ private void DumpChildren(EntityUid uid, while (children.MoveNext(out var child)) { - DumpChildren(child.Value, ref args, pendingEntQuery, arrivalsBlacklistQuery, mobQuery, xformQuery); + DumpChildren(child, ref args, toDump); } } @@ -149,20 +162,6 @@ private void OnRoundStarting(RoundStartingEvent ev) private void SetupArrivalsStation() { - var mapId = _mapManager.CreateMap(); - - if (!_loader.TryLoad(mapId, _cfgManager.GetCVar(CCVars.ArrivalsMap), out var uids)) - { - return; - } - - foreach (var id in uids) - { - EnsureComp(id); - EnsureComp(id); - EnsureComp(id); - } - // Handle roundstart stations. var query = AllEntityQuery();