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);
}