MortarBui.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Content.Shared._RMC14.Mortar;
  2. using JetBrains.Annotations;
  3. using Robust.Client.UserInterface;
  4. using Robust.Client.UserInterface.Controls;
  5. namespace Content.Client._RMC14.Mortar;
  6. [UsedImplicitly]
  7. public sealed class MortarBui(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey)
  8. {
  9. private MortarWindow? _window;
  10. protected override void Open()
  11. {
  12. base.Open();
  13. _window = this.CreateWindow<MortarWindow>();
  14. Refresh();
  15. static int Parse(FloatSpinBox spinBox)
  16. {
  17. return (int) spinBox.Value;
  18. }
  19. static void SetSpinBox(FloatSpinBox spinBox, int limit, int value)
  20. {
  21. spinBox.Value = value;
  22. spinBox.OnValueChanged += args =>
  23. {
  24. var value = Math.Clamp(args.Value, -limit, limit);
  25. spinBox.Value = value;
  26. };
  27. }
  28. if (EntMan.TryGetComponent(Owner, out MortarComponent? mortar))
  29. {
  30. SetSpinBox(_window.TargetX, mortar.MaxTarget, mortar.Target.X);
  31. SetSpinBox(_window.TargetY, mortar.MaxTarget, mortar.Target.Y);
  32. SetSpinBox(_window.DialX, mortar.MaxDial, mortar.Dial.X);
  33. SetSpinBox(_window.DialY, mortar.MaxDial, mortar.Dial.Y);
  34. _window.SetTargetButton.OnPressed += _ =>
  35. SendPredictedMessage(new MortarTargetBuiMsg((Parse(_window.TargetX), Parse(_window.TargetY))));
  36. _window.SetOffsetButton.OnPressed += _ =>
  37. SendPredictedMessage(new MortarDialBuiMsg((Parse(_window.DialX), Parse(_window.DialY))));
  38. }
  39. }
  40. public void Refresh()
  41. {
  42. if (_window is not { IsOpen: true })
  43. return;
  44. if (!EntMan.TryGetComponent(Owner, out MortarComponent? mortar))
  45. return;
  46. static void SetValue(FloatSpinBox? spinBox, int value)
  47. {
  48. if (spinBox != null)
  49. spinBox.Value = value;
  50. }
  51. SetValue(_window.TargetX, mortar.Target.X);
  52. SetValue(_window.TargetY, mortar.Target.Y);
  53. SetValue(_window.DialX, mortar.Dial.X);
  54. SetValue(_window.DialY, mortar.Dial.Y);
  55. _window.MaxDialLabel.Text = Loc.GetString("rmc-mortar-offset-max", ("max", mortar.MaxDial));
  56. }
  57. }