export function Friction (e) {
|
this._drag = e
|
this._dragLog = Math.log(e)
|
this._x = 0
|
this._v = 0
|
this._startTime = 0
|
}
|
|
Friction.prototype.set = function (e, t) {
|
this._x = e
|
this._v = t
|
this._startTime = (new Date()).getTime()
|
}
|
Friction.prototype.setVelocityByEnd = function (e) {
|
this._v = (e - this._x) * this._dragLog / (Math.pow(this._drag, 100) - 1)
|
}
|
Friction.prototype.x = function (e) {
|
if (e === undefined) {
|
e = ((new Date()).getTime() - this._startTime) / 1e3
|
}
|
var t
|
t = e === this._dt && this._powDragDt ? this._powDragDt : this._powDragDt = Math.pow(this._drag, e)
|
this._dt = e
|
return this._x + this._v * t / this._dragLog - this._v / this._dragLog
|
}
|
Friction.prototype.dx = function (e) {
|
if (e === undefined) {
|
e = ((new Date()).getTime() - this._startTime) / 1e3
|
}
|
var t
|
t = e === this._dt && this._powDragDt ? this._powDragDt : this._powDragDt = Math.pow(this._drag, e)
|
this._dt = e
|
return this._v * t
|
}
|
Friction.prototype.done = function () {
|
return Math.abs(this.dx()) < 3
|
}
|
Friction.prototype.reconfigure = function (e) {
|
var t = this.x()
|
var n = this.dx()
|
this._drag = e
|
this._dragLog = Math.log(e)
|
this.set(t, n)
|
}
|
Friction.prototype.configuration = function () {
|
var e = this
|
return [{
|
label: 'Friction',
|
read: function () {
|
return e._drag
|
},
|
write: function (t) {
|
e.reconfigure(t)
|
},
|
min: 0.001,
|
max: 0.1,
|
step: 0.001
|
}]
|
}
|