var TWEEN = TWEEN || (function() { var d, b, a, h, g = 60, f = false, e = [], c; return { setFPS: function(i) { g = i || 60; }, start: function(i) { if(arguments.length != 0) { this.setFPS(i); } a = setInterval(this.update, 1000 / g); }, stop: function() { clearInterval(a); }, setAutostart: function(i) { f = i; if(f && !a) { this.start(); } }, add: function(i) { e.push(i); if(f && !a) { this.start(); } }, getAll: function() { return e; }, removeAll: function() { e = []; }, remove: function(i) { d = e.indexOf(i); if(d !== -1) { e.splice(d, 1); } }, update: function(i) { d = 0; c = e.length; var j = i || new Date().getTime(); while(d < c) { if(e[d].update(j)) { d++; } else { e.splice(d, 1); c--; } } if(c == 0 && f == true) { this.stop(); } } }; })(); TWEEN.Tween = function(d) { var k = d, j = {}, g = {}, h = {}, e = 1000, i = 0, a = null, l = TWEEN.Easing.Linear.EaseNone, c = null, f = null, b = null; this.to = function(m, o) { if(o !== null) { e = o; } for(var n in m) { if(k[n] === null) { continue; } h[n] = m[n]; } return this; }; this.start = function(m) { TWEEN.add(this); a = m ? m + i : new Date().getTime() + i; for(var n in h) { if(k[n] === null) { continue; } j[n] = k[n]; g[n] = h[n] - k[n]; } return this; }; this.stop = function() { TWEEN.remove(this); return this; }; this.delay = function(m) { i = m; return this; }; this.easing = function(m) { l = m; return this; }; this.chain = function(m) { c = m; return this; }; this.onUpdate = function(m) { f = m; return this; }; this.onComplete = function(m) { b = m; return this; }; this.update = function(p) { var o, m, n; if(p < a) { return true; } m = (p - a) / e; m = m > 1 ? 1 : m; n = l(m); for(o in g) { k[o] = j[o] + g[o] * n; } if(f !== null) { f.call(k, n); } if(m == 1) { if(b !== null) { b.call(k); } if(c !== null) { c.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 = 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(c) { var d, b = 0.1, e = 0.4; if(c == 0) { return 0; } if(c == 1) { return 1; } if(!e) { e = 0.3; } if(!b || b < 1) { b = 1; d = e / 4; } else { d = e / (2 * Math.PI) * Math.asin(1 / b); } return -(b * Math.pow(2, 10 * (c -= 1)) * Math.sin((c - d) * (2 * Math.PI) / e)); }; TWEEN.Easing.Elastic.EaseOut = function(c) { var d, b = 0.1, e = 0.4; if(c == 0) { return 0; } if(c == 1) { return 1; } if(!e) { e = 0.3; } if(!b || b < 1) { b = 1; d = e / 4; } else { d = e / (2 * Math.PI) * Math.asin(1 / b); } return(b * Math.pow(2, -10 * c) * Math.sin((c - d) * (2 * Math.PI) / e) + 1); }; TWEEN.Easing.Elastic.EaseInOut = function(c) { var d, b = 0.1, e = 0.4; if(c == 0) { return 0; } if(c == 1) { return 1; } if(!e) { e = 0.3; } if(!b || b < 1) { b = 1; d = e / 4; } else { d = e / (2 * Math.PI) * Math.asin(1 / b); } if((c *= 2) < 1) { return -0.5 * (b * Math.pow(2, 10 * (c -= 1)) * Math.sin((c - d) * (2 * Math.PI) / e)); } return b * Math.pow(2, -10 * (c -= 1)) * Math.sin((c - d) * (2 * Math.PI) / e) * 0.5 + 1; }; TWEEN.Easing.Back.EaseIn = function(a) { var b = 1.70158; return a * a * ((b + 1) * a - b); }; TWEEN.Easing.Back.EaseOut = function(a) { var b = 1.70158; return(a = a - 1) * a * ((b + 1) * a + b) + 1; }; TWEEN.Easing.Back.EaseInOut = function(a) { var b = 1.70158 * 1.525; if((a *= 2) < 1) { return 0.5 * (a * a * ((b + 1) * a - b)); } return 0.5 * ((a -= 2) * a * ((b + 1) * a + b) + 2); }; TWEEN.Easing.Bounce.EaseIn = function(a) { return 1 - TWEEN.Easing.Bounce.EaseOut(1 - a); }; TWEEN.Easing.Bounce.EaseOut = function(a) { if((a /= 1) < (1 / 2.75)) { return 7.5625 * a * a; } else { if(a < (2 / 2.75)) { return 7.5625 * (a -= (1.5 / 2.75)) * a + 0.75; } else { if(a < (2.5 / 2.75)) { return 7.5625 * (a -= (2.25 / 2.75)) * a + 0.9375; } else { return 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; };