Prevent Quantum Spin Inverter from Teleporting Things into Microwaves (#29200)
* Prevent Quantum Spin Inverter from Teleporting Things into Microwaves * Simplifies code, GetTeleportingEntity instead of TryGet, adds failed teleport message * remove using Linguini.Syntax.Ast; * capital... * re-add CanInsert and Fixes microwave issue * beb * beeb
This commit is contained in:
@@ -150,8 +150,19 @@ public sealed class SwapTeleporterSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
var teleEnt = GetTeleportingEntity((uid, xform));
|
||||
var otherTeleEnt = GetTeleportingEntity((linkedEnt, Transform(linkedEnt)));
|
||||
var (teleEnt, cont) = GetTeleportingEntity((uid, xform));
|
||||
var (otherTeleEnt, otherCont) = GetTeleportingEntity((linkedEnt, Transform(linkedEnt)));
|
||||
|
||||
if (otherCont != null && !_container.CanInsert(teleEnt, otherCont) ||
|
||||
cont != null && !_container.CanInsert(otherTeleEnt, cont))
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-fail",
|
||||
("entity", Identity.Entity(linkedEnt, EntityManager))),
|
||||
teleEnt,
|
||||
teleEnt,
|
||||
PopupType.MediumCaution);
|
||||
return;
|
||||
}
|
||||
|
||||
_popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-other",
|
||||
("entity", Identity.Entity(linkedEnt, EntityManager))),
|
||||
@@ -184,20 +195,20 @@ public sealed class SwapTeleporterSystem : EntitySystem
|
||||
DestroyLink(linked, user); // the linked one is shown globally
|
||||
}
|
||||
|
||||
private EntityUid GetTeleportingEntity(Entity<TransformComponent> ent)
|
||||
private (EntityUid, BaseContainer?) GetTeleportingEntity(Entity<TransformComponent> ent)
|
||||
{
|
||||
var parent = ent.Comp.ParentUid;
|
||||
if (_container.TryGetOuterContainer(ent, ent, out var container))
|
||||
parent = container.Owner;
|
||||
|
||||
if (HasComp<MapGridComponent>(parent) || HasComp<MapComponent>(parent))
|
||||
return ent;
|
||||
return (ent, container);
|
||||
|
||||
if (!_xformQuery.TryGetComponent(parent, out var parentXform) || parentXform.Anchored)
|
||||
return ent;
|
||||
return (ent, container);
|
||||
|
||||
if (!TryComp<PhysicsComponent>(parent, out var body) || body.BodyType == BodyType.Static)
|
||||
return ent;
|
||||
return (ent, container);
|
||||
|
||||
return GetTeleportingEntity((parent, parentXform));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user