using Robust.Client.UserInterface; using Robust.Shared.Timing; namespace Content.Client.Items.UI; /// /// A base for item status controls that poll data every frame. Avoids UI updates if data didn't change. /// /// The full status control data that is polled every frame. public abstract class PollingItemStatusControl : Control where TData : struct, IEquatable { private TData _lastData; protected override void FrameUpdate(FrameEventArgs args) { base.FrameUpdate(args); var newData = PollData(); if (newData.Equals(_lastData)) return; _lastData = newData; Update(newData); } protected abstract TData PollData(); protected abstract void Update(in TData data); }