iwmlib/lib/3rdparty/pixi-ease.js

610 lines
27 KiB
JavaScript
Raw Normal View History

2022-11-08 11:11:39 +01:00
!(function (t, e) {
'object' == typeof exports && 'undefined' != typeof module
? e(exports)
: 'function' == typeof define && define.amd
? define(['exports'], e)
: e(((t = t || self).Ease = {}))
})(this, function (t) {
'use strict'
var e =
'undefined' != typeof globalThis
? globalThis
: 'undefined' != typeof window
? window
: 'undefined' != typeof global
? global
: 'undefined' != typeof self
? self
: {}
function s(t, e) {
return t((e = { exports: {} }), e.exports), e.exports
}
var n = s(function (t, s) {
;(function () {
var e
;(function (e) {
t.exports = e
})(
(e = {
linear: function (t, e, s, n) {
return (s * t) / n + e
},
easeInQuad: function (t, e, s, n) {
return s * (t /= n) * t + e
},
easeOutQuad: function (t, e, s, n) {
return -s * (t /= n) * (t - 2) + e
},
easeInOutQuad: function (t, e, s, n) {
return (t /= n / 2) < 1 ? (s / 2) * t * t + e : (-s / 2) * (--t * (t - 2) - 1) + e
},
easeInCubic: function (t, e, s, n) {
return s * (t /= n) * t * t + e
},
easeOutCubic: function (t, e, s, n) {
return s * ((t = t / n - 1) * t * t + 1) + e
},
easeInOutCubic: function (t, e, s, n) {
return (t /= n / 2) < 1 ? (s / 2) * t * t * t + e : (s / 2) * ((t -= 2) * t * t + 2) + e
},
easeInQuart: function (t, e, s, n) {
return s * (t /= n) * t * t * t + e
},
easeOutQuart: function (t, e, s, n) {
return -s * ((t = t / n - 1) * t * t * t - 1) + e
},
easeInOutQuart: function (t, e, s, n) {
return (t /= n / 2) < 1
? (s / 2) * t * t * t * t + e
: (-s / 2) * ((t -= 2) * t * t * t - 2) + e
},
easeInQuint: function (t, e, s, n) {
return s * (t /= n) * t * t * t * t + e
},
easeOutQuint: function (t, e, s, n) {
return s * ((t = t / n - 1) * t * t * t * t + 1) + e
},
easeInOutQuint: function (t, e, s, n) {
return (t /= n / 2) < 1
? (s / 2) * t * t * t * t * t + e
: (s / 2) * ((t -= 2) * t * t * t * t + 2) + e
},
easeInSine: function (t, e, s, n) {
return -s * Math.cos((t / n) * (Math.PI / 2)) + s + e
},
easeOutSine: function (t, e, s, n) {
return s * Math.sin((t / n) * (Math.PI / 2)) + e
},
easeInOutSine: function (t, e, s, n) {
return (-s / 2) * (Math.cos((Math.PI * t) / n) - 1) + e
},
easeInExpo: function (t, e, s, n) {
return 0 === t ? e : s * Math.pow(2, 10 * (t / n - 1)) + e
},
easeOutExpo: function (t, e, s, n) {
return t === n ? e + s : s * (1 - Math.pow(2, (-10 * t) / n)) + e
},
easeInOutExpo: function (t, e, s, n) {
return (t /= n / 2) < 1
? (s / 2) * Math.pow(2, 10 * (t - 1)) + e
: (s / 2) * (2 - Math.pow(2, -10 * --t)) + e
},
easeInCirc: function (t, e, s, n) {
return -s * (Math.sqrt(1 - (t /= n) * t) - 1) + e
},
easeOutCirc: function (t, e, s, n) {
return s * Math.sqrt(1 - (t = t / n - 1) * t) + e
},
easeInOutCirc: function (t, e, s, n) {
return (t /= n / 2) < 1
? (-s / 2) * (Math.sqrt(1 - t * t) - 1) + e
: (s / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + e
},
easeInElastic: function (t, e, s, n) {
var i, a, o
return (
(o = 1.70158),
0 === t || (t /= n),
(a = 0) || (a = 0.3 * n),
(i = s) < Math.abs(s)
? ((i = s), (o = a / 4))
: (o = (a / (2 * Math.PI)) * Math.asin(s / i)),
-i * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * n - o) * (2 * Math.PI)) / a) + e
)
},
easeOutElastic: function (t, e, s, n) {
var i, a, o
return (
(o = 1.70158),
0 === t || (t /= n),
(a = 0) || (a = 0.3 * n),
(i = s) < Math.abs(s)
? ((i = s), (o = a / 4))
: (o = (a / (2 * Math.PI)) * Math.asin(s / i)),
i * Math.pow(2, -10 * t) * Math.sin(((t * n - o) * (2 * Math.PI)) / a) + s + e
)
},
easeInOutElastic: function (t, e, s, n) {
var i, a, o
return (
(o = 1.70158),
0 === t || (t /= n / 2),
(a = 0) || (a = n * (0.3 * 1.5)),
(i = s) < Math.abs(s)
? ((i = s), (o = a / 4))
: (o = (a / (2 * Math.PI)) * Math.asin(s / i)),
t < 1
? i *
Math.pow(2, 10 * (t -= 1)) *
Math.sin(((t * n - o) * (2 * Math.PI)) / a) *
-0.5 +
e
: i *
Math.pow(2, -10 * (t -= 1)) *
Math.sin(((t * n - o) * (2 * Math.PI)) / a) *
0.5 +
s +
e
)
},
easeInBack: function (t, e, s, n, i) {
return void 0 === i && (i = 1.70158), s * (t /= n) * t * ((i + 1) * t - i) + e
},
easeOutBack: function (t, e, s, n, i) {
return void 0 === i && (i = 1.70158), s * ((t = t / n - 1) * t * ((i + 1) * t + i) + 1) + e
},
easeInOutBack: function (t, e, s, n, i) {
return (
void 0 === i && (i = 1.70158),
(t /= n / 2) < 1
? (s / 2) * (t * t * ((1 + (i *= 1.525)) * t - i)) + e
: (s / 2) * ((t -= 2) * t * ((1 + (i *= 1.525)) * t + i) + 2) + e
)
},
easeInBounce: function (t, s, n, i) {
return n - e.easeOutBounce(i - t, 0, n, i) + s
},
easeOutBounce: function (t, e, s, n) {
return (t /= n) < 1 / 2.75
? s * (7.5625 * t * t) + e
: t < 2 / 2.75
? s * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + e
: t < 2.5 / 2.75
? s * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + e
: s * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + e
},
easeInOutBounce: function (t, s, n, i) {
return t < i / 2
? 0.5 * e.easeInBounce(2 * t, 0, n, i) + s
: 0.5 * e.easeOutBounce(2 * t - i, 0, n, i) + 0.5 * n + s
},
})
)
}.call(e))
}),
i = s(function (t) {
var e = Object.prototype.hasOwnProperty,
s = '~'
function n() {}
function i(t, e, s) {
;(this.fn = t), (this.context = e), (this.once = s || !1)
}
function a(t, e, n, a, o) {
if ('function' != typeof n) throw new TypeError('The listener must be a function')
var r = new i(n, a || t, o),
h = s ? s + e : e
return (
t._events[h]
? t._events[h].fn
? (t._events[h] = [t._events[h], r])
: t._events[h].push(r)
: ((t._events[h] = r), t._eventsCount++),
t
)
}
function o(t, e) {
0 == --t._eventsCount ? (t._events = new n()) : delete t._events[e]
}
function r() {
;(this._events = new n()), (this._eventsCount = 0)
}
Object.create && ((n.prototype = Object.create(null)), new n().__proto__ || (s = !1)),
(r.prototype.eventNames = function () {
var t,
n,
i = []
if (0 === this._eventsCount) return i
for (n in (t = this._events)) e.call(t, n) && i.push(s ? n.slice(1) : n)
return Object.getOwnPropertySymbols ? i.concat(Object.getOwnPropertySymbols(t)) : i
}),
(r.prototype.listeners = function (t) {
var e = s ? s + t : t,
n = this._events[e]
if (!n) return []
if (n.fn) return [n.fn]
for (var i = 0, a = n.length, o = new Array(a); i < a; i++) o[i] = n[i].fn
return o
}),
(r.prototype.listenerCount = function (t) {
var e = s ? s + t : t,
n = this._events[e]
return n ? (n.fn ? 1 : n.length) : 0
}),
(r.prototype.emit = function (t, e, n, i, a, o) {
var r = s ? s + t : t
if (!this._events[r]) return !1
var h,
u,
c = this._events[r],
l = arguments.length
if (c.fn) {
switch ((c.once && this.removeListener(t, c.fn, void 0, !0), l)) {
case 1:
return c.fn.call(c.context), !0
case 2:
return c.fn.call(c.context, e), !0
case 3:
return c.fn.call(c.context, e, n), !0
case 4:
return c.fn.call(c.context, e, n, i), !0
case 5:
return c.fn.call(c.context, e, n, i, a), !0
case 6:
return c.fn.call(c.context, e, n, i, a, o), !0
2019-05-14 13:56:05 +02:00
}
2022-11-08 11:11:39 +01:00
for (u = 1, h = new Array(l - 1); u < l; u++) h[u - 1] = arguments[u]
c.fn.apply(c.context, h)
2019-05-14 13:56:05 +02:00
} else {
2022-11-08 11:11:39 +01:00
var p,
f = c.length
for (u = 0; u < f; u++)
switch ((c[u].once && this.removeListener(t, c[u].fn, void 0, !0), l)) {
case 1:
c[u].fn.call(c[u].context)
break
case 2:
c[u].fn.call(c[u].context, e)
break
case 3:
c[u].fn.call(c[u].context, e, n)
break
case 4:
c[u].fn.call(c[u].context, e, n, i)
break
default:
if (!h) for (p = 1, h = new Array(l - 1); p < l; p++) h[p - 1] = arguments[p]
c[u].fn.apply(c[u].context, h)
2019-05-14 13:56:05 +02:00
}
}
2022-11-08 11:11:39 +01:00
return !0
}),
(r.prototype.on = function (t, e, s) {
return a(this, t, e, s, !1)
}),
(r.prototype.once = function (t, e, s) {
return a(this, t, e, s, !0)
}),
(r.prototype.removeListener = function (t, e, n, i) {
var a = s ? s + t : t
if (!this._events[a]) return this
if (!e) return o(this, a), this
var r = this._events[a]
if (r.fn) r.fn !== e || (i && !r.once) || (n && r.context !== n) || o(this, a)
else {
for (var h = 0, u = [], c = r.length; h < c; h++)
(r[h].fn !== e || (i && !r[h].once) || (n && r[h].context !== n)) && u.push(r[h])
u.length ? (this._events[a] = 1 === u.length ? u[0] : u) : o(this, a)
2019-05-14 13:56:05 +02:00
}
2022-11-08 11:11:39 +01:00
return this
}),
(r.prototype.removeAllListeners = function (t) {
var e
return (
t
? ((e = s ? s + t : t), this._events[e] && o(this, e))
: ((this._events = new n()), (this._eventsCount = 0)),
this
)
}),
(r.prototype.off = r.prototype.removeListener),
(r.prototype.addListener = r.prototype.on),
(r.prefixed = s),
(r.EventEmitter = r),
(t.exports = r)
})
class a extends i {
constructor(t, e, s) {
super(),
(this.elements = Array.isArray(t) ? t : [t]),
(this.eases = []),
(this.options = s || {}),
(this.time = 0)
for (let t in e) for (let s of this.elements) this.addParam(s, t, e[t])
}
addParam(t, e, s) {
let n,
i,
o,
r,
h = e
switch (e) {
case 'scaleX':
case 'skewX':
;(i = s),
(o = s - (n = t[(h = e.substr(0, e.length - 1))].x)),
(r = (t) => this.updateCoord(t, h, 'x'))
break
case 'scaleY':
case 'skewY':
;(i = s),
(o = s - (n = t[(h = e.substr(0, e.length - 1))].y)),
(r = (t) => this.updateCoord(t, h, 'y'))
break
case 'tint':
case 'blend':
const u = Array.isArray(s) ? s : [t.tint, s]
;(n = 0),
(o = i = u.length),
(r = 'tint' === e ? (t) => this.updateTint(t, u) : (t) => this.updateBlend(t, u))
break
case 'shake':
;(n = { x: t.x, y: t.y }), (i = s), (r = (t) => this.updateShake(t))
break
case 'position':
;(n = { x: t.x, y: t.y }),
(o = { x: (i = { x: s.x, y: s.y }).x - n.x, y: i.y - n.y }),
(r = (t) => this.updatePosition(t))
break
case 'skew':
case 'scale':
;(i = s), (o = s - (n = t[e].x)), (r = (t) => this.updatePoint(t, e))
break
case 'face':
;(n = t.rotation),
(o = (i = a.shortestAngle(n, Math.atan2(s.y - t.y, s.x - t.x))) - n),
(r = (t) => this.updateOne(t, 'rotation'))
break
default:
;(i = s), (o = s - (n = t[e])), (r = (t) => this.updateOne(t, e))
}
this.eases.push({ element: t, entry: e, update: r, start: n, to: i, delta: o })
}
static shortestAngle(t, e) {
const s = 2 * Math.PI
let n = Math.abs(t - e) % s
var i
return (n = n > Math.PI ? s - n : n) * (((((e - t + Math.PI) % (i = s)) + i) % i) - Math.PI > 0 ? 1 : -1)
}
remove(t, e) {
if (0 === arguments.length) this.eases = []
else {
'string' == typeof e && (e = [e])
for (let s = 0; s < this.eases.length; s++) {
const n = this.eases[s]
;(t && n.element !== t) || (e && -1 === e.indexOf(n.entry)) || (this.eases.splice(s, 1), s--)
2019-05-14 13:56:05 +02:00
}
}
2022-11-08 11:11:39 +01:00
if (0 === this.eases.length) return !0
}
updateOne(t, e) {
t.element[e] = this.options.ease(this.time, t.start, t.delta, this.options.duration)
}
updatePoint(t, e) {
t.element[e].x = t.element[e].y = this.options.ease(this.time, t.start, t.delta, this.options.duration)
}
updatePosition(t) {
;(t.element.x = this.options.ease(this.time, t.start.x, t.delta.x, this.options.duration)),
(t.element.y = this.options.ease(this.time, t.start.y, t.delta.y, this.options.duration))
}
updateCoord(t, e, s) {
t.element[e][s] = this.options.ease(this.time, t.start, t.delta, this.options.duration)
}
updateTint(t, e) {
let s = Math.floor(this.options.ease(this.time, t.start, t.delta, this.options.duration))
s === e.length && (s = e.length - 1), (t.element.tint = e[s])
}
updateBlend(t, e) {
const s = this.options.ease(this.time, t.start, t.delta, this.options.duration)
let n = Math.floor(s)
n === e.length && (n = e.length - 1)
let i = n + 1
i === e.length && (i = this.options.reverse ? n - 1 : this.options.repeat ? 0 : n)
const a = s - n,
o = e[n],
r = e[i],
h = 1 - a,
u = h * (o >> 16) + a * (r >> 16),
c = h * ((o >> 8) & 255) + a * ((r >> 8) & 255),
l = h * (255 & o) + a * (255 & r)
t.element.tint = (u << 16) | (c << 8) | l
}
updateShake(t) {
function e(t) {
return Math.floor(Math.random() * t) - Math.floor(t / 2)
}
;(t.element.x = t.start.x + e(t.to)), (t.element.y = t.start.y + e(t.to))
}
complete(t) {
'shake' === t.entry && ((t.element.x = t.start.x), (t.element.y = t.start.y))
}
reverse(t) {
if ('position' === t.entry) {
const e = t.to.x,
s = t.to.y
;(t.to.x = t.start.x),
(t.to.y = t.start.y),
(t.start.x = e),
(t.start.y = s),
(t.delta.x = -t.delta.x),
(t.delta.y = -t.delta.y)
2019-05-14 13:56:05 +02:00
} else {
2022-11-08 11:11:39 +01:00
const e = t.to
;(t.to = t.start), (t.start = e), (t.delta = -t.delta)
}
}
repeat(t) {
switch (t.entry) {
case 'skewX':
t.element.skew.x = t.start
break
case 'skewY':
t.element.skew.y = t.start
break
case 'skew':
;(t.element.skew.x = t.start), (t.element.skew.y = t.start)
break
case 'scaleX':
t.element.scale.x = t.start
break
case 'scaleY':
t.element.scale.y = t.start
break
case 'scale':
;(t.element.scale.x = t.start), (t.element.scale.y = t.start)
break
case 'position':
;(t.element.x = t.start.x), (t.element.y = t.start.y)
break
default:
t.element[t.entry] = t.start
}
}
update(t) {
if (0 === this.eases.length) return !0
if (this.options.wait) {
if (((this.options.wait -= t), this.options.wait > 0)) return void this.emit('wait', this)
;(t = -this.options.wait), (this.options.wait = 0), this.emit('wait-end', this)
}
this.time += t
let e = 0
this.time >= this.options.duration &&
((e = this.time - this.options.duration), (this.time = this.options.duration))
for (let t = 0; t < this.eases.length; t++) {
const e = this.eases[t]
e.element._destroyed ? (this.eases.splice(t, 1), t--) : e.update(e)
}
if ((this.emit('each', this), this.time >= this.options.duration))
if (this.options.reverse)
this.eases.forEach((t) => this.reverse(t)),
(this.time = e),
e && this.eases.forEach((t) => t.update(t)),
this.emit('reverse', this),
this.options.repeat
? !0 !== this.options.repeat && this.options.repeat--
: (this.options.reverse = !1)
else {
if (!this.options.repeat)
return this.eases.forEach((t) => this.complete(t)), this.emit('complete', this), !0
this.eases.forEach((t) => this.repeat(t)),
(this.time = e),
e && this.eases.forEach((t) => t.update(t)),
!0 !== this.options.repeat && this.options.repeat--,
this.emit('repeat', this)
2019-05-14 13:56:05 +02:00
}
}
2022-11-08 11:11:39 +01:00
get count() {
return this.eases.length
}
}
const o = { duration: 1e3, ease: n.easeInOutSine, maxFrame: 1e3 / 60, ticker: null, useRAF: !0 }
class r extends i {
constructor(t) {
super(),
(this.options = Object.assign({}, o, t)),
(this.easings = []),
(this.empty = !0),
this.options.ticker && this.options.ticker.add(this.update, this)
}
destroy() {
this.removeAll(),
this.options.useTicker
? this.ticker.remove(this.update, this)
: this.options.useRAF && (cancelAnimationFrame(this.handleRAF), (this.handleRAF = null))
}
add(t, e, s) {
;((s = s || {}).duration = void 0 !== s.duration ? s.duration : this.options.duration),
(s.ease = s.ease || this.options.ease),
'string' == typeof s.ease && (s.ease = n[s.ease])
const i = new a(t, e, s)
return (
this.easings.push(i),
this.empty &&
this.options.useRAF &&
((this.handleRAF = requestAnimationFrame(() => this.update())), (this.lastTime = Date.now())),
(this.empty = !1),
i
)
}
target(t, e, s, n) {
const i = Math.sqrt(Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2)) / s
return ((n = n || {}).duration = i), this.add(t, { x: e.x, y: e.y }, n)
}
face(t, e, s, n) {
const i = a.shortestAngle(t.rotation, Math.atan2(e.y - t.y, e.x - t.x)),
o = Math.abs(i - t.rotation) / s
return ((n = n || {}).duration = o), this.add(t, { rotation: i }, n)
}
removeEase(t, e) {
for (let s = 0; s < this.easings.length; s++)
this.easings[s].remove(t, e) && (this.easings.splice(s, 1), s--)
0 === this.easings.length &&
((this.empty = !0),
this.options.useRAF &&
this.handleRAF &&
(cancelAnimationFrame(this.handleRAF), (this.handleRAF = null)))
}
removeAll() {
;(this.easings = []),
(this.empty = !0),
this.options.useRAF && this.handleRAF && (cancelAnimationFrame(this.handleRAF), (this.handleRAF = null))
}
update(t) {
if (this.options.useTicker) t = this.ticker.elapsedMS
else if (this.options.useRAF) {
const e = Date.now()
;(t = e - this.lastTime), (this.lastTime = e)
}
if (((t = Math.min(t, this.options.maxFrame)), !this.empty)) {
const e = this.easings.slice(0)
for (let s of e) s.update(t) && this.easings.splice(this.easings.indexOf(s), 1)
this.emit('each', this), 0 === this.easings.length && ((this.empty = !0), this.emit('complete', this))
}
this.options.useRAF && this.easings.length
? (this.handleRAF = requestAnimationFrame(() => this.update()))
: (this.handleRAF = null)
}
get count() {
return this.easings.length
}
countRunning() {
let t = 0
for (let e of this.easings) t += e.count
return t
}
set duration(t) {
this.options.duration = t
}
get duration() {
return this.options.duration
}
set ease(t) {
this.options.ease = t
}
get ease() {
return this.options.ease
}
}
r.id = 0
let h = new r()
r.ease = h
;(t.Ease = r),
(t.List = class {
constructor() {
console.warn('Ease.List was deprecated. Use new Ease() instead.')
}
}),
(t.ease = h),
Object.defineProperty(t, '__esModule', { value: !0 })
})
//# sourceMappingURL=ease.js.map