// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define("exports ../../core/libs/gl-matrix-2/factories/vec2f64 ../../chunks/vec32 ../../core/libs/gl-matrix-2/factories/vec3f64 ../3d/state/utils/navigationUtils ./FilteredFiniteDifference ./FilteredValue ./Momentum".split(" "),function(k,r,g,h,n,l,p,t){class q extends t.Momentum{constructor(a,b,d,c,e,f=0,m){super(a,b,d);this._angularVelocity1=c;this.axis1=e;this.angularVelocity2=f;this.axis2=m}value1(a){return super.valueFromInitialVelocity(this._angularVelocity1,a)}value2(a){return super.valueFromInitialVelocity(this.angularVelocity2, a)}}class u{constructor(a=300,b=12,d=.84){this._minimumInitialVelocity=a;this._stopVelocity=b;this._friction=d;this.enabled=!0;this._tmpAxis1=h.create();this._tmpAxis2=h.create();this._tmpAngles=r.create();this._time=new l.FilteredFiniteDifference(.3);this._screen=[new l.FilteredFiniteDifference(.4),new l.FilteredFiniteDifference(.4)];this._angle1=new p.FilteredValue(.6);this._angle2=new p.FilteredValue(.6);this._axis1=h.create();this._axis2=h.create();this._lastScene=h.create()}addMomentumDirectRotation(a, b,d,c,e,f){if(this.enabled){if(this._time.hasLastValue()){if(.01>this._time.computeDelta(d))return;c=n.rotationAngleAndAxisDirectRotation(this._lastScene,b,this._tmpAxis2,c,e,f);this._angle2.update(0);1E-5>g.squaredLength(this._tmpAxis2)?c=0:g.normalize(this._axis1,this._tmpAxis2);this._angle1.update(c);g.copy(this._lastScene,b)}this._screen[0].update(a[0]);this._screen[1].update(a[1]);this._time.update(d)}}addMomentumPreserveHeading(a,b,d,c,e,f,m){if(this.enabled){if(this._time.hasLastValue()){if(.01> this._time.computeDelta(d))return;n.rotationAnglesAndAxesHeadingPreserving(this._lastScene,b,this._tmpAxis2,this._tmpAxis1,this._tmpAngles,c,e,f,m,!1);1E-5>g.squaredLength(this._tmpAxis2)?(this._angle1.update(0),this._angle2.update(0)):(this._angle1.update(this._tmpAngles[1]),this._angle2.update(this._tmpAngles[0]),g.normalize(this._axis1,this._tmpAxis1),g.normalize(this._axis2,this._tmpAxis2));g.copy(this._lastScene,b)}this._screen[0].update(a[0]);this._screen[1].update(a[1]);this._time.update(d)}}reset(){this._screen[0].reset(); this._screen[1].reset();this._angle1.reset();this._angle2.reset();this._time.reset()}evaluateMomentum(){if(!this.enabled||!this._screen[0].hasFilteredDelta())return null;var a=this._screen[0].filteredDelta,b=this._screen[1].filteredDelta;a=null==a||null==b?null:Math.sqrt(a*a+b*b);b=this._time.filteredDelta;a=null==a||null==b?0:a/b;return Math.abs(a)