// tween.js r5 - http://github.com/sole/tween.js var TWEEN = TWEEN || function() { var a, e, c = 60, b = false, h = []; return { setFPS : function(f) { c = f || 60 }, start : function(f) { arguments.length != 0 && this.setFPS(f); e = setInterval(this.update, 1E3 / c) }, stop : function() { clearInterval(e) }, setAutostart : function(f) { (b = f) && !e && this.start() }, add : function(f) { h.push(f); b && !e && this.start() }, getAll : function() { return h }, removeAll : function() { h = [] }, remove : function(f) { a = h.indexOf(f); a !== -1 && h.splice(a, 1) }, update : function(f) { a = 0; num_tweens = h.length; for (f = f || Date.now(); a < num_tweens;) if (h[a].update(f)) a++; else { h.splice(a, 1); num_tweens-- } num_tweens == 0 && b == true && this.stop() } } }(); TWEEN.Tween = function(a) { var e = {}, c = {}, b = {}, h = 1E3, f = 0, j = null, n = TWEEN.Easing.Linear.EaseNone, k = null, l = null, m = null; this.to = function(d, g) { if (g !== null) h = g; for ( var i in d) if (a[i] !== null) b[i] = d[i]; return this }; this.start = function(d) { TWEEN.add(this); j = d ? d + f : Date.now() + f; for ( var g in b) if (a[g] !== null) { e[g] = a[g]; c[g] = b[g] - a[g] } return this }; this.stop = function() { TWEEN.remove(this); return this }; this.delay = function(d) { f = d; return this }; this.easing = function(d) { n = d; return this }; this.chain = function(d) { k = d }; this.onUpdate = function(d) { l = d; return this }; this.onComplete = function(d) { m = function() { var $this=this; setTimeout(function() { d.call($this); },0); } return this }; this.update = function(d) { var g, i; if (d < j) return true; d = (d - j) / h; d = d > 1 ? 1 : d; i = n(d); for (g in c) a[g] = e[g] + c[g] * i; l !== null && l.call(a, i); if (d == 1) { m !== null && m.call(a); k !== null && k.start(); return false } return true } }; TWEEN.Easing = { Linear : {}, Quadratic : {}, Cubic : {}, Quartic : {}, Quintic : {}, Sinusoidal : {}, Exponential : {}, Circular : {}, Elastic : {}, Back : {}, Bounce : {} }; TWEEN.Easing.Linear.EaseNone = function(a) { return a }; TWEEN.Easing.Quadratic.EaseIn = function(a) { return a * a }; TWEEN.Easing.Quadratic.EaseOut = function(a) { return -a * (a - 2) }; TWEEN.Easing.Quadratic.EaseInOut = function(a) { if ((a *= 2) < 1) return 0.5 * a * a; return -0.5 * (--a * (a - 2) - 1) }; TWEEN.Easing.Cubic.EaseIn = function(a) { return a * a * a }; TWEEN.Easing.Cubic.EaseOut = function(a) { return --a * a * a + 1 }; TWEEN.Easing.Cubic.EaseInOut = function(a) { if ((a *= 2) < 1) return 0.5 * a * a * a; return 0.5 * ((a -= 2) * a * a + 2) }; TWEEN.Easing.Quartic.EaseIn = function(a) { return a * a * a * a }; TWEEN.Easing.Quartic.EaseOut = function(a) { return -(--a * a * a * a - 1) }; TWEEN.Easing.Quartic.EaseInOut = function(a) { if ((a *= 2) < 1) return 0.5 * a * a * a * a; return -0.5 * ((a -= 2) * a * a * a - 2) }; TWEEN.Easing.Quintic.EaseIn = function(a) { return a * a * a * a * a }; TWEEN.Easing.Quintic.EaseOut = function(a) { return (a -= 1) * a * a * a * a + 1 }; TWEEN.Easing.Quintic.EaseInOut = function(a) { if ((a *= 2) < 1) return 0.5 * a * a * a * a * a; return 0.5 * ((a -= 2) * a * a * a * a + 2) }; TWEEN.Easing.Sinusoidal.EaseIn = function(a) { return -Math.cos(a * Math.PI / 2) + 1 }; TWEEN.Easing.Sinusoidal.EaseOut = function(a) { return Math.sin(a * Math.PI / 2) }; TWEEN.Easing.Sinusoidal.EaseInOut = function(a) { return -0.5 * (Math.cos(Math.PI * a) - 1) }; TWEEN.Easing.Exponential.EaseIn = function(a) { return a == 0 ? 0 : Math.pow(2, 10 * (a - 1)) }; TWEEN.Easing.Exponential.EaseOut = function(a) { return a == 1 ? 1 : -Math.pow(2, -10 * a) + 1 }; TWEEN.Easing.Exponential.EaseInOut = function(a) { if (a == 0) return 0; if (a == 1) return 1; if ((a *= 2) < 1) return 0.5 * Math.pow(2, 10 * (a - 1)); return 0.5 * (-Math.pow(2, -10 * (a - 1)) + 2) }; TWEEN.Easing.Circular.EaseIn = function(a) { return -(Math.sqrt(1 - a * a) - 1) }; TWEEN.Easing.Circular.EaseOut = function(a) { return Math.sqrt(1 - --a * a) }; TWEEN.Easing.Circular.EaseInOut = function(a) { if ((a /= 0.5) < 1) return -0.5 * (Math.sqrt(1 - a * a) - 1); return 0.5 * (Math.sqrt(1 - (a -= 2) * a) + 1) }; TWEEN.Easing.Elastic.EaseIn = function(a) { var e, c = 0.1, b = 0.4; if (a == 0) return 0; if (a == 1) return 1; b || (b = 0.3); if (!c || c < 1) { c = 1; e = b / 4 } else e = b / (2 * Math.PI) * Math.asin(1 / c); return -(c * Math.pow(2, 10 * (a -= 1)) * Math.sin((a - e) * 2 * Math.PI / b)) }; TWEEN.Easing.Elastic.EaseOut = function(a) { var e, c = 0.1, b = 0.4; if (a == 0) return 0; if (a == 1) return 1; b || (b = 0.3); if (!c || c < 1) { c = 1; e = b / 4 } else e = b / (2 * Math.PI) * Math.asin(1 / c); return c * Math.pow(2, -10 * a) * Math.sin((a - e) * 2 * Math.PI / b) + 1 }; TWEEN.Easing.Elastic.EaseInOut = function(a) { var e, c = 0.1, b = 0.4; if (a == 0) return 0; if (a == 1) return 1; b || (b = 0.3); if (!c || c < 1) { c = 1; e = b / 4 } else e = b / (2 * Math.PI) * Math.asin(1 / c); if ((a *= 2) < 1) return -0.5 * c * Math.pow(2, 10 * (a -= 1)) * Math.sin((a - e) * 2 * Math.PI / b); return c * Math.pow(2, -10 * (a -= 1)) * Math.sin((a - e) * 2 * Math.PI / b) * 0.5 + 1 }; TWEEN.Easing.Back.EaseIn = function(a) { return a * a * (2.70158 * a - 1.70158) }; TWEEN.Easing.Back.EaseOut = function(a) { return (a -= 1) * a * (2.70158 * a + 1.70158) + 1 }; TWEEN.Easing.Back.EaseInOut = function(a) { if ((a *= 2) < 1) return 0.5 * a * a * (3.5949095 * a - 2.5949095); return 0.5 * ((a -= 2) * a * (3.5949095 * a + 2.5949095) + 2) }; TWEEN.Easing.Bounce.EaseIn = function(a) { return 1 - TWEEN.Easing.Bounce.EaseOut(1 - a) }; TWEEN.Easing.Bounce.EaseOut = function(a) { return (a /= 1) < 1 / 2.75 ? 7.5625 * a * a : a < 2 / 2.75 ? 7.5625 * (a -= 1.5 / 2.75) * a + 0.75 : a < 2.5 / 2.75 ? 7.5625 * (a -= 2.25 / 2.75) * a + 0.9375 : 7.5625 * (a -= 2.625 / 2.75) * a + 0.984375 }; TWEEN.Easing.Bounce.EaseInOut = function(a) { if (a < 0.5) return TWEEN.Easing.Bounce.EaseIn(a * 2) * 0.5; return TWEEN.Easing.Bounce.EaseOut(a * 2 - 1) * 0.5 + 0.5 };