ShuttleSystem.EmergencyConsole.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Numerics;
  2. using Content.Shared.Shuttles.Events;
  3. using Content.Shared.Shuttles.Systems;
  4. using Robust.Client.Graphics;
  5. using Robust.Shared.Enums;
  6. namespace Content.Client.Shuttles.Systems;
  7. public sealed partial class ShuttleSystem : SharedShuttleSystem
  8. {
  9. /// <summary>
  10. /// Should we show the expected emergency shuttle position.
  11. /// </summary>
  12. public bool EnableShuttlePosition
  13. {
  14. get => _enableShuttlePosition;
  15. set
  16. {
  17. if (_enableShuttlePosition == value) return;
  18. _enableShuttlePosition = value;
  19. var overlayManager = IoCManager.Resolve<IOverlayManager>();
  20. if (_enableShuttlePosition)
  21. {
  22. _overlay = new EmergencyShuttleOverlay(EntityManager.TransformQuery, XformSystem);
  23. overlayManager.AddOverlay(_overlay);
  24. RaiseNetworkEvent(new EmergencyShuttleRequestPositionMessage());
  25. }
  26. else
  27. {
  28. overlayManager.RemoveOverlay(_overlay!);
  29. _overlay = null;
  30. }
  31. }
  32. }
  33. private bool _enableShuttlePosition;
  34. private EmergencyShuttleOverlay? _overlay;
  35. private void InitializeEmergency()
  36. {
  37. SubscribeNetworkEvent<EmergencyShuttlePositionMessage>(OnShuttlePosMessage);
  38. }
  39. private void OnShuttlePosMessage(EmergencyShuttlePositionMessage ev)
  40. {
  41. if (_overlay == null) return;
  42. _overlay.StationUid = GetEntity(ev.StationUid);
  43. _overlay.Position = ev.Position;
  44. }
  45. }
  46. /// <summary>
  47. /// Shows the expected position of the emergency shuttle. Nothing more.
  48. /// </summary>
  49. public sealed class EmergencyShuttleOverlay : Overlay
  50. {
  51. private readonly EntityQuery<TransformComponent> _transformQuery;
  52. private readonly SharedTransformSystem _transformSystem;
  53. public override OverlaySpace Space => OverlaySpace.WorldSpace;
  54. public EntityUid? StationUid;
  55. public Box2? Position;
  56. public EmergencyShuttleOverlay(EntityQuery<TransformComponent> transformQuery, SharedTransformSystem transformSystem)
  57. {
  58. _transformQuery = transformQuery;
  59. _transformSystem = transformSystem;
  60. }
  61. protected override void Draw(in OverlayDrawArgs args)
  62. {
  63. if (Position == null || !_transformQuery.TryGetComponent(StationUid, out var xform))
  64. return;
  65. args.WorldHandle.SetTransform(_transformSystem.GetWorldMatrix(xform));
  66. args.WorldHandle.DrawRect(Position.Value, Color.Red.WithAlpha(100));
  67. args.WorldHandle.SetTransform(Matrix3x2.Identity);
  68. }
  69. }