namespace XFEEDToolBox.Core.Galaxy;
/// <summary>Publishes the latest camera during continuous input and once more when input ends.</summary>
public sealed class GalaxyViewportThrottle
{
public const double IntervalMilliseconds=200;
private double lastPublished=double.NegativeInfinity;
public bool Pending {get;private set;}
public void Changed()=>Pending=true;
public double Delay(double milliseconds)=>double.IsFinite(milliseconds)?Math.Max(0,IntervalMilliseconds-(milliseconds-lastPublished)):IntervalMilliseconds;
public bool TryPublish(double milliseconds,bool force=false)
{
if(!Pending||!double.IsFinite(milliseconds)||!force&&Delay(milliseconds)>0)return false;
Pending=false;lastPublished=milliseconds;return true;
}
public void Reset(){Pending=false;lastPublished=double.NegativeInfinity;}
}
namespace XFEEDToolBox.Core.Galaxy;
/// <summary>Publishes the latest camera during continuous input and once more when input ends.</summary>
public sealed class GalaxyViewportThrottle
{
public const double IntervalMilliseconds=200;
private double lastPublished=double.NegativeInfinity;
public bool Pending {get;private set;}
public void Changed()=>Pending=true;
public double Delay(double milliseconds)=>double.IsFinite(milliseconds)?Math.Max(0,IntervalMilliseconds-(milliseconds-lastPublished)):IntervalMilliseconds;
public bool TryPublish(double milliseconds,bool force=false)
{
if(!Pending||!double.IsFinite(milliseconds)||!force&&Delay(milliseconds)>0)return false;
Pending=false;lastPublished=milliseconds;return true;
}
public void Reset(){Pending=false;lastPublished=double.NegativeInfinity;}
}