private const string MagnetChannel = "Supply";
private EntityQuery<SalvageMobRestrictionsComponent> _salvMobQuery;
+ private EntityQuery<MobStateComponent> _mobStateQuery;
private List<(Entity<TransformComponent> Entity, EntityUid MapUid, Vector2 LocalPosition)> _detachEnts = new();
private void InitializeMagnet()
{
_salvMobQuery = GetEntityQuery<SalvageMobRestrictionsComponent>();
+ _mobStateQuery = GetEntityQuery<MobStateComponent>();
SubscribeLocalEvent<SalvageMagnetDataComponent, MapInitEvent>(OnMagnetDataMapInit);
if (_salvMobQuery.HasComp(mobUid))
continue;
+ bool CheckParents(EntityUid uid)
+ {
+ do
+ {
+ uid = _transform.GetParentUid(uid);
+ if (_mobStateQuery.HasComp(uid))
+ return true;
+ }
+ while (uid != xform.GridUid && uid != EntityUid.Invalid);
+ return false;
+ }
+
+ if (CheckParents(mobUid))
+ continue;
+
// Can't parent directly to map as it runs grid traversal.
_detachEnts.Add(((mobUid, xform), xform.MapUid.Value, _transform.GetWorldPosition(xform)));
_transform.DetachEntity(mobUid, xform);