SharedTeleportSystem.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. using System.Linq;
  2. using Robust.Shared.Map;
  3. namespace Content.Shared._Stalker.Teleport;
  4. public abstract class SharedTeleportSystem : EntitySystem
  5. {
  6. [Dependency] private readonly SharedTransformSystem _xform = default!;
  7. [Dependency] private readonly IMapManager _mapMan = default!;
  8. protected void TeleportEntity(EntityUid entity, EntityCoordinates coords, bool reParent = true)
  9. {
  10. // raise before event so other systems can handle this
  11. var originMapId = Transform(entity).MapID;
  12. var destinationMapId = coords.GetMapId(EntityManager);
  13. var beforeEvent = new BeforeEntityTeleportedEvent(entity, originMapId, destinationMapId);
  14. RaiseLocalEvent(ref beforeEvent);
  15. _xform.SetCoordinates(entity, coords);
  16. var map = coords.GetMapUid(EntityManager);
  17. if (map != null && reParent)
  18. _xform.SetParent(entity, map.Value);
  19. // raise after event for other systems to perform cleanup
  20. var ev = new AfterEntityTeleportedEvent(entity, originMapId, destinationMapId);
  21. RaiseLocalEvent(ref ev);
  22. }
  23. }
  24. [ByRefEvent]
  25. public record struct AfterEntityTeleportedEvent(EntityUid EntityUid, MapId Origin, MapId Destination);
  26. [ByRefEvent]
  27. public record struct BeforeEntityTeleportedEvent(EntityUid EntityUid, MapId Origin, MapId Destination);