namespace XFEEDToolBox.Core.Galaxy; /// Separates a deliberate star hold from camera dragging, using a monotonic clock. 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-startedpending=false; public double Progress(double milliseconds)=>pending&&double.IsFinite(milliseconds)?Math.Clamp((milliseconds-started)/HoldMilliseconds,0,1):0; }