XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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;}
}