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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFEEDToolBox.Core.Galaxy;

/// <summary>Separates a deliberate star hold from camera dragging, using a monotonic clock.</summary>
public sealed class StarHoldGesture
{
    public const double HoldMilliseconds=600,MovementTolerance=6;
    private double x,y,started;
    private bool pending;
    public void Begin(double atX,double atY,double milliseconds,bool canChoose)
    {
        x=atX;y=atY;started=milliseconds;
        pending=canChoose&&double.IsFinite(x)&&double.IsFinite(y)&&double.IsFinite(started);
    }
    public void Move(double atX,double atY)
    {
        if(!double.IsFinite(atX)||!double.IsFinite(atY)||Math.Pow(atX-x,2)+Math.Pow(atY-y,2)>MovementTolerance*MovementTolerance)pending=false;
    }
    public bool TryConfirm(double milliseconds)
    {
        if(!pending||!double.IsFinite(milliseconds)||milliseconds-started<HoldMilliseconds)return false;
        pending=false;return true;
    }
    public void Cancel()=>pending=false;
    public double Progress(double milliseconds)=>pending&&double.IsFinite(milliseconds)?Math.Clamp((milliseconds-started)/HoldMilliseconds,0,1):0;
}