[Dependency] private readonly StationSpawningSystem _stationSpawning = default!;
[Dependency] private readonly StationSystem _station = default!;
+ private EntityQuery<PendingClockInComponent> _pendingQuery;
+ private EntityQuery<ArrivalsBlacklistComponent> _blacklistQuery;
+ private EntityQuery<MobStateComponent> _mobQuery;
+
/// <summary>
/// If enabled then spawns players on an alternate map so they can take a shuttle to the station.
/// </summary>
SubscribeLocalEvent<ArrivalsShuttleComponent, FTLStartedEvent>(OnArrivalsFTL);
SubscribeLocalEvent<ArrivalsShuttleComponent, FTLCompletedEvent>(OnArrivalsDocked);
+ _pendingQuery = GetEntityQuery<PendingClockInComponent>();
+ _blacklistQuery = GetEntityQuery<ArrivalsBlacklistComponent>();
+ _mobQuery = GetEntityQuery<MobStateComponent>();
+
// 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);
// Any mob then yeet them off the shuttle.
if (!_cfgManager.GetCVar(CCVars.ArrivalsReturns) && args.FromMapUid != null)
- {
- var pendingEntQuery = GetEntityQuery<PendingClockInComponent>();
- var arrivalsBlacklistQuery = GetEntityQuery<ArrivalsBlacklistComponent>();
- var mobQuery = GetEntityQuery<MobStateComponent>();
- var xformQuery = GetEntityQuery<TransformComponent>();
- DumpChildren(shuttleUid, ref args, pendingEntQuery, arrivalsBlacklistQuery, mobQuery, xformQuery);
- }
+ DumpChildren(shuttleUid, ref args);
var pendingQuery = AllEntityQuery<PendingClockInComponent, TransformComponent>();
}
}
- private void DumpChildren(EntityUid uid,
- ref FTLStartedEvent args,
- EntityQuery<PendingClockInComponent> pendingEntQuery,
- EntityQuery<ArrivalsBlacklistComponent> arrivalsBlacklistQuery,
- EntityQuery<MobStateComponent> mobQuery,
- EntityQuery<TransformComponent> xformQuery)
+ private void DumpChildren(EntityUid uid, ref FTLStartedEvent args)
{
- if (pendingEntQuery.HasComponent(uid))
+ var toDump = new List<Entity<TransformComponent>>();
+ 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<Entity<TransformComponent>> 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;
}
var children = xform.ChildEnumerator;
while (children.MoveNext(out var child))
{
- DumpChildren(child, ref args, pendingEntQuery, arrivalsBlacklistQuery, mobQuery, xformQuery);
+ DumpChildren(child, ref args, toDump);
}
}