namespace XFEEDToolBox.Core.Galaxy; /// Publishes the latest camera during continuous input and once more when input ends. 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;} }