1
0

NavScreen.xaml.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System.Numerics;
  2. using Content.Shared.Shuttles.BUIStates;
  3. using Robust.Client.AutoGenerated;
  4. using Robust.Client.Graphics;
  5. using Robust.Client.UserInterface.Controls;
  6. using Robust.Client.UserInterface.XAML;
  7. using Robust.Shared.Map;
  8. using Robust.Shared.Physics.Components;
  9. namespace Content.Client.Shuttles.UI;
  10. [GenerateTypedNameReferences]
  11. public sealed partial class NavScreen : BoxContainer
  12. {
  13. [Dependency] private readonly IEntityManager _entManager = default!;
  14. private SharedTransformSystem _xformSystem;
  15. private EntityUid? _consoleEntity; // Entity of controlling console
  16. private EntityUid? _shuttleEntity;
  17. public NavScreen()
  18. {
  19. RobustXamlLoader.Load(this);
  20. IoCManager.InjectDependencies(this);
  21. _xformSystem = _entManager.System<SharedTransformSystem>();
  22. IFFToggle.OnToggled += OnIFFTogglePressed;
  23. IFFToggle.Pressed = NavRadar.ShowIFF;
  24. DockToggle.OnToggled += OnDockTogglePressed;
  25. DockToggle.Pressed = NavRadar.ShowDocks;
  26. }
  27. public void SetShuttle(EntityUid? shuttle)
  28. {
  29. _shuttleEntity = shuttle;
  30. }
  31. public void SetConsole(EntityUid? console)
  32. {
  33. _consoleEntity = console;
  34. NavRadar.SetConsole(console);
  35. }
  36. private void OnIFFTogglePressed(BaseButton.ButtonEventArgs args)
  37. {
  38. NavRadar.ShowIFF ^= true;
  39. args.Button.Pressed = NavRadar.ShowIFF;
  40. }
  41. private void OnDockTogglePressed(BaseButton.ButtonEventArgs args)
  42. {
  43. NavRadar.ShowDocks ^= true;
  44. args.Button.Pressed = NavRadar.ShowDocks;
  45. }
  46. public void UpdateState(NavInterfaceState scc)
  47. {
  48. NavRadar.UpdateState(scc);
  49. }
  50. public void SetMatrix(EntityCoordinates? coordinates, Angle? angle)
  51. {
  52. _shuttleEntity = coordinates?.EntityId;
  53. NavRadar.SetMatrix(coordinates, angle);
  54. }
  55. protected override void Draw(DrawingHandleScreen handle)
  56. {
  57. base.Draw(handle);
  58. if (!_entManager.TryGetComponent(_shuttleEntity, out TransformComponent? gridXform) ||
  59. !_entManager.TryGetComponent(_shuttleEntity, out PhysicsComponent? gridBody))
  60. {
  61. return;
  62. }
  63. var (_, worldRot, worldMatrix) = _xformSystem.GetWorldPositionRotationMatrix(gridXform);
  64. var worldPos = Vector2.Transform(gridBody.LocalCenter, worldMatrix);
  65. // Get the positive reduced angle.
  66. var displayRot = -worldRot.Reduced();
  67. GridPosition.Text = Loc.GetString("shuttle-console-position-value",
  68. ("X", $"{worldPos.X:0.0}"),
  69. ("Y", $"{worldPos.Y:0.0}"));
  70. GridOrientation.Text = Loc.GetString("shuttle-console-orientation-value",
  71. ("angle", $"{displayRot.Degrees:0.0}"));
  72. var gridVelocity = gridBody.LinearVelocity;
  73. gridVelocity = displayRot.RotateVec(gridVelocity);
  74. // Get linear velocity relative to the console entity
  75. GridLinearVelocity.Text = Loc.GetString("shuttle-console-linear-velocity-value",
  76. ("X", $"{gridVelocity.X + 10f * float.Epsilon:0.0}"),
  77. ("Y", $"{gridVelocity.Y + 10f * float.Epsilon:0.0}"));
  78. GridAngularVelocity.Text = Loc.GetString("shuttle-console-angular-velocity-value",
  79. ("angularVelocity", $"{-MathHelper.RadiansToDegrees(gridBody.AngularVelocity) + 10f * float.Epsilon:0.0}"));
  80. }
  81. }