MechBoundUserInterface.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Content.Client.UserInterface.Fragments;
  2. using Content.Shared.Mech;
  3. using Content.Shared.Mech.Components;
  4. using JetBrains.Annotations;
  5. using Robust.Client.GameObjects;
  6. using Robust.Client.UserInterface;
  7. namespace Content.Client.Mech.Ui;
  8. [UsedImplicitly]
  9. public sealed class MechBoundUserInterface : BoundUserInterface
  10. {
  11. [ViewVariables]
  12. private MechMenu? _menu;
  13. public MechBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  14. {
  15. }
  16. protected override void Open()
  17. {
  18. base.Open();
  19. _menu = this.CreateWindowCenteredLeft<MechMenu>();
  20. _menu.SetEntity(Owner);
  21. _menu.OnRemoveButtonPressed += uid =>
  22. {
  23. SendMessage(new MechEquipmentRemoveMessage(EntMan.GetNetEntity(uid)));
  24. };
  25. }
  26. protected override void UpdateState(BoundUserInterfaceState state)
  27. {
  28. base.UpdateState(state);
  29. if (state is not MechBoundUiState msg)
  30. return;
  31. UpdateEquipmentControls(msg);
  32. _menu?.UpdateMechStats();
  33. _menu?.UpdateEquipmentView();
  34. }
  35. public void UpdateEquipmentControls(MechBoundUiState state)
  36. {
  37. if (!EntMan.TryGetComponent<MechComponent>(Owner, out var mechComp))
  38. return;
  39. foreach (var ent in mechComp.EquipmentContainer.ContainedEntities)
  40. {
  41. var ui = GetEquipmentUi(ent);
  42. if (ui == null)
  43. continue;
  44. foreach (var (attached, estate) in state.EquipmentStates)
  45. {
  46. if (ent == EntMan.GetEntity(attached))
  47. ui.UpdateState(estate);
  48. }
  49. }
  50. }
  51. public UIFragment? GetEquipmentUi(EntityUid? uid)
  52. {
  53. var component = EntMan.GetComponentOrNull<UIFragmentComponent>(uid);
  54. component?.Ui?.Setup(this, uid);
  55. return component?.Ui;
  56. }
  57. }