CraftingUIController.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Content.Client.Construction.UI;
  2. using Content.Client.Gameplay;
  3. using Content.Client.UserInterface.Controls;
  4. using JetBrains.Annotations;
  5. using Robust.Client.UserInterface.Controllers;
  6. using Robust.Client.UserInterface.Controls;
  7. using Robust.Shared.Utility;
  8. namespace Content.Client.UserInterface.Systems.Crafting;
  9. [UsedImplicitly]
  10. public sealed class CraftingUIController : UIController, IOnStateChanged<GameplayState>
  11. {
  12. private ConstructionMenuPresenter? _presenter;
  13. private MenuButton? CraftingButton => UIManager.GetActiveUIWidgetOrNull<MenuBar.Widgets.GameTopMenuBar>()?.CraftingButton;
  14. public void OnStateEntered(GameplayState state)
  15. {
  16. DebugTools.Assert(_presenter == null);
  17. _presenter = new ConstructionMenuPresenter();
  18. }
  19. public void OnStateExited(GameplayState state)
  20. {
  21. if (_presenter == null)
  22. return;
  23. UnloadButton(_presenter);
  24. _presenter.Dispose();
  25. _presenter = null;
  26. }
  27. internal void UnloadButton(ConstructionMenuPresenter? presenter = null)
  28. {
  29. if (CraftingButton == null)
  30. {
  31. return;
  32. }
  33. if (presenter == null)
  34. {
  35. presenter ??= _presenter;
  36. if (presenter == null)
  37. {
  38. return;
  39. }
  40. }
  41. CraftingButton.Pressed = false;
  42. CraftingButton.OnToggled -= presenter.OnHudCraftingButtonToggled;
  43. }
  44. public void LoadButton()
  45. {
  46. if (CraftingButton == null)
  47. {
  48. return;
  49. }
  50. CraftingButton.OnToggled += ButtonToggled;
  51. }
  52. private void ButtonToggled(BaseButton.ButtonToggledEventArgs obj)
  53. {
  54. _presenter?.OnHudCraftingButtonToggled(obj);
  55. }
  56. }