1
0

PollingItemStatusControl.cs 819 B

12345678910111213141516171819202122232425262728
  1. using Robust.Client.UserInterface;
  2. using Robust.Shared.Timing;
  3. namespace Content.Client.Items.UI;
  4. /// <summary>
  5. /// A base for item status controls that poll data every frame. Avoids UI updates if data didn't change.
  6. /// </summary>
  7. /// <typeparam name="TData">The full status control data that is polled every frame.</typeparam>
  8. public abstract class PollingItemStatusControl<TData> : Control where TData : struct, IEquatable<TData>
  9. {
  10. private TData _lastData;
  11. protected override void FrameUpdate(FrameEventArgs args)
  12. {
  13. base.FrameUpdate(args);
  14. var newData = PollData();
  15. if (newData.Equals(_lastData))
  16. return;
  17. _lastData = newData;
  18. Update(newData);
  19. }
  20. protected abstract TData PollData();
  21. protected abstract void Update(in TData data);
  22. }