1
0

SolutionStatusControl.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Content.Client.Chemistry.Components;
  2. using Content.Client.Chemistry.EntitySystems;
  3. using Content.Client.Items.UI;
  4. using Content.Client.Message;
  5. using Content.Client.Stylesheets;
  6. using Content.Shared.Chemistry.Components;
  7. using Content.Shared.Chemistry.EntitySystems;
  8. using Content.Shared.FixedPoint;
  9. using Robust.Client.UserInterface.Controls;
  10. namespace Content.Client.Chemistry.UI;
  11. /// <summary>
  12. /// Displays basic solution information for <see cref="SolutionItemStatusComponent"/>.
  13. /// </summary>
  14. /// <seealso cref="SolutionItemStatusSystem"/>
  15. public sealed class SolutionStatusControl : PollingItemStatusControl<SolutionStatusControl.Data>
  16. {
  17. private readonly Entity<SolutionItemStatusComponent> _parent;
  18. private readonly IEntityManager _entityManager;
  19. private readonly SharedSolutionContainerSystem _solutionContainers;
  20. private readonly RichTextLabel _label;
  21. public SolutionStatusControl(
  22. Entity<SolutionItemStatusComponent> parent,
  23. IEntityManager entityManager,
  24. SharedSolutionContainerSystem solutionContainers)
  25. {
  26. _parent = parent;
  27. _entityManager = entityManager;
  28. _solutionContainers = solutionContainers;
  29. _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } };
  30. AddChild(_label);
  31. }
  32. protected override Data PollData()
  33. {
  34. if (!_solutionContainers.TryGetSolution(_parent.Owner, _parent.Comp.Solution, out _, out var solution))
  35. return default;
  36. FixedPoint2? transferAmount = null;
  37. if (_entityManager.TryGetComponent(_parent.Owner, out SolutionTransferComponent? transfer))
  38. transferAmount = transfer.TransferAmount;
  39. return new Data(solution.Volume, solution.MaxVolume, transferAmount);
  40. }
  41. protected override void Update(in Data data)
  42. {
  43. var markup = Loc.GetString("solution-status-volume",
  44. ("currentVolume", data.Volume),
  45. ("maxVolume", data.MaxVolume));
  46. if (data.TransferVolume is { } transferVolume)
  47. markup += "\n" + Loc.GetString("solution-status-transfer", ("volume", transferVolume));
  48. _label.SetMarkup(markup);
  49. }
  50. public readonly record struct Data(FixedPoint2 Volume, FixedPoint2 MaxVolume, FixedPoint2? TransferVolume);
  51. }