!(function (t, e) { "function" == typeof define && define.amd ? define(e) : "object" == typeof exports ? (module.exports = e()) : (t.Phaser = e()); })(this, function () { function t() { return (e.Matrix = "undefined" != typeof Float32Array ? Float32Array : Array), e.Matrix; } var keyPressedCurrently = false; var e = e || {}, i = i || { VERSION: "1.1.4", DEV_VERSION: "1.1.4", GAMES: [], AUTO: 0, CANVAS: 1, WEBGL: 2, HEADLESS: 3, SPRITE: 0, BUTTON: 1, BULLET: 2, GRAPHICS: 3, TEXT: 4, TILESPRITE: 5, BITMAPTEXT: 6, GROUP: 7, RENDERTEXTURE: 8, TILEMAP: 9, TILEMAPLAYER: 10, EMITTER: 11, POLYGON: 12, BITMAPDATA: 13, CANVAS_FILTER: 14, WEBGL_FILTER: 15, NONE: 0, LEFT: 1, RIGHT: 2, UP: 3, DOWN: 4, CANVAS_PX_ROUND: !1, CANVAS_CLEAR_RECT: !0, }; (e.InteractionManager = function () {}), (i.Utils = { shuffle: function (t) { for (var e = t.length - 1; e > 0; e--) { var i = Math.floor(Math.random() * (e + 1)), s = t[e]; (t[e] = t[i]), (t[i] = s); } return t; }, pad: function (t, e, i, s) { if ("undefined" == typeof e) var e = 0; if ("undefined" == typeof i) var i = " "; if ("undefined" == typeof s) var s = 3; var n = 0; if (e + 1 >= t.length) switch (s) { case 1: t = Array(e + 1 - t.length).join(i) + t; break; case 3: var r = Math.ceil((n = e - t.length) / 2), o = n - r; t = Array(o + 1).join(i) + t + Array(r + 1).join(i); break; default: t += Array(e + 1 - t.length).join(i); } return t; }, isPlainObject: function (t) { if ("object" != typeof t || t.nodeType || t === t.window) return !1; try { if (t.constructor && !hasOwn.call(t.constructor.prototype, "isPrototypeOf")) return !1; } catch (e) { return !1; } return !0; }, extend: function () { var t, e, s, n, r, o, a = arguments[0] || {}, h = 1, l = arguments.length, c = !1; for ("boolean" == typeof a && ((c = a), (a = arguments[1] || {}), (h = 2)), l === h && ((a = this), --h); l > h; h++) if (null != (t = arguments[h])) for (e in t) (s = a[e]), (n = t[e]), a !== n && (c && n && (i.Utils.isPlainObject(n) || (r = Array.isArray(n))) ? (r ? ((r = !1), (o = s && Array.isArray(s) ? s : [])) : (o = s && i.Utils.isPlainObject(s) ? s : {}), (a[e] = i.Utils.extend(c, o, n))) : void 0 !== n && (a[e] = n)); return a; }, }), (e.hex2rgb = function (t) { return [((t >> 16) & 255) / 255, ((t >> 8) & 255) / 255, (255 & t) / 255]; }), "function" != typeof Function.prototype.bind && (Function.prototype.bind = (function () { var t = Array.prototype.slice; return function (e) { function i() { var r = n.concat(t.call(arguments)); s.apply(this instanceof i ? this : e, r); } var s = this, n = t.call(arguments, 1); if ("function" != typeof s) throw new TypeError(); return ( (i.prototype = (function r(t) { return t && (r.prototype = t), this instanceof r ? void 0 : new r(); })(s.prototype)), i ); }; })()), Array.isArray || (Array.isArray = function (t) { return "[object Array]" == Object.prototype.toString.call(t); }), t(), (e.mat3 = {}), (e.mat3.create = function () { var t = new e.Matrix(9); return (t[0] = 1), (t[1] = 0), (t[2] = 0), (t[3] = 0), (t[4] = 1), (t[5] = 0), (t[6] = 0), (t[7] = 0), (t[8] = 1), t; }), (e.mat3.identity = function (t) { return (t[0] = 1), (t[1] = 0), (t[2] = 0), (t[3] = 0), (t[4] = 1), (t[5] = 0), (t[6] = 0), (t[7] = 0), (t[8] = 1), t; }), (e.mat4 = {}), (e.mat4.create = function () { var t = new e.Matrix(16); return (t[0] = 1), (t[1] = 0), (t[2] = 0), (t[3] = 0), (t[4] = 0), (t[5] = 1), (t[6] = 0), (t[7] = 0), (t[8] = 0), (t[9] = 0), (t[10] = 1), (t[11] = 0), (t[12] = 0), (t[13] = 0), (t[14] = 0), (t[15] = 1), t; }), (e.mat3.multiply = function (t, e, i) { i || (i = t); var s = t[0], n = t[1], r = t[2], o = t[3], a = t[4], h = t[5], l = t[6], c = t[7], u = t[8], d = e[0], p = e[1], f = e[2], g = e[3], m = e[4], y = e[5], _ = e[6], x = e[7], v = e[8]; return ( (i[0] = d * s + p * o + f * l), (i[1] = d * n + p * a + f * c), (i[2] = d * r + p * h + f * u), (i[3] = g * s + m * o + y * l), (i[4] = g * n + m * a + y * c), (i[5] = g * r + m * h + y * u), (i[6] = _ * s + x * o + v * l), (i[7] = _ * n + x * a + v * c), (i[8] = _ * r + x * h + v * u), i ); }), (e.mat3.clone = function (t) { var i = new e.Matrix(9); return (i[0] = t[0]), (i[1] = t[1]), (i[2] = t[2]), (i[3] = t[3]), (i[4] = t[4]), (i[5] = t[5]), (i[6] = t[6]), (i[7] = t[7]), (i[8] = t[8]), i; }), (e.mat3.transpose = function (t, e) { if (!e || t === e) { var i = t[1], s = t[2], n = t[5]; return (t[1] = t[3]), (t[2] = t[6]), (t[3] = i), (t[5] = t[7]), (t[6] = s), (t[7] = n), t; } return (e[0] = t[0]), (e[1] = t[3]), (e[2] = t[6]), (e[3] = t[1]), (e[4] = t[4]), (e[5] = t[7]), (e[6] = t[2]), (e[7] = t[5]), (e[8] = t[8]), e; }), (e.mat3.toMat4 = function (t, i) { return ( i || (i = e.mat4.create()), (i[15] = 1), (i[14] = 0), (i[13] = 0), (i[12] = 0), (i[11] = 0), (i[10] = t[8]), (i[9] = t[7]), (i[8] = t[6]), (i[7] = 0), (i[6] = t[5]), (i[5] = t[4]), (i[4] = t[3]), (i[3] = 0), (i[2] = t[2]), (i[1] = t[1]), (i[0] = t[0]), i ); }), (e.mat4.create = function () { var t = new e.Matrix(16); return (t[0] = 1), (t[1] = 0), (t[2] = 0), (t[3] = 0), (t[4] = 0), (t[5] = 1), (t[6] = 0), (t[7] = 0), (t[8] = 0), (t[9] = 0), (t[10] = 1), (t[11] = 0), (t[12] = 0), (t[13] = 0), (t[14] = 0), (t[15] = 1), t; }), (e.mat4.transpose = function (t, e) { if (!e || t === e) { var i = t[1], s = t[2], n = t[3], r = t[6], o = t[7], a = t[11]; return (t[1] = t[4]), (t[2] = t[8]), (t[3] = t[12]), (t[4] = i), (t[6] = t[9]), (t[7] = t[13]), (t[8] = s), (t[9] = r), (t[11] = t[14]), (t[12] = n), (t[13] = o), (t[14] = a), t; } return ( (e[0] = t[0]), (e[1] = t[4]), (e[2] = t[8]), (e[3] = t[12]), (e[4] = t[1]), (e[5] = t[5]), (e[6] = t[9]), (e[7] = t[13]), (e[8] = t[2]), (e[9] = t[6]), (e[10] = t[10]), (e[11] = t[14]), (e[12] = t[3]), (e[13] = t[7]), (e[14] = t[11]), (e[15] = t[15]), e ); }), (e.mat4.multiply = function (t, e, i) { i || (i = t); var s = t[0], n = t[1], r = t[2], o = t[3], a = t[4], h = t[5], l = t[6], c = t[7], u = t[8], d = t[9], p = t[10], f = t[11], g = t[12], m = t[13], y = t[14], _ = t[15], x = e[0], v = e[1], b = e[2], w = e[3]; return ( (i[0] = x * s + v * a + b * u + w * g), (i[1] = x * n + v * h + b * d + w * m), (i[2] = x * r + v * l + b * p + w * y), (i[3] = x * o + v * c + b * f + w * _), (x = e[4]), (v = e[5]), (b = e[6]), (w = e[7]), (i[4] = x * s + v * a + b * u + w * g), (i[5] = x * n + v * h + b * d + w * m), (i[6] = x * r + v * l + b * p + w * y), (i[7] = x * o + v * c + b * f + w * _), (x = e[8]), (v = e[9]), (b = e[10]), (w = e[11]), (i[8] = x * s + v * a + b * u + w * g), (i[9] = x * n + v * h + b * d + w * m), (i[10] = x * r + v * l + b * p + w * y), (i[11] = x * o + v * c + b * f + w * _), (x = e[12]), (v = e[13]), (b = e[14]), (w = e[15]), (i[12] = x * s + v * a + b * u + w * g), (i[13] = x * n + v * h + b * d + w * m), (i[14] = x * r + v * l + b * p + w * y), (i[15] = x * o + v * c + b * f + w * _), i ); }), (e.Point = function (t, e) { (this.x = t || 0), (this.y = e || 0); }), (e.Point.prototype.clone = function () { return new e.Point(this.x, this.y); }), (e.Point.prototype.constructor = e.Point), (e.Rectangle = function (t, e, i, s) { (this.x = t || 0), (this.y = e || 0), (this.width = i || 0), (this.height = s || 0); }), (e.Rectangle.prototype.clone = function () { return new e.Rectangle(this.x, this.y, this.width, this.height); }), (e.Rectangle.prototype.contains = function (t, e) { if (this.width <= 0 || this.height <= 0) return !1; var i = this.x; if (t >= i && t <= i + this.width) { var s = this.y; if (e >= s && e <= s + this.height) return !0; } return !1; }), (e.Rectangle.prototype.constructor = e.Rectangle), (e.Polygon = function (t) { if ((t instanceof Array || (t = Array.prototype.slice.call(arguments)), "number" == typeof t[0])) { for (var i = [], s = 0, n = t.length; n > s; s += 2) i.push(new e.Point(t[s], t[s + 1])); t = i; } this.points = t; }), (e.Polygon.prototype.clone = function () { for (var t = [], i = 0; i < this.points.length; i++) t.push(this.points[i].clone()); return new e.Polygon(t); }), (e.Polygon.prototype.contains = function (t, e) { for (var i = !1, s = 0, n = this.points.length - 1; s < this.points.length; n = s++) { var r = this.points[s].x, o = this.points[s].y, a = this.points[n].x, h = this.points[n].y, l = o > e != h > e && ((a - r) * (e - o)) / (h - o) + r > t; l && (i = !i); } return i; }), (e.Polygon.prototype.constructor = e.Polygon), (e.DisplayObject = function () { (this.last = this), (this.first = this), (this.position = new e.Point()), (this.scale = new e.Point(1, 1)), (this.pivot = new e.Point(0, 0)), (this.rotation = 0), (this.alpha = 1), (this.visible = !0), (this.hitArea = null), (this.buttonMode = !1), (this.renderable = !1), (this.parent = null), (this.stage = null), (this.worldAlpha = 1), (this._interactive = !1), (this.defaultCursor = "pointer"), (this.worldTransform = e.mat3.create()), (this.localTransform = e.mat3.create()), (this.color = []), (this.dynamic = !0), (this._sr = 0), (this._cr = 1), (this.filterArea = new e.Rectangle(0, 0, 1, 1)); }), (e.DisplayObject.prototype.constructor = e.DisplayObject), (e.DisplayObject.prototype.setInteractive = function (t) { this.interactive = t; }), Object.defineProperty(e.DisplayObject.prototype, "interactive", { get: function () { return this._interactive; }, set: function (t) { (this._interactive = t), this.stage && (this.stage.dirty = !0); }, }), Object.defineProperty(e.DisplayObject.prototype, "mask", { get: function () { return this._mask; }, set: function (t) { t ? (this._mask ? ((t.start = this._mask.start), (t.end = this._mask.end)) : (this.addFilter(t), (t.renderable = !1))) : (this.removeFilter(this._mask), (this._mask.renderable = !0)), (this._mask = t); }, }), Object.defineProperty(e.DisplayObject.prototype, "filters", { get: function () { return this._filters; }, set: function (t) { if (t) { this._filters && this.removeFilter(this._filters), this.addFilter(t); for (var e = [], i = 0; i < t.length; i++) for (var s = t[i].passes, n = 0; n < s.length; n++) e.push(s[n]); t.start.filterPasses = e; } else this._filters && this.removeFilter(this._filters); this._filters = t; }, }), (e.DisplayObject.prototype.addFilter = function (t) { var i = new e.FilterBlock(), s = new e.FilterBlock(); (t.start = i), (t.end = s), (i.data = t), (s.data = t), (i.first = i.last = this), (s.first = s.last = this), (i.open = !0), (i.target = this); var n, r, o = i, a = i; (r = this.first._iPrev), r ? ((n = r._iNext), (o._iPrev = r), (r._iNext = o)) : (n = this), n && ((n._iPrev = a), (a._iNext = n)), (o = s), (a = s), (n = null), (r = null), (r = this.last), (n = r._iNext), n && ((n._iPrev = a), (a._iNext = n)), (o._iPrev = r), (r._iNext = o); for (var h = this, l = this.last; h; ) h.last === l && (h.last = s), (h = h.parent); (this.first = i), this.__renderGroup && this.__renderGroup.addFilterBlocks(i, s); }), (e.DisplayObject.prototype.removeFilter = function (t) { var e = t.start, i = e._iNext, s = e._iPrev; i && (i._iPrev = s), s && (s._iNext = i), (this.first = e._iNext); var n = t.end; (i = n._iNext), (s = n._iPrev), i && (i._iPrev = s), (s._iNext = i); for (var r = n._iPrev, o = this; o.last === n && ((o.last = r), (o = o.parent)); ); this.__renderGroup && this.__renderGroup.removeFilterBlocks(e, n); }), (e.DisplayObject.prototype.updateTransform = function () { this.rotation !== this.rotationCache && ((this.rotationCache = this.rotation), (this._sr = Math.sin(this.rotation)), (this._cr = Math.cos(this.rotation))); var t = this.localTransform, i = this.parent.worldTransform, s = this.worldTransform; (t[0] = this._cr * this.scale.x), (t[1] = -this._sr * this.scale.y), (t[3] = this._sr * this.scale.x), (t[4] = this._cr * this.scale.y); var n = this.pivot.x, r = this.pivot.y, o = t[0], a = t[1], h = this.position.x - t[0] * n - r * t[1], l = t[3], c = t[4], u = this.position.y - t[4] * r - n * t[3], d = i[0], p = i[1], f = i[2], g = i[3], m = i[4], y = i[5]; (t[2] = h), (t[5] = u), (s[0] = d * o + p * l), (s[1] = d * a + p * c), (s[2] = d * h + p * u + f), (s[3] = g * o + m * l), (s[4] = g * a + m * c), (s[5] = g * h + m * u + y), (this.worldAlpha = this.alpha * this.parent.worldAlpha), (this.vcount = e.visibleCount); }), (e.visibleCount = 0), (e.DisplayObjectContainer = function () { e.DisplayObject.call(this), (this.children = []); }), (e.DisplayObjectContainer.prototype = Object.create(e.DisplayObject.prototype)), (e.DisplayObjectContainer.prototype.constructor = e.DisplayObjectContainer), (e.DisplayObjectContainer.prototype.addChild = function (t) { if ((t.parent && t.parent !== this && t.parent.removeChild(t), (t.parent = this), this.children.push(t), this.stage)) { var e = t; do e.interactive && (this.stage.dirty = !0), (e.stage = this.stage), (e = e._iNext); while (e); } var i, s, n = t.first, r = t.last; (s = this._filters || this._mask ? this.last._iPrev : this.last), (i = s._iNext); for (var o = this, a = s; o; ) o.last === a && (o.last = t.last), (o = o.parent); i && ((i._iPrev = r), (r._iNext = i)), (n._iPrev = s), (s._iNext = n), this.__renderGroup && (t.__renderGroup && t.__renderGroup.removeDisplayObjectAndChildren(t), this.__renderGroup.addDisplayObjectAndChildren(t)); }), (e.DisplayObjectContainer.prototype.addChildAt = function (t, e) { if (!(e >= 0 && e <= this.children.length)) throw new Error(t + " The index " + e + " supplied is out of bounds " + this.children.length); if ((void 0 !== t.parent && t.parent.removeChild(t), (t.parent = this), this.stage)) { var i = t; do i.interactive && (this.stage.dirty = !0), (i.stage = this.stage), (i = i._iNext); while (i); } var s, n, r = t.first, o = t.last; if (e === this.children.length) { n = this.last; for (var a = this, h = this.last; a; ) a.last === h && (a.last = t.last), (a = a.parent); } else n = 0 === e ? this : this.children[e - 1].last; (s = n._iNext), s && ((s._iPrev = o), (o._iNext = s)), (r._iPrev = n), (n._iNext = r), this.children.splice(e, 0, t), this.__renderGroup && (t.__renderGroup && t.__renderGroup.removeDisplayObjectAndChildren(t), this.__renderGroup.addDisplayObjectAndChildren(t)); }), (e.DisplayObjectContainer.prototype.swapChildren = function (t, e) { if (t !== e) { var i = this.children.indexOf(t), s = this.children.indexOf(e); if (0 > i || 0 > s) throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller."); this.removeChild(t), this.removeChild(e), s > i ? (this.addChildAt(e, i), this.addChildAt(t, s)) : (this.addChildAt(t, s), this.addChildAt(e, i)); } }), (e.DisplayObjectContainer.prototype.getChildAt = function (t) { if (t >= 0 && t < this.children.length) return this.children[t]; throw new Error("Both the supplied DisplayObjects must be a child of the caller " + this); }), (e.DisplayObjectContainer.prototype.removeChild = function (t) { var e = this.children.indexOf(t); if (-1 === e) throw new Error(t + " The supplied DisplayObject must be a child of the caller " + this); var i = t.first, s = t.last, n = s._iNext, r = i._iPrev; if ((n && (n._iPrev = r), (r._iNext = n), this.last === s)) for (var o = i._iPrev, a = this; a.last === s && ((a.last = o), (a = a.parent)); ); if (((s._iNext = null), (i._iPrev = null), this.stage)) { var h = t; do h.interactive && (this.stage.dirty = !0), (h.stage = null), (h = h._iNext); while (h); } t.__renderGroup && t.__renderGroup.removeDisplayObjectAndChildren(t), (t.parent = void 0), this.children.splice(e, 1); }), (e.DisplayObjectContainer.prototype.updateTransform = function () { if (this.visible) { e.DisplayObject.prototype.updateTransform.call(this); for (var t = 0, i = this.children.length; i > t; t++) this.children[t].updateTransform(); } }), (e.blendModes = {}), (e.blendModes.NORMAL = 0), (e.blendModes.SCREEN = 1), (e.Sprite = function (t) { e.DisplayObjectContainer.call(this), (this.anchor = new e.Point()), (this.texture = t), (this.blendMode = e.blendModes.NORMAL), (this._width = 0), (this._height = 0), t.baseTexture.hasLoaded ? (this.updateFrame = !0) : ((this.onTextureUpdateBind = this.onTextureUpdate.bind(this)), this.texture.addEventListener("update", this.onTextureUpdateBind)), (this.renderable = !0); }), (e.Sprite.prototype = Object.create(e.DisplayObjectContainer.prototype)), (e.Sprite.prototype.constructor = e.Sprite), Object.defineProperty(e.Sprite.prototype, "width", { get: function () { return this.scale.x * this.texture.frame.width; }, set: function (t) { (this.scale.x = t / this.texture.frame.width), (this._width = t); }, }), Object.defineProperty(e.Sprite.prototype, "height", { get: function () { return this.scale.y * this.texture.frame.height; }, set: function (t) { (this.scale.y = t / this.texture.frame.height), (this._height = t); }, }), (e.Sprite.prototype.setTexture = function (t) { this.texture.baseTexture !== t.baseTexture ? ((this.textureChange = !0), (this.texture = t), this.__renderGroup && this.__renderGroup.updateTexture(this)) : (this.texture = t), (this.updateFrame = !0); }), (e.Sprite.prototype.onTextureUpdate = function () { this._width && (this.scale.x = this._width / this.texture.frame.width), this._height && (this.scale.y = this._height / this.texture.frame.height), (this.updateFrame = !0); }), (e.Sprite.fromFrame = function (t) { var i = e.TextureCache[t]; if (!i) throw new Error('The frameId "' + t + '" does not exist in the texture cache' + this); return new e.Sprite(i); }), (e.Sprite.fromImage = function (t) { var i = e.Texture.fromImage(t); return new e.Sprite(i); }), (e.Stage = function (t) { e.DisplayObjectContainer.call(this), (this.worldTransform = e.mat3.create()), (this.interactive = !0), (this.interactionManager = new e.InteractionManager(this)), (this.dirty = !0), (this.__childrenAdded = []), (this.__childrenRemoved = []), (this.stage = this), (this.stage.hitArea = new e.Rectangle(0, 0, 1e5, 1e5)), this.setBackgroundColor(t), (this.worldVisible = !0); }), (e.Stage.prototype = Object.create(e.DisplayObjectContainer.prototype)), (e.Stage.prototype.constructor = e.Stage), (e.Stage.prototype.setInteractionDelegate = function (t) { this.interactionManager.setTargetDomElement(t); }), (e.Stage.prototype.updateTransform = function () { (this.worldAlpha = 1), (this.vcount = e.visibleCount); for (var t = 0, i = this.children.length; i > t; t++) this.children[t].updateTransform(); this.dirty && ((this.dirty = !1), (this.interactionManager.dirty = !0)), this.interactive && this.interactionManager.update(); }), (e.Stage.prototype.setBackgroundColor = function (t) { (this.backgroundColor = t || 0), (this.backgroundColorSplit = e.hex2rgb(this.backgroundColor)); var i = this.backgroundColor.toString(16); (i = "000000".substr(0, 6 - i.length) + i), (this.backgroundColorString = "#" + i); }), (e.Stage.prototype.getMousePosition = function () { return this.interactionManager.mouse.global; }), (e.CustomRenderable = function () { e.DisplayObject.call(this), (this.renderable = !0); }), (e.CustomRenderable.prototype = Object.create(e.DisplayObject.prototype)), (e.CustomRenderable.prototype.constructor = e.CustomRenderable), (e.CustomRenderable.prototype.renderCanvas = function () {}), (e.CustomRenderable.prototype.initWebGL = function () {}), (e.CustomRenderable.prototype.renderWebGL = function () {}), (e.Strip = function (t, i, s) { e.DisplayObjectContainer.call(this), (this.texture = t), (this.blendMode = e.blendModes.NORMAL); try { (this.uvs = new Float32Array([0, 1, 1, 1, 1, 0, 0, 1])), (this.verticies = new Float32Array([0, 0, 0, 0, 0, 0, 0, 0, 0])), (this.colors = new Float32Array([1, 1, 1, 1])), (this.indices = new Uint16Array([0, 1, 2, 3])); } catch (n) { (this.uvs = [0, 1, 1, 1, 1, 0, 0, 1]), (this.verticies = [0, 0, 0, 0, 0, 0, 0, 0, 0]), (this.colors = [1, 1, 1, 1]), (this.indices = [0, 1, 2, 3]); } (this.width = i), (this.height = s), t.baseTexture.hasLoaded ? ((this.width = this.texture.frame.width), (this.height = this.texture.frame.height), (this.updateFrame = !0)) : ((this.onTextureUpdateBind = this.onTextureUpdate.bind(this)), this.texture.addEventListener("update", this.onTextureUpdateBind)), (this.renderable = !0); }), (e.Strip.prototype = Object.create(e.DisplayObjectContainer.prototype)), (e.Strip.prototype.constructor = e.Strip), (e.Strip.prototype.setTexture = function (t) { (this.texture = t), (this.width = t.frame.width), (this.height = t.frame.height), (this.updateFrame = !0); }), (e.Strip.prototype.onTextureUpdate = function () { this.updateFrame = !0; }), (e.Rope = function (t, i) { e.Strip.call(this, t), (this.points = i); try { (this.verticies = new Float32Array(4 * i.length)), (this.uvs = new Float32Array(4 * i.length)), (this.colors = new Float32Array(2 * i.length)), (this.indices = new Uint16Array(2 * i.length)); } catch (s) { (this.verticies = new Array(4 * i.length)), (this.uvs = new Array(4 * i.length)), (this.colors = new Array(2 * i.length)), (this.indices = new Array(2 * i.length)); } this.refresh(); }), (e.Rope.prototype = Object.create(e.Strip.prototype)), (e.Rope.prototype.constructor = e.Rope), (e.Rope.prototype.refresh = function () { var t = this.points; if (!(t.length < 1)) { var e = this.uvs, i = t[0], s = this.indices, n = this.colors; (this.count -= 0.2), (e[0] = 0), (e[1] = 1), (e[2] = 0), (e[3] = 1), (n[0] = 1), (n[1] = 1), (s[0] = 0), (s[1] = 1); for (var r, o, a, h = t.length, l = 1; h > l; l++) (r = t[l]), (o = 4 * l), (a = l / (h - 1)), l % 2 ? ((e[o] = a), (e[o + 1] = 0), (e[o + 2] = a), (e[o + 3] = 1)) : ((e[o] = a), (e[o + 1] = 0), (e[o + 2] = a), (e[o + 3] = 1)), (o = 2 * l), (n[o] = 1), (n[o + 1] = 1), (o = 2 * l), (s[o] = o), (s[o + 1] = o + 1), (i = r); } }), (e.Rope.prototype.updateTransform = function () { var t = this.points; if (!(t.length < 1)) { var i, s = t[0], n = { x: 0, y: 0 }; this.count -= 0.2; var r = this.verticies; (r[0] = s.x + n.x), (r[1] = s.y + n.y), (r[2] = s.x - n.x), (r[3] = s.y - n.y); for (var o, a, h, l, c, u = t.length, d = 1; u > d; d++) (o = t[d]), (a = 4 * d), (i = d < t.length - 1 ? t[d + 1] : o), (n.y = -(i.x - s.x)), (n.x = i.y - s.y), (h = 10 * (1 - d / (u - 1))), h > 1 && (h = 1), (l = Math.sqrt(n.x * n.x + n.y * n.y)), (c = this.texture.height / 2), (n.x /= l), (n.y /= l), (n.x *= c), (n.y *= c), (r[a] = o.x + n.x), (r[a + 1] = o.y + n.y), (r[a + 2] = o.x - n.x), (r[a + 3] = o.y - n.y), (s = o); e.DisplayObjectContainer.prototype.updateTransform.call(this); } }), (e.Rope.prototype.setTexture = function (t) { (this.texture = t), (this.updateFrame = !0); }), (e.TilingSprite = function (t, i, s) { e.DisplayObjectContainer.call(this), (this.texture = t), (this.width = i), (this.height = s), (this.tileScale = new e.Point(1, 1)), (this.tilePosition = new e.Point(0, 0)), (this.renderable = !0), (this.blendMode = e.blendModes.NORMAL); }), (e.TilingSprite.prototype = Object.create(e.DisplayObjectContainer.prototype)), (e.TilingSprite.prototype.constructor = e.TilingSprite), (e.TilingSprite.prototype.setTexture = function (t) { (this.texture = t), (this.updateFrame = !0); }), (e.TilingSprite.prototype.onTextureUpdate = function () { this.updateFrame = !0; }), (e.AbstractFilter = function (t, e) { (this.passes = [this]), (this.dirty = !0), (this.padding = 0), (this.uniforms = e || {}), (this.fragmentSrc = t || []); }), (e.FilterBlock = function () { (this.visible = !0), (this.renderable = !0); }), (e.Graphics = function () { e.DisplayObjectContainer.call(this), (this.renderable = !0), (this.fillAlpha = 1), (this.lineWidth = 0), (this.lineColor = "black"), (this.graphicsData = []), (this.currentPath = { points: [] }); }), (e.Graphics.prototype = Object.create(e.DisplayObjectContainer.prototype)), (e.Graphics.prototype.constructor = e.Graphics), (e.Graphics.prototype.lineStyle = function (t, i, s) { this.currentPath.points.length || this.graphicsData.pop(), (this.lineWidth = t || 0), (this.lineColor = i || 0), (this.lineAlpha = arguments.length < 3 ? 1 : s), (this.currentPath = { lineWidth: this.lineWidth, lineColor: this.lineColor, lineAlpha: this.lineAlpha, fillColor: this.fillColor, fillAlpha: this.fillAlpha, fill: this.filling, points: [], type: e.Graphics.POLY }), this.graphicsData.push(this.currentPath); }), (e.Graphics.prototype.moveTo = function (t, i) { this.currentPath.points.length || this.graphicsData.pop(), (this.currentPath = this.currentPath = { lineWidth: this.lineWidth, lineColor: this.lineColor, lineAlpha: this.lineAlpha, fillColor: this.fillColor, fillAlpha: this.fillAlpha, fill: this.filling, points: [], type: e.Graphics.POLY, }), this.currentPath.points.push(t, i), this.graphicsData.push(this.currentPath); }), (e.Graphics.prototype.lineTo = function (t, e) { this.currentPath.points.push(t, e), (this.dirty = !0); }), (e.Graphics.prototype.beginFill = function (t, e) { (this.filling = !0), (this.fillColor = t || 0), (this.fillAlpha = arguments.length < 2 ? 1 : e); }), (e.Graphics.prototype.endFill = function () { (this.filling = !1), (this.fillColor = null), (this.fillAlpha = 1); }), (e.Graphics.prototype.drawRect = function (t, i, s, n) { this.currentPath.points.length || this.graphicsData.pop(), (this.currentPath = { lineWidth: this.lineWidth, lineColor: this.lineColor, lineAlpha: this.lineAlpha, fillColor: this.fillColor, fillAlpha: this.fillAlpha, fill: this.filling, points: [t, i, s, n], type: e.Graphics.RECT }), this.graphicsData.push(this.currentPath), (this.dirty = !0); }), (e.Graphics.prototype.drawCircle = function (t, i, s) { this.currentPath.points.length || this.graphicsData.pop(), (this.currentPath = { lineWidth: this.lineWidth, lineColor: this.lineColor, lineAlpha: this.lineAlpha, fillColor: this.fillColor, fillAlpha: this.fillAlpha, fill: this.filling, points: [t, i, s, s], type: e.Graphics.CIRC }), this.graphicsData.push(this.currentPath), (this.dirty = !0); }), (e.Graphics.prototype.drawEllipse = function (t, i, s, n) { this.currentPath.points.length || this.graphicsData.pop(), (this.currentPath = { lineWidth: this.lineWidth, lineColor: this.lineColor, lineAlpha: this.lineAlpha, fillColor: this.fillColor, fillAlpha: this.fillAlpha, fill: this.filling, points: [t, i, s, n], type: e.Graphics.ELIP }), this.graphicsData.push(this.currentPath), (this.dirty = !0); }), (e.Graphics.prototype.clear = function () { (this.lineWidth = 0), (this.filling = !1), (this.dirty = !0), (this.clearDirty = !0), (this.graphicsData = []), (this.bounds = null); }), (e.Graphics.prototype.updateFilterBounds = function () { if (!this.bounds) { for (var t, i, s, n = 1 / 0, r = -1 / 0, o = 1 / 0, a = -1 / 0, h = 0; h < this.graphicsData.length; h++) { var l = this.graphicsData[h], c = l.type, u = l.lineWidth; if (((t = l.points), c === e.Graphics.RECT)) { (i = t.x - u / 2), (s = t.y - u / 2); var d = t.width + u, p = t.height + u; (n = n > i ? i : n), (r = i + d > r ? i + d : r), (o = o > s ? i : o), (a = s + p > a ? s + p : a); } else if (c === e.Graphics.CIRC || c === e.Graphics.ELIP) { (i = t.x), (s = t.y); var f = t.radius + u / 2; (n = n > i - f ? i - f : n), (r = i + f > r ? i + f : r), (o = o > s - f ? s - f : o), (a = s + f > a ? s + f : a); } else for (var g = 0; g < t.length; g += 2) (i = t[g]), (s = t[g + 1]), (n = n > i - u ? i - u : n), (r = i + u > r ? i + u : r), (o = o > s - u ? s - u : o), (a = s + u > a ? s + u : a); } this.bounds = new e.Rectangle(n, o, r - n, a - o); } }), (e.Graphics.POLY = 0), (e.Graphics.RECT = 1), (e.Graphics.CIRC = 2), (e.Graphics.ELIP = 3), (e.CanvasGraphics = function () {}), (e.CanvasGraphics.renderGraphics = function (t, i) { for (var s = t.worldAlpha, n = "", r = 0; r < t.graphicsData.length; r++) { var o = t.graphicsData[r], a = o.points; if (((i.strokeStyle = n = "#" + ("00000" + (0 | o.lineColor).toString(16)).substr(-6)), (i.lineWidth = o.lineWidth), o.type === e.Graphics.POLY)) { i.beginPath(), i.moveTo(a[0], a[1]); for (var h = 1; h < a.length / 2; h++) i.lineTo(a[2 * h], a[2 * h + 1]); a[0] === a[a.length - 2] && a[1] === a[a.length - 1] && i.closePath(), o.fill && ((i.globalAlpha = o.fillAlpha * s), (i.fillStyle = n = "#" + ("00000" + (0 | o.fillColor).toString(16)).substr(-6)), i.fill()), o.lineWidth && ((i.globalAlpha = o.lineAlpha * s), i.stroke()); } else if (o.type === e.Graphics.RECT) (o.fillColor || 0 === o.fillColor) && ((i.globalAlpha = o.fillAlpha * s), (i.fillStyle = n = "#" + ("00000" + (0 | o.fillColor).toString(16)).substr(-6)), i.fillRect(a[0], a[1], a[2], a[3])), o.lineWidth && ((i.globalAlpha = o.lineAlpha * s), i.strokeRect(a[0], a[1], a[2], a[3])); else if (o.type === e.Graphics.CIRC) i.beginPath(), i.arc(a[0], a[1], a[2], 0, 2 * Math.PI), i.closePath(), o.fill && ((i.globalAlpha = o.fillAlpha * s), (i.fillStyle = n = "#" + ("00000" + (0 | o.fillColor).toString(16)).substr(-6)), i.fill()), o.lineWidth && ((i.globalAlpha = o.lineAlpha * s), i.stroke()); else if (o.type === e.Graphics.ELIP) { var l = o.points, c = 2 * l[2], u = 2 * l[3], d = l[0] - c / 2, p = l[1] - u / 2; i.beginPath(); var f = 0.5522848, g = (c / 2) * f, m = (u / 2) * f, y = d + c, _ = p + u, x = d + c / 2, v = p + u / 2; i.moveTo(d, v), i.bezierCurveTo(d, v - m, x - g, p, x, p), i.bezierCurveTo(x + g, p, y, v - m, y, v), i.bezierCurveTo(y, v + m, x + g, _, x, _), i.bezierCurveTo(x - g, _, d, v + m, d, v), i.closePath(), o.fill && ((i.globalAlpha = o.fillAlpha * s), (i.fillStyle = n = "#" + ("00000" + (0 | o.fillColor).toString(16)).substr(-6)), i.fill()), o.lineWidth && ((i.globalAlpha = o.lineAlpha * s), i.stroke()); } } }), (e.CanvasGraphics.renderGraphicsMask = function (t, i) { var s = t.graphicsData.length; if (0 !== s) { s > 1 && ((s = 1), window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object")); for (var n = 0; 1 > n; n++) { var r = t.graphicsData[n], o = r.points; if (r.type === e.Graphics.POLY) { i.beginPath(), i.moveTo(o[0], o[1]); for (var a = 1; a < o.length / 2; a++) i.lineTo(o[2 * a], o[2 * a + 1]); o[0] === o[o.length - 2] && o[1] === o[o.length - 1] && i.closePath(); } else if (r.type === e.Graphics.RECT) i.beginPath(), i.rect(o[0], o[1], o[2], o[3]), i.closePath(); else if (r.type === e.Graphics.CIRC) i.beginPath(), i.arc(o[0], o[1], o[2], 0, 2 * Math.PI), i.closePath(); else if (r.type === e.Graphics.ELIP) { var h = r.points, l = 2 * h[2], c = 2 * h[3], u = h[0] - l / 2, d = h[1] - c / 2; i.beginPath(); var p = 0.5522848, f = (l / 2) * p, g = (c / 2) * p, m = u + l, y = d + c, _ = u + l / 2, x = d + c / 2; i.moveTo(u, x), i.bezierCurveTo(u, x - g, _ - f, d, _, d), i.bezierCurveTo(_ + f, d, m, x - g, m, x), i.bezierCurveTo(m, x + g, _ + f, y, _, y), i.bezierCurveTo(_ - f, y, u, x + g, u, x), i.closePath(); } } } }), (e.CanvasRenderer = function (t, e, i, s) { (this.transparent = s), (this.width = t || 800), (this.height = e || 600), (this.view = i || document.createElement("canvas")), (this.context = this.view.getContext("2d")), (this.smoothProperty = null), "imageSmoothingEnabled" in this.context ? (this.smoothProperty = "imageSmoothingEnabled") : "webkitImageSmoothingEnabled" in this.context ? (this.smoothProperty = "webkitImageSmoothingEnabled") : "mozImageSmoothingEnabled" in this.context ? (this.smoothProperty = "mozImageSmoothingEnabled") : "oImageSmoothingEnabled" in this.context && (this.smoothProperty = "oImageSmoothingEnabled"), (this.scaleMode = null), (this.refresh = !0), (this.view.width = this.width), (this.view.height = this.height), (this.count = 0); }), (e.CanvasRenderer.prototype.constructor = e.CanvasRenderer), (e.CanvasRenderer.prototype.render = function (t) { (e.texturesToUpdate = []), (e.texturesToDestroy = []), e.visibleCount++, t.updateTransform(), this.view.style.backgroundColor === t.backgroundColorString || this.transparent || (this.view.style.backgroundColor = t.backgroundColorString), this.context.setTransform(1, 0, 0, 1, 0, 0), this.context.clearRect(0, 0, this.width, this.height), this.renderDisplayObject(t), t.interactive && (t._interactiveEventsAdded || ((t._interactiveEventsAdded = !0), t.interactionManager.setTarget(this))), e.Texture.frameUpdates.length > 0 && (e.Texture.frameUpdates = []); }), (e.CanvasRenderer.prototype.resize = function (t, e) { (this.width = t), (this.height = e), (this.view.width = t), (this.view.height = e); }), (e.CanvasRenderer.prototype.renderDisplayObject = function (t) { var i, s = this.context; s.globalCompositeOperation = "source-over"; var n = t.last._iNext; t = t.first; do if (((i = t.worldTransform), t.visible)) if (t.renderable) { if (t instanceof e.Sprite) { var r = t.texture.frame; r && r.width && r.height && t.texture.baseTexture.source && ((s.globalAlpha = t.worldAlpha), s.setTransform(i[0], i[3], i[1], i[4], i[2], i[5]), this.smoothProperty && this.scaleMode !== t.texture.baseTexture.scaleMode && ((this.scaleMode = t.texture.baseTexture.scaleMode), (s[this.smoothProperty] = this.scaleMode === e.BaseTexture.SCALE_MODE.LINEAR)), s.drawImage(t.texture.baseTexture.source, r.x, r.y, r.width, r.height, t.anchor.x * -r.width, t.anchor.y * -r.height, r.width, r.height)); } else if (t instanceof e.Strip) s.setTransform(i[0], i[3], i[1], i[4], i[2], i[5]), this.renderStrip(t); else if (t instanceof e.TilingSprite) s.setTransform(i[0], i[3], i[1], i[4], i[2], i[5]), this.renderTilingSprite(t); else if (t instanceof e.CustomRenderable) s.setTransform(i[0], i[3], i[1], i[4], i[2], i[5]), t.renderCanvas(this); else if (t instanceof e.Graphics) s.setTransform(i[0], i[3], i[1], i[4], i[2], i[5]), e.CanvasGraphics.renderGraphics(t, s); else if (t instanceof e.FilterBlock && t.data instanceof e.Graphics) { var o = t.data; if (t.open) { s.save(); var a = o.alpha, h = o.worldTransform; s.setTransform(h[0], h[3], h[1], h[4], h[2], h[5]), (o.worldAlpha = 0.5), (s.worldAlpha = 0), e.CanvasGraphics.renderGraphicsMask(o, s), s.clip(), (o.worldAlpha = a); } else s.restore(); } t = t._iNext; } else t = t._iNext; else t = t.last._iNext; while (t !== n); }), (e.CanvasRenderer.prototype.renderStripFlat = function (t) { var e = this.context, i = t.verticies, s = i.length / 2; this.count++, e.beginPath(); for (var n = 1; s - 2 > n; n++) { var r = 2 * n, o = i[r], a = i[r + 2], h = i[r + 4], l = i[r + 1], c = i[r + 3], u = i[r + 5]; e.moveTo(o, l), e.lineTo(a, c), e.lineTo(h, u); } (e.fillStyle = "#FF0000"), e.fill(), e.closePath(); }), (e.CanvasRenderer.prototype.renderTilingSprite = function (t) { var e = this.context; (e.globalAlpha = t.worldAlpha), t.__tilePattern || (t.__tilePattern = e.createPattern(t.texture.baseTexture.source, "repeat")), e.beginPath(); var i = t.tilePosition, s = t.tileScale; e.scale(s.x, s.y), e.translate(i.x, i.y), (e.fillStyle = t.__tilePattern), e.fillRect(-i.x, -i.y, t.width / s.x, t.height / s.y), e.scale(1 / s.x, 1 / s.y), e.translate(-i.x, -i.y), e.closePath(); }), (e.CanvasRenderer.prototype.renderStrip = function (t) { var e = this.context, i = t.verticies, s = t.uvs, n = i.length / 2; this.count++; for (var r = 1; n - 2 > r; r++) { var o = 2 * r, a = i[o], h = i[o + 2], l = i[o + 4], c = i[o + 1], u = i[o + 3], d = i[o + 5], p = s[o] * t.texture.width, f = s[o + 2] * t.texture.width, g = s[o + 4] * t.texture.width, m = s[o + 1] * t.texture.height, y = s[o + 3] * t.texture.height, _ = s[o + 5] * t.texture.height; e.save(), e.beginPath(), e.moveTo(a, c), e.lineTo(h, u), e.lineTo(l, d), e.closePath(), e.clip(); var x = p * y + m * g + f * _ - y * g - m * f - p * _, v = a * y + m * l + h * _ - y * l - m * h - a * _, b = p * h + a * g + f * l - h * g - a * f - p * l, w = p * y * l + m * h * g + a * f * _ - a * y * g - m * f * l - p * h * _, T = c * y + m * d + u * _ - y * d - m * u - c * _, S = p * u + c * g + f * d - u * g - c * f - p * d, C = p * y * d + m * u * g + c * f * _ - c * y * g - m * f * d - p * u * _; e.transform(v / x, T / x, b / x, S / x, w / x, C / x), e.drawImage(t.texture.baseTexture.source, 0, 0), e.restore(); } }), (e.PixiShader = function () { (this.program = null), (this.fragmentSrc = [ "precision lowp float;", "varying vec2 vTextureCoord;", "varying float vColor;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor;", "}", ]), (this.textureCount = 0); }), (e.PixiShader.prototype.init = function () { var t = e.compileProgram(this.vertexSrc || e.PixiShader.defaultVertexSrc, this.fragmentSrc), i = e.gl; i.useProgram(t), (this.uSampler = i.getUniformLocation(t, "uSampler")), (this.projectionVector = i.getUniformLocation(t, "projectionVector")), (this.offsetVector = i.getUniformLocation(t, "offsetVector")), (this.dimensions = i.getUniformLocation(t, "dimensions")), (this.aVertexPosition = i.getAttribLocation(t, "aVertexPosition")), (this.colorAttribute = i.getAttribLocation(t, "aColor")), (this.aTextureCoord = i.getAttribLocation(t, "aTextureCoord")); for (var s in this.uniforms) this.uniforms[s].uniformLocation = i.getUniformLocation(t, s); this.initUniforms(), (this.program = t); }), (e.PixiShader.prototype.initUniforms = function () { this.textureCount = 1; var t; for (var i in this.uniforms) { t = this.uniforms[i]; var s = t.type; "sampler2D" === s ? ((t._init = !1), null !== t.value && this.initSampler2D(t)) : "mat2" === s || "mat3" === s || "mat4" === s ? ((t.glMatrix = !0), (t.glValueLength = 1), "mat2" === s ? (t.glFunc = e.gl.uniformMatrix2fv) : "mat3" === s ? (t.glFunc = e.gl.uniformMatrix3fv) : "mat4" === s && (t.glFunc = e.gl.uniformMatrix4fv)) : ((t.glFunc = e.gl["uniform" + s]), (t.glValueLength = "2f" === s || "2i" === s ? 2 : "3f" === s || "3i" === s ? 3 : "4f" === s || "4i" === s ? 4 : 1)); } }), (e.PixiShader.prototype.initSampler2D = function (t) { if (t.value && t.value.baseTexture && t.value.baseTexture.hasLoaded) { if ((e.gl.activeTexture(e.gl["TEXTURE" + this.textureCount]), e.gl.bindTexture(e.gl.TEXTURE_2D, t.value.baseTexture._glTexture), t.textureData)) { var i = t.textureData, s = i.magFilter ? i.magFilter : e.gl.LINEAR, n = i.minFilter ? i.minFilter : e.gl.LINEAR, r = i.wrapS ? i.wrapS : e.gl.CLAMP_TO_EDGE, o = i.wrapT ? i.wrapT : e.gl.CLAMP_TO_EDGE, a = i.luminance ? e.gl.LUMINANCE : e.gl.RGBA; if ((i.repeat && ((r = e.gl.REPEAT), (o = e.gl.REPEAT)), e.gl.pixelStorei(e.gl.UNPACK_FLIP_Y_WEBGL, !1), i.width)) { var h = i.width ? i.width : 512, l = i.height ? i.height : 2, c = i.border ? i.border : 0; e.gl.texImage2D(e.gl.TEXTURE_2D, 0, a, h, l, c, a, e.gl.UNSIGNED_BYTE, null); } else e.gl.texImage2D(e.gl.TEXTURE_2D, 0, a, e.gl.RGBA, e.gl.UNSIGNED_BYTE, t.value.baseTexture.source); e.gl.texParameteri(e.gl.TEXTURE_2D, e.gl.TEXTURE_MAG_FILTER, s), e.gl.texParameteri(e.gl.TEXTURE_2D, e.gl.TEXTURE_MIN_FILTER, n), e.gl.texParameteri(e.gl.TEXTURE_2D, e.gl.TEXTURE_WRAP_S, r), e.gl.texParameteri(e.gl.TEXTURE_2D, e.gl.TEXTURE_WRAP_T, o); } e.gl.uniform1i(t.uniformLocation, this.textureCount), (t._init = !0), this.textureCount++; } }), (e.PixiShader.prototype.syncUniforms = function () { this.textureCount = 1; var t; for (var i in this.uniforms) (t = this.uniforms[i]), 1 === t.glValueLength ? t.glMatrix === !0 ? t.glFunc.call(e.gl, t.uniformLocation, t.transpose, t.value) : t.glFunc.call(e.gl, t.uniformLocation, t.value) : 2 === t.glValueLength ? t.glFunc.call(e.gl, t.uniformLocation, t.value.x, t.value.y) : 3 === t.glValueLength ? t.glFunc.call(e.gl, t.uniformLocation, t.value.x, t.value.y, t.value.z) : 4 === t.glValueLength ? t.glFunc.call(e.gl, t.uniformLocation, t.value.x, t.value.y, t.value.z, t.value.w) : "sampler2D" === t.type && (t._init ? (e.gl.activeTexture(e.gl["TEXTURE" + this.textureCount]), e.gl.bindTexture(e.gl.TEXTURE_2D, t.value.baseTexture._glTexture), e.gl.uniform1i(t.uniformLocation, this.textureCount), this.textureCount++) : this.initSampler2D(t)); }), (e.PixiShader.defaultVertexSrc = [ "attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "attribute float aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "varying float vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", " gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);", " vTextureCoord = aTextureCoord;", " vColor = aColor;", "}", ]), (e.PrimitiveShader = function () { (this.program = null), (this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", " gl_FragColor = vColor;", "}"]), (this.vertexSrc = [ "attribute vec2 aVertexPosition;", "attribute vec4 aColor;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform float alpha;", "varying vec4 vColor;", "void main(void) {", " vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", " v -= offsetVector.xyx;", " gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", " vColor = aColor * alpha;", "}", ]); }), (e.PrimitiveShader.prototype.init = function () { var t = e.compileProgram(this.vertexSrc, this.fragmentSrc), i = e.gl; i.useProgram(t), (this.projectionVector = i.getUniformLocation(t, "projectionVector")), (this.offsetVector = i.getUniformLocation(t, "offsetVector")), (this.aVertexPosition = i.getAttribLocation(t, "aVertexPosition")), (this.colorAttribute = i.getAttribLocation(t, "aColor")), (this.translationMatrix = i.getUniformLocation(t, "translationMatrix")), (this.alpha = i.getUniformLocation(t, "alpha")), (this.program = t); }), (e.StripShader = function () { (this.program = null), (this.fragmentSrc = [ "precision mediump float;", "varying vec2 vTextureCoord;", "varying float vColor;", "uniform float alpha;", "uniform sampler2D uSampler;", "void main(void) {", " gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));", " gl_FragColor = gl_FragColor * alpha;", "}", ]), (this.vertexSrc = [ "attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "attribute float aColor;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "varying float vColor;", "void main(void) {", " vec3 v = translationMatrix * vec3(aVertexPosition, 1.0);", " v -= offsetVector.xyx;", " gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / projectionVector.y + 1.0 , 0.0, 1.0);", " vTextureCoord = aTextureCoord;", " vColor = aColor;", "}", ]); }), (e.StripShader.prototype.init = function () { var t = e.compileProgram(this.vertexSrc, this.fragmentSrc), i = e.gl; i.useProgram(t), (this.uSampler = i.getUniformLocation(t, "uSampler")), (this.projectionVector = i.getUniformLocation(t, "projectionVector")), (this.offsetVector = i.getUniformLocation(t, "offsetVector")), (this.colorAttribute = i.getAttribLocation(t, "aColor")), (this.aVertexPosition = i.getAttribLocation(t, "aVertexPosition")), (this.aTextureCoord = i.getAttribLocation(t, "aTextureCoord")), (this.translationMatrix = i.getUniformLocation(t, "translationMatrix")), (this.alpha = i.getUniformLocation(t, "alpha")), (this.program = t); }), (e._batchs = []), (e._getBatch = function (t) { return 0 === e._batchs.length ? new e.WebGLBatch(t) : e._batchs.pop(); }), (e._returnBatch = function (t) { t.clean(), e._batchs.push(t); }), (e._restoreBatchs = function (t) { for (var i = 0; i < e._batchs.length; i++) e._batchs[i].restoreLostContext(t); }), (e.WebGLBatch = function (t) { (this.gl = t), (this.size = 0), (this.vertexBuffer = t.createBuffer()), (this.indexBuffer = t.createBuffer()), (this.uvBuffer = t.createBuffer()), (this.colorBuffer = t.createBuffer()), (this.blendMode = e.blendModes.NORMAL), (this.dynamicSize = 1); }), (e.WebGLBatch.prototype.constructor = e.WebGLBatch), (e.WebGLBatch.prototype.clean = function () { (this.verticies = []), (this.uvs = []), (this.indices = []), (this.colors = []), (this.dynamicSize = 1), (this.texture = null), (this.last = null), (this.size = 0), (this.head = null), (this.tail = null); }), (e.WebGLBatch.prototype.restoreLostContext = function (t) { (this.gl = t), (this.vertexBuffer = t.createBuffer()), (this.indexBuffer = t.createBuffer()), (this.uvBuffer = t.createBuffer()), (this.colorBuffer = t.createBuffer()); }), (e.WebGLBatch.prototype.init = function (t) { (t.batch = this), (this.dirty = !0), (this.blendMode = t.blendMode), (this.texture = t.texture.baseTexture), (this.head = t), (this.tail = t), (this.size = 1), this.growBatch(); }), (e.WebGLBatch.prototype.insertBefore = function (t, e) { this.size++, (t.batch = this), (this.dirty = !0); var i = e.__prev; (e.__prev = t), (t.__next = e), i ? ((t.__prev = i), (i.__next = t)) : (this.head = t); }), (e.WebGLBatch.prototype.insertAfter = function (t, e) { this.size++, (t.batch = this), (this.dirty = !0); var i = e.__next; (e.__next = t), (t.__prev = e), i ? ((t.__next = i), (i.__prev = t)) : (this.tail = t); }), (e.WebGLBatch.prototype.remove = function (t) { return ( this.size--, 0 === this.size ? ((t.batch = null), (t.__prev = null), void (t.__next = null)) : (t.__prev ? (t.__prev.__next = t.__next) : ((this.head = t.__next), (this.head.__prev = null)), t.__next ? (t.__next.__prev = t.__prev) : ((this.tail = t.__prev), (this.tail.__next = null)), (t.batch = null), (t.__next = null), (t.__prev = null), void (this.dirty = !0)) ); }), (e.WebGLBatch.prototype.split = function (t) { this.dirty = !0; var i = new e.WebGLBatch(this.gl); i.init(t), (i.texture = this.texture), (i.tail = this.tail), (this.tail = t.__prev), (this.tail.__next = null), (t.__prev = null); for (var s = 0; t; ) s++, (t.batch = i), (t = t.__next); return (i.size = s), (this.size -= s), i; }), (e.WebGLBatch.prototype.merge = function (t) { (this.dirty = !0), (this.tail.__next = t.head), (t.head.__prev = this.tail), (this.size += t.size), (this.tail = t.tail); for (var e = t.head; e; ) (e.batch = this), (e = e.__next); }), (e.WebGLBatch.prototype.growBatch = function () { var t = this.gl; (this.dynamicSize = 1 === this.size ? 1 : 1.5 * this.size), (this.verticies = new Float32Array(8 * this.dynamicSize)), t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, this.verticies, t.DYNAMIC_DRAW), (this.uvs = new Float32Array(8 * this.dynamicSize)), t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer), t.bufferData(t.ARRAY_BUFFER, this.uvs, t.DYNAMIC_DRAW), (this.dirtyUVS = !0), (this.colors = new Float32Array(4 * this.dynamicSize)), t.bindBuffer(t.ARRAY_BUFFER, this.colorBuffer), t.bufferData(t.ARRAY_BUFFER, this.colors, t.DYNAMIC_DRAW), (this.dirtyColors = !0), (this.indices = new Uint16Array(6 * this.dynamicSize)); for (var e = this.indices.length / 6, i = 0; e > i; i++) { var s = 6 * i, n = 4 * i; (this.indices[s + 0] = n + 0), (this.indices[s + 1] = n + 1), (this.indices[s + 2] = n + 2), (this.indices[s + 3] = n + 0), (this.indices[s + 4] = n + 2), (this.indices[s + 5] = n + 3); } t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer), t.bufferData(t.ELEMENT_ARRAY_BUFFER, this.indices, t.STATIC_DRAW); }), (e.WebGLBatch.prototype.refresh = function () { this.dynamicSize < this.size && this.growBatch(); for (var t, e, i = 0, s = this.head; s; ) { t = 8 * i; var n = s.texture, r = n.frame, o = n.baseTexture.width, a = n.baseTexture.height; (this.uvs[t + 0] = r.x / o), (this.uvs[t + 1] = r.y / a), (this.uvs[t + 2] = (r.x + r.width) / o), (this.uvs[t + 3] = r.y / a), (this.uvs[t + 4] = (r.x + r.width) / o), (this.uvs[t + 5] = (r.y + r.height) / a), (this.uvs[t + 6] = r.x / o), (this.uvs[t + 7] = (r.y + r.height) / a), (s.updateFrame = !1), (e = 4 * i), (this.colors[e] = this.colors[e + 1] = this.colors[e + 2] = this.colors[e + 3] = s.worldAlpha), (s = s.__next), i++; } (this.dirtyUVS = !0), (this.dirtyColors = !0); }), (e.WebGLBatch.prototype.update = function () { for (var t, i, s, n, r, o, a, h, l, c, u, d, p, f, g, m, y = 0, _ = this.head, x = this.verticies, v = this.uvs, b = this.colors; _; ) { if (_.vcount === e.visibleCount) { if ( ((i = _.texture.frame.width), (s = _.texture.frame.height), (n = _.anchor.x), (r = _.anchor.y), (o = i * (1 - n)), (a = i * -n), (h = s * (1 - r)), (l = s * -r), (c = 8 * y), (t = _.worldTransform), (u = t[0]), (d = t[3]), (p = t[1]), (f = t[4]), (g = t[2]), (m = t[5]), (x[c + 0] = u * a + p * l + g), (x[c + 1] = f * l + d * a + m), (x[c + 2] = u * o + p * l + g), (x[c + 3] = f * l + d * o + m), (x[c + 4] = u * o + p * h + g), (x[c + 5] = f * h + d * o + m), (x[c + 6] = u * a + p * h + g), (x[c + 7] = f * h + d * a + m), _.updateFrame || _.texture.updateFrame) ) { this.dirtyUVS = !0; var w = _.texture, T = w.frame, S = w.baseTexture.width, C = w.baseTexture.height; (v[c + 0] = T.x / S), (v[c + 1] = T.y / C), (v[c + 2] = (T.x + T.width) / S), (v[c + 3] = T.y / C), (v[c + 4] = (T.x + T.width) / S), (v[c + 5] = (T.y + T.height) / C), (v[c + 6] = T.x / S), (v[c + 7] = (T.y + T.height) / C), (_.updateFrame = !1); } if (_.cacheAlpha !== _.worldAlpha) { _.cacheAlpha = _.worldAlpha; var A = 4 * y; (b[A] = b[A + 1] = b[A + 2] = b[A + 3] = _.worldAlpha), (this.dirtyColors = !0); } } else (c = 8 * y), (x[c + 0] = x[c + 1] = x[c + 2] = x[c + 3] = x[c + 4] = x[c + 5] = x[c + 6] = x[c + 7] = 0); y++, (_ = _.__next); } }), (e.WebGLBatch.prototype.render = function (t, i) { if (((t = t || 0), void 0 === i && (i = this.size), this.dirty && (this.refresh(), (this.dirty = !1)), 0 !== this.size)) { this.update(); var s = this.gl, n = e.defaultShader; s.bindBuffer(s.ARRAY_BUFFER, this.vertexBuffer), s.bufferSubData(s.ARRAY_BUFFER, 0, this.verticies), s.vertexAttribPointer(n.aVertexPosition, 2, s.FLOAT, !1, 0, 0), s.bindBuffer(s.ARRAY_BUFFER, this.uvBuffer), this.dirtyUVS && ((this.dirtyUVS = !1), s.bufferSubData(s.ARRAY_BUFFER, 0, this.uvs)), s.vertexAttribPointer(n.aTextureCoord, 2, s.FLOAT, !1, 0, 0), s.activeTexture(s.TEXTURE0), s.bindTexture(s.TEXTURE_2D, this.texture._glTexture), s.bindBuffer(s.ARRAY_BUFFER, this.colorBuffer), this.dirtyColors && ((this.dirtyColors = !1), s.bufferSubData(s.ARRAY_BUFFER, 0, this.colors)), s.vertexAttribPointer(n.colorAttribute, 1, s.FLOAT, !1, 0, 0), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, this.indexBuffer); var r = i - t; s.drawElements(s.TRIANGLES, 6 * r, s.UNSIGNED_SHORT, 2 * t * 6); } }), (e.WebGLFilterManager = function (t) { (this.transparent = t), (this.filterStack = []), (this.texturePool = []), (this.offsetX = 0), (this.offsetY = 0), this.initShaderBuffers(); }), (e.WebGLFilterManager.prototype.begin = function (t, e) { (this.width = 2 * t.x), (this.height = 2 * -t.y), (this.buffer = e); }), (e.WebGLFilterManager.prototype.pushFilter = function (t) { var i = e.gl; this.filterStack.push(t); var s = t.filterPasses[0]; (this.offsetX += t.target.filterArea.x), (this.offsetY += t.target.filterArea.y); var n = this.texturePool.pop(); n ? n.resize(this.width, this.height) : (n = new e.FilterTexture(this.width, this.height)), i.bindTexture(i.TEXTURE_2D, n.texture), this.getBounds(t.target); var r = t.target.filterArea, o = s.padding; (r.x -= o), (r.y -= o), (r.width += 2 * o), (r.height += 2 * o), r.x < 0 && (r.x = 0), r.width > this.width && (r.width = this.width), r.y < 0 && (r.y = 0), r.height > this.height && (r.height = this.height), i.bindFramebuffer(i.FRAMEBUFFER, n.frameBuffer), i.viewport(0, 0, r.width, r.height), (e.projection.x = r.width / 2), (e.projection.y = -r.height / 2), (e.offset.x = -r.x), (e.offset.y = -r.y), i.uniform2f(e.defaultShader.projectionVector, r.width / 2, -r.height / 2), i.uniform2f(e.defaultShader.offsetVector, -r.x, -r.y), i.colorMask(!0, !0, !0, !0), i.clearColor(0, 0, 0, 0), i.clear(i.COLOR_BUFFER_BIT), (t._glFilterTexture = n); }), (e.WebGLFilterManager.prototype.popFilter = function () { var t = e.gl, i = this.filterStack.pop(), s = i.target.filterArea, n = i._glFilterTexture; if (i.filterPasses.length > 1) { t.viewport(0, 0, s.width, s.height), t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer), (this.vertexArray[0] = 0), (this.vertexArray[1] = s.height), (this.vertexArray[2] = s.width), (this.vertexArray[3] = s.height), (this.vertexArray[4] = 0), (this.vertexArray[5] = 0), (this.vertexArray[6] = s.width), (this.vertexArray[7] = 0), t.bufferSubData(t.ARRAY_BUFFER, 0, this.vertexArray), t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer), (this.uvArray[2] = s.width / this.width), (this.uvArray[5] = s.height / this.height), (this.uvArray[6] = s.width / this.width), (this.uvArray[7] = s.height / this.height), t.bufferSubData(t.ARRAY_BUFFER, 0, this.uvArray); var r = n, o = this.texturePool.pop(); o || (o = new e.FilterTexture(this.width, this.height)), t.bindFramebuffer(t.FRAMEBUFFER, o.frameBuffer), t.clear(t.COLOR_BUFFER_BIT), t.disable(t.BLEND); for (var a = 0; a < i.filterPasses.length - 1; a++) { var h = i.filterPasses[a]; t.bindFramebuffer(t.FRAMEBUFFER, o.frameBuffer), t.activeTexture(t.TEXTURE0), t.bindTexture(t.TEXTURE_2D, r.texture), this.applyFilterPass(h, s, s.width, s.height); var l = r; (r = o), (o = l); } t.enable(t.BLEND), (n = r), this.texturePool.push(o); } var c = i.filterPasses[i.filterPasses.length - 1]; (this.offsetX -= s.x), (this.offsetY -= s.y); var u = this.width, d = this.height, p = 0, f = 0, g = this.buffer; if (0 === this.filterStack.length) t.colorMask(!0, !0, !0, this.transparent); else { var m = this.filterStack[this.filterStack.length - 1]; (s = m.target.filterArea), (u = s.width), (d = s.height), (p = s.x), (f = s.y), (g = m._glFilterTexture.frameBuffer); } (e.projection.x = u / 2), (e.projection.y = -d / 2), (e.offset.x = p), (e.offset.y = f), (s = i.target.filterArea); var y = s.x - p, _ = s.y - f; t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer), (this.vertexArray[0] = y), (this.vertexArray[1] = _ + s.height), (this.vertexArray[2] = y + s.width), (this.vertexArray[3] = _ + s.height), (this.vertexArray[4] = y), (this.vertexArray[5] = _), (this.vertexArray[6] = y + s.width), (this.vertexArray[7] = _), t.bufferSubData(t.ARRAY_BUFFER, 0, this.vertexArray), t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer), (this.uvArray[2] = s.width / this.width), (this.uvArray[5] = s.height / this.height), (this.uvArray[6] = s.width / this.width), (this.uvArray[7] = s.height / this.height), t.bufferSubData(t.ARRAY_BUFFER, 0, this.uvArray), t.viewport(0, 0, u, d), t.bindFramebuffer(t.FRAMEBUFFER, g), t.activeTexture(t.TEXTURE0), t.bindTexture(t.TEXTURE_2D, n.texture), this.applyFilterPass(c, s, u, d), t.useProgram(e.defaultShader.program), t.uniform2f(e.defaultShader.projectionVector, u / 2, -d / 2), t.uniform2f(e.defaultShader.offsetVector, -p, -f), this.texturePool.push(n), (i._glFilterTexture = null); }), (e.WebGLFilterManager.prototype.applyFilterPass = function (t, i, s, n) { var r = e.gl, o = t.shader; o || ((o = new e.PixiShader()), (o.fragmentSrc = t.fragmentSrc), (o.uniforms = t.uniforms), o.init(), (t.shader = o)), r.useProgram(o.program), r.uniform2f(o.projectionVector, s / 2, -n / 2), r.uniform2f(o.offsetVector, 0, 0), t.uniforms.dimensions && ((t.uniforms.dimensions.value[0] = this.width), (t.uniforms.dimensions.value[1] = this.height), (t.uniforms.dimensions.value[2] = this.vertexArray[0]), (t.uniforms.dimensions.value[3] = this.vertexArray[5])), o.syncUniforms(), r.bindBuffer(r.ARRAY_BUFFER, this.vertexBuffer), r.vertexAttribPointer(o.aVertexPosition, 2, r.FLOAT, !1, 0, 0), r.bindBuffer(r.ARRAY_BUFFER, this.uvBuffer), r.vertexAttribPointer(o.aTextureCoord, 2, r.FLOAT, !1, 0, 0), r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, this.indexBuffer), r.drawElements(r.TRIANGLES, 6, r.UNSIGNED_SHORT, 0); }), (e.WebGLFilterManager.prototype.initShaderBuffers = function () { var t = e.gl; (this.vertexBuffer = t.createBuffer()), (this.uvBuffer = t.createBuffer()), (this.indexBuffer = t.createBuffer()), (this.vertexArray = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1])), t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, this.vertexArray, t.STATIC_DRAW), (this.uvArray = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1])), t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer), t.bufferData(t.ARRAY_BUFFER, this.uvArray, t.STATIC_DRAW), t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer), t.bufferData(t.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 1, 3, 2]), t.STATIC_DRAW); }), (e.WebGLFilterManager.prototype.getBounds = function (t) { var i, s, n, r, o, a, h, l, c, u, d, p, f, g, m, y, _, x, v, b, w, T, S, C, A = t.first, P = t.last._iNext, R = -1 / 0, E = -1 / 0, L = 1 / 0, O = 1 / 0; do { if (A.visible) if (A instanceof e.Sprite) (s = A.texture.frame.width), (n = A.texture.frame.height), (r = A.anchor.x), (o = A.anchor.y), (a = s * (1 - r)), (h = s * -r), (l = n * (1 - o)), (c = n * -o), (u = !0); else if (A instanceof e.Graphics) { A.updateFilterBounds(); var D = A.bounds; (s = D.width), (n = D.height), (a = D.x), (h = D.x + D.width), (l = D.y), (c = D.y + D.height), (u = !0); } u && ((i = A.worldTransform), (d = i[0]), (p = i[3]), (f = i[1]), (g = i[4]), (m = i[2]), (y = i[5]), (_ = d * h + f * c + m), (w = g * c + p * h + y), (x = d * a + f * c + m), (T = g * c + p * a + y), (v = d * a + f * l + m), (S = g * l + p * a + y), (b = d * h + f * l + m), (C = g * l + p * h + y), (L = L > _ ? _ : L), (L = L > x ? x : L), (L = L > v ? v : L), (L = L > b ? b : L), (O = O > w ? w : O), (O = O > T ? T : O), (O = O > S ? S : O), (O = O > C ? C : O), (R = _ > R ? _ : R), (R = x > R ? x : R), (R = v > R ? v : R), (R = b > R ? b : R), (E = w > E ? w : E), (E = T > E ? T : E), (E = S > E ? S : E), (E = C > E ? C : E)), (u = !1), (A = A._iNext); } while (A !== P); (t.filterArea.x = L), (t.filterArea.y = O), (t.filterArea.width = R - L), (t.filterArea.height = E - O); }), (e.FilterTexture = function (t, i) { var s = e.gl; (this.frameBuffer = s.createFramebuffer()), (this.texture = s.createTexture()), s.bindTexture(s.TEXTURE_2D, this.texture), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_MAG_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_MIN_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_WRAP_S, s.CLAMP_TO_EDGE), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_WRAP_T, s.CLAMP_TO_EDGE), s.bindFramebuffer(s.FRAMEBUFFER, this.framebuffer), s.bindFramebuffer(s.FRAMEBUFFER, this.frameBuffer), s.framebufferTexture2D(s.FRAMEBUFFER, s.COLOR_ATTACHMENT0, s.TEXTURE_2D, this.texture, 0), this.resize(t, i); }), (e.FilterTexture.prototype.resize = function (t, i) { if (this.width !== t || this.height !== i) { (this.width = t), (this.height = i); var s = e.gl; s.bindTexture(s.TEXTURE_2D, this.texture), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, t, i, 0, s.RGBA, s.UNSIGNED_BYTE, null); } }), (e.WebGLGraphics = function () {}), (e.WebGLGraphics.renderGraphics = function (t, i) { var s = e.gl; t._webGL || (t._webGL = { points: [], indices: [], lastIndex: 0, buffer: s.createBuffer(), indexBuffer: s.createBuffer() }), t.dirty && ((t.dirty = !1), t.clearDirty && ((t.clearDirty = !1), (t._webGL.lastIndex = 0), (t._webGL.points = []), (t._webGL.indices = [])), e.WebGLGraphics.updateGraphics(t)), e.activatePrimitiveShader(); var n = e.mat3.clone(t.worldTransform); e.mat3.transpose(n), s.blendFunc(s.ONE, s.ONE_MINUS_SRC_ALPHA), s.uniformMatrix3fv(e.primitiveShader.translationMatrix, !1, n), s.uniform2f(e.primitiveShader.projectionVector, i.x, -i.y), s.uniform2f(e.primitiveShader.offsetVector, -e.offset.x, -e.offset.y), s.uniform1f(e.primitiveShader.alpha, t.worldAlpha), s.bindBuffer(s.ARRAY_BUFFER, t._webGL.buffer), s.vertexAttribPointer(e.primitiveShader.aVertexPosition, 2, s.FLOAT, !1, 24, 0), s.vertexAttribPointer(e.primitiveShader.colorAttribute, 4, s.FLOAT, !1, 24, 8), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, t._webGL.indexBuffer), s.drawElements(s.TRIANGLE_STRIP, t._webGL.indices.length, s.UNSIGNED_SHORT, 0), e.deactivatePrimitiveShader(); }), (e.WebGLGraphics.updateGraphics = function (t) { for (var i = t._webGL.lastIndex; i < t.graphicsData.length; i++) { var s = t.graphicsData[i]; s.type === e.Graphics.POLY ? (s.fill && s.points.length > 3 && e.WebGLGraphics.buildPoly(s, t._webGL), s.lineWidth > 0 && e.WebGLGraphics.buildLine(s, t._webGL)) : s.type === e.Graphics.RECT ? e.WebGLGraphics.buildRectangle(s, t._webGL) : (s.type === e.Graphics.CIRC || s.type === e.Graphics.ELIP) && e.WebGLGraphics.buildCircle(s, t._webGL); } t._webGL.lastIndex = t.graphicsData.length; var n = e.gl; (t._webGL.glPoints = new Float32Array(t._webGL.points)), n.bindBuffer(n.ARRAY_BUFFER, t._webGL.buffer), n.bufferData(n.ARRAY_BUFFER, t._webGL.glPoints, n.STATIC_DRAW), (t._webGL.glIndicies = new Uint16Array(t._webGL.indices)), n.bindBuffer(n.ELEMENT_ARRAY_BUFFER, t._webGL.indexBuffer), n.bufferData(n.ELEMENT_ARRAY_BUFFER, t._webGL.glIndicies, n.STATIC_DRAW); }), (e.WebGLGraphics.buildRectangle = function (t, i) { var s = t.points, n = s[0], r = s[1], o = s[2], a = s[3]; if (t.fill) { var h = e.hex2rgb(t.fillColor), l = t.fillAlpha, c = h[0] * l, u = h[1] * l, d = h[2] * l, p = i.points, f = i.indices, g = p.length / 6; p.push(n, r), p.push(c, u, d, l), p.push(n + o, r), p.push(c, u, d, l), p.push(n, r + a), p.push(c, u, d, l), p.push(n + o, r + a), p.push(c, u, d, l), f.push(g, g, g + 1, g + 2, g + 3, g + 3); } t.lineWidth && ((t.points = [n, r, n + o, r, n + o, r + a, n, r + a, n, r]), e.WebGLGraphics.buildLine(t, i)); }), (e.WebGLGraphics.buildCircle = function (t, i) { var s = t.points, n = s[0], r = s[1], o = s[2], a = s[3], h = 40, l = (2 * Math.PI) / h, c = 0; if (t.fill) { var u = e.hex2rgb(t.fillColor), d = t.fillAlpha, p = u[0] * d, f = u[1] * d, g = u[2] * d, m = i.points, y = i.indices, _ = m.length / 6; for (y.push(_), c = 0; h + 1 > c; c++) m.push(n, r, p, f, g, d), m.push(n + Math.sin(l * c) * o, r + Math.cos(l * c) * a, p, f, g, d), y.push(_++, _++); y.push(_ - 1); } if (t.lineWidth) { for (t.points = [], c = 0; h + 1 > c; c++) t.points.push(n + Math.sin(l * c) * o, r + Math.cos(l * c) * a); e.WebGLGraphics.buildLine(t, i); } }), (e.WebGLGraphics.buildLine = function (t, i) { var s = 0, n = t.points; if (0 !== n.length) { if (t.lineWidth % 2) for (s = 0; s < n.length; s++) n[s] += 0.5; var r = new e.Point(n[0], n[1]), o = new e.Point(n[n.length - 2], n[n.length - 1]); if (r.x === o.x && r.y === o.y) { n.pop(), n.pop(), (o = new e.Point(n[n.length - 2], n[n.length - 1])); var a = o.x + 0.5 * (r.x - o.x), h = o.y + 0.5 * (r.y - o.y); n.unshift(a, h), n.push(a, h); } var l, c, u, d, p, f, g, m, y, _, x, v, b, w, T, S, C, A, P, R, E, L, O, D = i.points, k = i.indices, F = n.length / 2, M = n.length, I = D.length / 6, B = t.lineWidth / 2, G = e.hex2rgb(t.lineColor), U = t.lineAlpha, N = G[0] * U, j = G[1] * U, W = G[2] * U; for (u = n[0], d = n[1], p = n[2], f = n[3], y = -(d - f), _ = u - p, O = Math.sqrt(y * y + _ * _), y /= O, _ /= O, y *= B, _ *= B, D.push(u - y, d - _, N, j, W, U), D.push(u + y, d + _, N, j, W, U), s = 1; F - 1 > s; s++) (u = n[2 * (s - 1)]), (d = n[2 * (s - 1) + 1]), (p = n[2 * s]), (f = n[2 * s + 1]), (g = n[2 * (s + 1)]), (m = n[2 * (s + 1) + 1]), (y = -(d - f)), (_ = u - p), (O = Math.sqrt(y * y + _ * _)), (y /= O), (_ /= O), (y *= B), (_ *= B), (x = -(f - m)), (v = p - g), (O = Math.sqrt(x * x + v * v)), (x /= O), (v /= O), (x *= B), (v *= B), (T = -_ + d - (-_ + f)), (S = -y + p - (-y + u)), (C = (-y + u) * (-_ + f) - (-y + p) * (-_ + d)), (A = -v + m - (-v + f)), (P = -x + p - (-x + g)), (R = (-x + g) * (-v + f) - (-x + p) * (-v + m)), (E = T * P - A * S), Math.abs(E) < 0.1 ? ((E += 10.1), D.push(p - y, f - _, N, j, W, U), D.push(p + y, f + _, N, j, W, U)) : ((l = (S * R - P * C) / E), (c = (A * C - T * R) / E), (L = (l - p) * (l - p) + (c - f) + (c - f)), L > 19600 ? ((b = y - x), (w = _ - v), (O = Math.sqrt(b * b + w * w)), (b /= O), (w /= O), (b *= B), (w *= B), D.push(p - b, f - w), D.push(N, j, W, U), D.push(p + b, f + w), D.push(N, j, W, U), D.push(p - b, f - w), D.push(N, j, W, U), M++) : (D.push(l, c), D.push(N, j, W, U), D.push(p - (l - p), f - (c - f)), D.push(N, j, W, U))); for ( u = n[2 * (F - 2)], d = n[2 * (F - 2) + 1], p = n[2 * (F - 1)], f = n[2 * (F - 1) + 1], y = -(d - f), _ = u - p, O = Math.sqrt(y * y + _ * _), y /= O, _ /= O, y *= B, _ *= B, D.push(p - y, f - _), D.push(N, j, W, U), D.push(p + y, f + _), D.push(N, j, W, U), k.push(I), s = 0; M > s; s++ ) k.push(I++); k.push(I - 1); } }), (e.WebGLGraphics.buildPoly = function (t, i) { var s = t.points; if (!(s.length < 6)) { var n = i.points, r = i.indices, o = s.length / 2, a = e.hex2rgb(t.fillColor), h = t.fillAlpha, l = a[0] * h, c = a[1] * h, u = a[2] * h, d = e.PolyK.Triangulate(s), p = n.length / 6, f = 0; for (f = 0; f < d.length; f += 3) r.push(d[f] + p), r.push(d[f] + p), r.push(d[f + 1] + p), r.push(d[f + 2] + p), r.push(d[f + 2] + p); for (f = 0; o > f; f++) n.push(s[2 * f], s[2 * f + 1], l, c, u, h); } }), (e._defaultFrame = new e.Rectangle(0, 0, 1, 1)), (e.gl = null), (e.WebGLRenderer = function (t, i, s, n, r) { (this.transparent = !!n), (this.width = t || 800), (this.height = i || 600), (this.view = s || document.createElement("canvas")), (this.view.width = this.width), (this.view.height = this.height); var o = this; this.view.addEventListener( "webglcontextlost", function (t) { o.handleContextLost(t); }, !1 ), this.view.addEventListener( "webglcontextrestored", function (t) { o.handleContextRestored(t); }, !1 ), (this.batchs = []); var a = { alpha: this.transparent, antialias: !!r, premultipliedAlpha: !1, stencil: !0 }; try { e.gl = this.gl = this.view.getContext("experimental-webgl", a); } catch (h) { try { e.gl = this.gl = this.view.getContext("webgl", a); } catch (l) { throw new Error(" This browser does not support webGL. Try using the canvas renderer" + this); } } e.initDefaultShaders(); var c = this.gl; c.useProgram(e.defaultShader.program), (e.WebGLRenderer.gl = c), (this.batch = new e.WebGLBatch(c)), c.disable(c.DEPTH_TEST), c.disable(c.CULL_FACE), c.enable(c.BLEND), c.colorMask(!0, !0, !0, this.transparent), (e.projection = new e.Point(400, 300)), (e.offset = new e.Point(0, 0)), this.resize(this.width, this.height), (this.contextLost = !1), (this.stageRenderGroup = new e.WebGLRenderGroup(this.gl, this.transparent)); }), (e.WebGLRenderer.prototype.constructor = e.WebGLRenderer), (e.WebGLRenderer.getBatch = function () { return 0 === e._batchs.length ? new e.WebGLBatch(e.WebGLRenderer.gl) : e._batchs.pop(); }), (e.WebGLRenderer.returnBatch = function (t) { t.clean(), e._batchs.push(t); }), (e.WebGLRenderer.prototype.render = function (t) { if (!this.contextLost) { this.__stage !== t && ((this.__stage = t), this.stageRenderGroup.setRenderable(t)), e.WebGLRenderer.updateTextures(), e.visibleCount++, t.updateTransform(); var i = this.gl; if ( (i.colorMask(!0, !0, !0, this.transparent), i.viewport(0, 0, this.width, this.height), i.bindFramebuffer(i.FRAMEBUFFER, null), i.clearColor(t.backgroundColorSplit[0], t.backgroundColorSplit[1], t.backgroundColorSplit[2], !this.transparent), i.clear(i.COLOR_BUFFER_BIT), (this.stageRenderGroup.backgroundColor = t.backgroundColorSplit), (e.projection.x = this.width / 2), (e.projection.y = -this.height / 2), this.stageRenderGroup.render(e.projection), t.interactive && (t._interactiveEventsAdded || ((t._interactiveEventsAdded = !0), t.interactionManager.setTarget(this))), e.Texture.frameUpdates.length > 0) ) { for (var s = 0; s < e.Texture.frameUpdates.length; s++) e.Texture.frameUpdates[s].updateFrame = !1; e.Texture.frameUpdates = []; } } }), (e.WebGLRenderer.updateTextures = function () { var t = 0; for (t = 0; t < e.texturesToUpdate.length; t++) e.WebGLRenderer.updateTexture(e.texturesToUpdate[t]); for (t = 0; t < e.texturesToDestroy.length; t++) e.WebGLRenderer.destroyTexture(e.texturesToDestroy[t]); (e.texturesToUpdate = []), (e.texturesToDestroy = []); }), (e.WebGLRenderer.updateTexture = function (t) { var i = e.gl; t._glTexture || (t._glTexture = i.createTexture()), t.hasLoaded && (i.bindTexture(i.TEXTURE_2D, t._glTexture), i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !0), i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, i.RGBA, i.UNSIGNED_BYTE, t.source), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MAG_FILTER, t.scaleMode === e.BaseTexture.SCALE_MODE.LINEAR ? i.LINEAR : i.NEAREST), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MIN_FILTER, t.scaleMode === e.BaseTexture.SCALE_MODE.LINEAR ? i.LINEAR : i.NEAREST), t._powerOf2 ? (i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_S, i.REPEAT), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_T, i.REPEAT)) : (i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_S, i.CLAMP_TO_EDGE), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_T, i.CLAMP_TO_EDGE)), i.bindTexture(i.TEXTURE_2D, null)); }), (e.WebGLRenderer.destroyTexture = function (t) { var i = e.gl; t._glTexture && ((t._glTexture = i.createTexture()), i.deleteTexture(i.TEXTURE_2D, t._glTexture)); }), (e.WebGLRenderer.prototype.resize = function (t, i) { (this.width = t), (this.height = i), (this.view.width = t), (this.view.height = i), this.gl.viewport(0, 0, this.width, this.height), (e.projection.x = this.width / 2), (e.projection.y = -this.height / 2); }), (e.WebGLRenderer.prototype.handleContextLost = function (t) { t.preventDefault(), (this.contextLost = !0); }), (e.WebGLRenderer.prototype.handleContextRestored = function () { (this.gl = this.view.getContext("experimental-webgl", { alpha: !0 })), this.initShaders(); for (var t in e.TextureCache) { var i = e.TextureCache[t].baseTexture; (i._glTexture = null), e.WebGLRenderer.updateTexture(i); } for (var s = 0; s < this.batchs.length; s++) this.batchs[s].restoreLostContext(this.gl), (this.batchs[s].dirty = !0); e._restoreBatchs(this.gl), (this.contextLost = !1); }), (e.WebGLRenderGroup = function (t, i) { (this.gl = t), this.root, this.backgroundColor, (this.transparent = void 0 == i ? !0 : i), (this.batchs = []), (this.toRemove = []), (this.filterManager = new e.WebGLFilterManager(this.transparent)); }), (e.WebGLRenderGroup.prototype.constructor = e.WebGLRenderGroup), (e.WebGLRenderGroup.prototype.setRenderable = function (t) { this.root && this.removeDisplayObjectAndChildren(this.root), (t.worldVisible = t.visible), (this.root = t), this.addDisplayObjectAndChildren(t); }), (e.WebGLRenderGroup.prototype.render = function (t, i) { e.WebGLRenderer.updateTextures(); var s = this.gl; s.uniform2f(e.defaultShader.projectionVector, t.x, t.y), this.filterManager.begin(t, i), s.blendFunc(s.ONE, s.ONE_MINUS_SRC_ALPHA); for (var n, r = 0; r < this.batchs.length; r++) (n = this.batchs[r]), n instanceof e.WebGLBatch ? this.batchs[r].render() : this.renderSpecial(n, t); }), (e.WebGLRenderGroup.prototype.renderSpecific = function (t, i, s) { e.WebGLRenderer.updateTextures(); var n = this.gl; n.uniform2f(e.defaultShader.projectionVector, i.x, i.y), this.filterManager.begin(i, s); for (var r, o, a, h, l = t.first; l._iNext && (!l.renderable || !l.__renderGroup); ) l = l._iNext; var c = l.batch; if (l instanceof e.Sprite) { c = l.batch; var u = c.head; if (u == l) r = 0; else for (r = 1; u.__next != l; ) r++, (u = u.__next); } else c = l; for (var d = t.last; d._iPrev && (!d.renderable || !d.__renderGroup); ) d = d._iNext; if (d instanceof e.Sprite) { endBatch = d.batch; var u = endBatch.head; if (u == d) a = 0; else for (a = 1; u.__next != d; ) a++, (u = u.__next); } else endBatch = d; if (c == endBatch) return void (c instanceof e.WebGLBatch ? c.render(r, a + 1) : this.renderSpecial(c, i)); (o = this.batchs.indexOf(c)), (h = this.batchs.indexOf(endBatch)), c instanceof e.WebGLBatch ? c.render(r) : this.renderSpecial(c, i); for (var p = o + 1; h > p; p++) (renderable = this.batchs[p]), renderable instanceof e.WebGLBatch ? this.batchs[p].render() : this.renderSpecial(renderable, i); endBatch instanceof e.WebGLBatch ? endBatch.render(0, a + 1) : this.renderSpecial(endBatch, i); }), (e.WebGLRenderGroup.prototype.renderSpecial = function (t, i) { var s = t.vcount === e.visibleCount; t instanceof e.TilingSprite ? s && this.renderTilingSprite(t, i) : t instanceof e.Strip ? s && this.renderStrip(t, i) : t instanceof e.CustomRenderable ? s && t.renderWebGL(this, i) : t instanceof e.Graphics ? s && t.renderable && e.WebGLGraphics.renderGraphics(t, i) : t instanceof e.FilterBlock && this.handleFilterBlock(t, i); }), (flip = !1); var s = [], n = 0; return ( (e.WebGLRenderGroup.prototype.handleFilterBlock = function (t, i) { var r = e.gl; if (t.open) t.data instanceof Array ? this.filterManager.pushFilter(t) : (n++, s.push(t), r.enable(r.STENCIL_TEST), r.colorMask(!1, !1, !1, !1), r.stencilFunc(r.ALWAYS, 1, 1), r.stencilOp(r.KEEP, r.KEEP, r.INCR), e.WebGLGraphics.renderGraphics(t.data, i), r.colorMask(!0, !0, !0, !0), r.stencilFunc(r.NOTEQUAL, 0, s.length), r.stencilOp(r.KEEP, r.KEEP, r.KEEP)); else if (t.data instanceof Array) this.filterManager.popFilter(); else { var o = s.pop(t); o && (r.colorMask(!1, !1, !1, !1), r.stencilFunc(r.ALWAYS, 1, 1), r.stencilOp(r.KEEP, r.KEEP, r.DECR), e.WebGLGraphics.renderGraphics(o.data, i), r.colorMask(!0, !0, !0, !0), r.stencilFunc(r.NOTEQUAL, 0, s.length), r.stencilOp(r.KEEP, r.KEEP, r.KEEP)), r.disable(r.STENCIL_TEST); } }), (e.WebGLRenderGroup.prototype.updateTexture = function (t) { this.removeObject(t); for (var e = t.first; e != this.root && ((e = e._iPrev), !e.renderable || !e.__renderGroup); ); for (var i = t.last; i._iNext && ((i = i._iNext), !i.renderable || !i.__renderGroup); ); this.insertObject(t, e, i); }), (e.WebGLRenderGroup.prototype.addFilterBlocks = function (t, e) { (t.__renderGroup = this), (e.__renderGroup = this); for (var i = t; i != this.root.first && ((i = i._iPrev), !i.renderable || !i.__renderGroup); ); this.insertAfter(t, i); for (var s = e; s != this.root.first && ((s = s._iPrev), !s.renderable || !s.__renderGroup); ); this.insertAfter(e, s); }), (e.WebGLRenderGroup.prototype.removeFilterBlocks = function (t, e) { this.removeObject(t), this.removeObject(e); }), (e.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function (t) { t.__renderGroup && t.__renderGroup.removeDisplayObjectAndChildren(t); for (var e = t.first; e != this.root.first && ((e = e._iPrev), !e.renderable || !e.__renderGroup); ); for (var i = t.last; i._iNext && ((i = i._iNext), !i.renderable || !i.__renderGroup); ); var s = t.first, n = t.last._iNext; do (s.__renderGroup = this), s.renderable && (this.insertObject(s, e, i), (e = s)), (s = s._iNext); while (s != n); }), (e.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function (t) { if (t.__renderGroup == this) { { t.last; } do (t.__renderGroup = null), t.renderable && this.removeObject(t), (t = t._iNext); while (t); } }), (e.WebGLRenderGroup.prototype.insertObject = function (t, i, s) { var n = i, r = s; if (t instanceof e.Sprite) { var o, a; if (n instanceof e.Sprite) { if (((o = n.batch), o && o.texture == t.texture.baseTexture && o.blendMode == t.blendMode)) return void o.insertAfter(t, n); } else o = n; if (r) if (r instanceof e.Sprite) { if ((a = r.batch)) { if (a.texture == t.texture.baseTexture && a.blendMode == t.blendMode) return void a.insertBefore(t, r); if (a == o) { var h = o.split(r), l = e.WebGLRenderer.getBatch(), c = this.batchs.indexOf(o); return l.init(t), void this.batchs.splice(c + 1, 0, l, h); } } } else a = r; var l = e.WebGLRenderer.getBatch(); if ((l.init(t), o)) { var c = this.batchs.indexOf(o); this.batchs.splice(c + 1, 0, l); } else this.batchs.push(l); } else t instanceof e.TilingSprite ? this.initTilingSprite(t) : t instanceof e.Strip && this.initStrip(t), this.insertAfter(t, n); }), (e.WebGLRenderGroup.prototype.insertAfter = function (t, i) { if (i instanceof e.Sprite) { var s = i.batch; if (s) if (s.tail == i) { var n = this.batchs.indexOf(s); this.batchs.splice(n + 1, 0, t); } else { var r = s.split(i.__next), n = this.batchs.indexOf(s); this.batchs.splice(n + 1, 0, t, r); } else this.batchs.push(t); } else { var n = this.batchs.indexOf(i); this.batchs.splice(n + 1, 0, t); } }), (e.WebGLRenderGroup.prototype.removeObject = function (t) { var i; if (t instanceof e.Sprite) { var s = t.batch; if (!s) return; s.remove(t), 0 == s.size && (i = s); } else i = t; if (i) { var n = this.batchs.indexOf(i); if (-1 == n) return; if (0 == n || n == this.batchs.length - 1) return this.batchs.splice(n, 1), void (i instanceof e.WebGLBatch && e.WebGLRenderer.returnBatch(i)); if (this.batchs[n - 1] instanceof e.WebGLBatch && this.batchs[n + 1] instanceof e.WebGLBatch && this.batchs[n - 1].texture == this.batchs[n + 1].texture && this.batchs[n - 1].blendMode == this.batchs[n + 1].blendMode) return this.batchs[n - 1].merge(this.batchs[n + 1]), i instanceof e.WebGLBatch && e.WebGLRenderer.returnBatch(i), e.WebGLRenderer.returnBatch(this.batchs[n + 1]), void this.batchs.splice(n, 2); this.batchs.splice(n, 1), i instanceof e.WebGLBatch && e.WebGLRenderer.returnBatch(i); } }), (e.WebGLRenderGroup.prototype.initTilingSprite = function (t) { var e = this.gl; (t.verticies = new Float32Array([0, 0, t.width, 0, t.width, t.height, 0, t.height])), (t.uvs = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1])), (t.colors = new Float32Array([1, 1, 1, 1])), (t.indices = new Uint16Array([0, 1, 3, 2])), (t._vertexBuffer = e.createBuffer()), (t._indexBuffer = e.createBuffer()), (t._uvBuffer = e.createBuffer()), (t._colorBuffer = e.createBuffer()), e.bindBuffer(e.ARRAY_BUFFER, t._vertexBuffer), e.bufferData(e.ARRAY_BUFFER, t.verticies, e.STATIC_DRAW), e.bindBuffer(e.ARRAY_BUFFER, t._uvBuffer), e.bufferData(e.ARRAY_BUFFER, t.uvs, e.DYNAMIC_DRAW), e.bindBuffer(e.ARRAY_BUFFER, t._colorBuffer), e.bufferData(e.ARRAY_BUFFER, t.colors, e.STATIC_DRAW), e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, t._indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, t.indices, e.STATIC_DRAW), t.texture.baseTexture._glTexture ? (e.bindTexture(e.TEXTURE_2D, t.texture.baseTexture._glTexture), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S, e.REPEAT), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, e.REPEAT), (t.texture.baseTexture._powerOf2 = !0)) : (t.texture.baseTexture._powerOf2 = !0); }), (e.WebGLRenderGroup.prototype.renderStrip = function (t, i) { var s = this.gl; e.activateStripShader(); var n = e.stripShader, r = (n.program, e.mat3.clone(t.worldTransform)); e.mat3.transpose(r), s.uniformMatrix3fv(n.translationMatrix, !1, r), s.uniform2f(n.projectionVector, i.x, i.y), s.uniform2f(n.offsetVector, -e.offset.x, -e.offset.y), s.uniform1f(n.alpha, t.worldAlpha), t.dirty ? ((t.dirty = !1), s.bindBuffer(s.ARRAY_BUFFER, t._vertexBuffer), s.bufferData(s.ARRAY_BUFFER, t.verticies, s.STATIC_DRAW), s.vertexAttribPointer(n.aVertexPosition, 2, s.FLOAT, !1, 0, 0), s.bindBuffer(s.ARRAY_BUFFER, t._uvBuffer), s.bufferData(s.ARRAY_BUFFER, t.uvs, s.STATIC_DRAW), s.vertexAttribPointer(n.aTextureCoord, 2, s.FLOAT, !1, 0, 0), s.activeTexture(s.TEXTURE0), s.bindTexture(s.TEXTURE_2D, t.texture.baseTexture._glTexture), s.bindBuffer(s.ARRAY_BUFFER, t._colorBuffer), s.bufferData(s.ARRAY_BUFFER, t.colors, s.STATIC_DRAW), s.vertexAttribPointer(n.colorAttribute, 1, s.FLOAT, !1, 0, 0), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, t._indexBuffer), s.bufferData(s.ELEMENT_ARRAY_BUFFER, t.indices, s.STATIC_DRAW)) : (s.bindBuffer(s.ARRAY_BUFFER, t._vertexBuffer), s.bufferSubData(s.ARRAY_BUFFER, 0, t.verticies), s.vertexAttribPointer(n.aVertexPosition, 2, s.FLOAT, !1, 0, 0), s.bindBuffer(s.ARRAY_BUFFER, t._uvBuffer), s.vertexAttribPointer(n.aTextureCoord, 2, s.FLOAT, !1, 0, 0), s.activeTexture(s.TEXTURE0), s.bindTexture(s.TEXTURE_2D, t.texture.baseTexture._glTexture), s.bindBuffer(s.ARRAY_BUFFER, t._colorBuffer), s.vertexAttribPointer(n.colorAttribute, 1, s.FLOAT, !1, 0, 0), s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, t._indexBuffer)), s.drawElements(s.TRIANGLE_STRIP, t.indices.length, s.UNSIGNED_SHORT, 0), e.deactivateStripShader(); }), (e.WebGLRenderGroup.prototype.renderTilingSprite = function (t, i) { var s = this.gl, n = (e.shaderProgram, t.tilePosition), r = t.tileScale, o = n.x / t.texture.baseTexture.width, a = n.y / t.texture.baseTexture.height, h = t.width / t.texture.baseTexture.width / r.x, l = t.height / t.texture.baseTexture.height / r.y; (t.uvs[0] = 0 - o), (t.uvs[1] = 0 - a), (t.uvs[2] = 1 * h - o), (t.uvs[3] = 0 - a), (t.uvs[4] = 1 * h - o), (t.uvs[5] = 1 * l - a), (t.uvs[6] = 0 - o), (t.uvs[7] = 1 * l - a), s.bindBuffer(s.ARRAY_BUFFER, t._uvBuffer), s.bufferSubData(s.ARRAY_BUFFER, 0, t.uvs), this.renderStrip(t, i); }), (e.WebGLRenderGroup.prototype.initStrip = function (t) { { var e = this.gl; this.shaderProgram; } (t._vertexBuffer = e.createBuffer()), (t._indexBuffer = e.createBuffer()), (t._uvBuffer = e.createBuffer()), (t._colorBuffer = e.createBuffer()), e.bindBuffer(e.ARRAY_BUFFER, t._vertexBuffer), e.bufferData(e.ARRAY_BUFFER, t.verticies, e.DYNAMIC_DRAW), e.bindBuffer(e.ARRAY_BUFFER, t._uvBuffer), e.bufferData(e.ARRAY_BUFFER, t.uvs, e.STATIC_DRAW), e.bindBuffer(e.ARRAY_BUFFER, t._colorBuffer), e.bufferData(e.ARRAY_BUFFER, t.colors, e.STATIC_DRAW), e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, t._indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, t.indices, e.STATIC_DRAW); }), (e.initDefaultShaders = function () { (e.primitiveShader = new e.PrimitiveShader()), e.primitiveShader.init(), (e.stripShader = new e.StripShader()), e.stripShader.init(), (e.defaultShader = new e.PixiShader()), e.defaultShader.init(); var t = e.gl, i = e.defaultShader.program; t.useProgram(i), t.enableVertexAttribArray(e.defaultShader.aVertexPosition), t.enableVertexAttribArray(e.defaultShader.colorAttribute), t.enableVertexAttribArray(e.defaultShader.aTextureCoord); }), (e.activatePrimitiveShader = function () { var t = e.gl; t.useProgram(e.primitiveShader.program), t.disableVertexAttribArray(e.defaultShader.aVertexPosition), t.disableVertexAttribArray(e.defaultShader.colorAttribute), t.disableVertexAttribArray(e.defaultShader.aTextureCoord), t.enableVertexAttribArray(e.primitiveShader.aVertexPosition), t.enableVertexAttribArray(e.primitiveShader.colorAttribute); }), (e.deactivatePrimitiveShader = function () { var t = e.gl; t.useProgram(e.defaultShader.program), t.disableVertexAttribArray(e.primitiveShader.aVertexPosition), t.disableVertexAttribArray(e.primitiveShader.colorAttribute), t.enableVertexAttribArray(e.defaultShader.aVertexPosition), t.enableVertexAttribArray(e.defaultShader.colorAttribute), t.enableVertexAttribArray(e.defaultShader.aTextureCoord); }), (e.activateStripShader = function () { var t = e.gl; t.useProgram(e.stripShader.program); }), (e.deactivateStripShader = function () { var t = e.gl; t.useProgram(e.defaultShader.program); }), (e.CompileVertexShader = function (t, i) { return e._CompileShader(t, i, t.VERTEX_SHADER); }), (e.CompileFragmentShader = function (t, i) { return e._CompileShader(t, i, t.FRAGMENT_SHADER); }), (e._CompileShader = function (t, e, i) { var s = e.join("\n"), n = t.createShader(i); return t.shaderSource(n, s), t.compileShader(n), t.getShaderParameter(n, t.COMPILE_STATUS) ? n : (window.console.log(t.getShaderInfoLog(n)), null); }), (e.compileProgram = function (t, i) { var s = e.gl, n = e.CompileFragmentShader(s, i), r = e.CompileVertexShader(s, t), o = s.createProgram(); return s.attachShader(o, r), s.attachShader(o, n), s.linkProgram(o), s.getProgramParameter(o, s.LINK_STATUS) || window.console.log("Could not initialise shaders"), o; }), (e.BitmapText = function (t, i) { e.DisplayObjectContainer.call(this), this.setText(t), this.setStyle(i), this.updateText(), (this.dirty = !1); }), (e.BitmapText.prototype = Object.create(e.DisplayObjectContainer.prototype)), (e.BitmapText.prototype.constructor = e.BitmapText), (e.BitmapText.prototype.setText = function (t) { (this.text = t || " "), (this.dirty = !0); }), (e.BitmapText.prototype.setStyle = function (t) { (t = t || {}), (t.align = t.align || "left"), (this.style = t); var i = t.font.split(" "); (this.fontName = i[i.length - 1]), (this.fontSize = i.length >= 2 ? parseInt(i[i.length - 2], 10) : e.BitmapText.fonts[this.fontName].size), (this.dirty = !0); }), (e.BitmapText.prototype.updateText = function () { for (var t = e.BitmapText.fonts[this.fontName], i = new e.Point(), s = null, n = [], r = 0, o = [], a = 0, h = this.fontSize / t.size, l = 0; l < this.text.length; l++) { var c = this.text.charCodeAt(l); if (/(?:\r\n|\r|\n)/.test(this.text.charAt(l))) o.push(i.x), (r = Math.max(r, i.x)), a++, (i.x = 0), (i.y += t.lineHeight), (s = null); else { var u = t.chars[c]; u && (s && u[s] && (i.x += u.kerning[s]), n.push({ texture: u.texture, line: a, charCode: c, position: new e.Point(i.x + u.xOffset, i.y + u.yOffset) }), (i.x += u.xAdvance), (s = c)); } } o.push(i.x), (r = Math.max(r, i.x)); var d = []; for (l = 0; a >= l; l++) { var p = 0; "right" === this.style.align ? (p = r - o[l]) : "center" === this.style.align && (p = (r - o[l]) / 2), d.push(p); } for (l = 0; l < n.length; l++) { var f = new e.Sprite(n[l].texture); (f.position.x = (n[l].position.x + d[n[l].line]) * h), (f.position.y = n[l].position.y * h), (f.scale.x = f.scale.y = h), this.addChild(f); } (this.width = r * h), (this.height = (i.y + t.lineHeight) * h); }), (e.BitmapText.prototype.updateTransform = function () { if (this.dirty) { for (; this.children.length > 0; ) this.removeChild(this.getChildAt(0)); this.updateText(), (this.dirty = !1); } e.DisplayObjectContainer.prototype.updateTransform.call(this); }), (e.BitmapText.fonts = {}), (e.Text = function (t, i) { (this.canvas = document.createElement("canvas")), (this.context = this.canvas.getContext("2d")), e.Sprite.call(this, e.Texture.fromCanvas(this.canvas)), this.setText(t), this.setStyle(i), this.updateText(), (this.dirty = !1); }), (e.Text.prototype = Object.create(e.Sprite.prototype)), (e.Text.prototype.constructor = e.Text), (e.Text.prototype.setStyle = function (t) { (t = t || {}), (t.font = t.font || "bold 20pt Arial"), (t.fill = t.fill || "black"), (t.align = t.align || "left"), (t.stroke = t.stroke || "black"), (t.strokeThickness = t.strokeThickness || 0), (t.wordWrap = t.wordWrap || !1), (t.wordWrapWidth = t.wordWrapWidth || 100), (this.style = t), (this.dirty = !0); }), (e.Text.prototype.setText = function (t) { (this.text = t.toString() || " "), (this.dirty = !0); }), (e.Text.prototype.updateText = function () { this.context.font = this.style.font; var t = this.text; this.style.wordWrap && (t = this.wordWrap(this.text)); for (var i = t.split(/(?:\r\n|\r|\n)/), s = [], n = 0, r = 0; r < i.length; r++) { var o = this.context.measureText(i[r]).width; (s[r] = o), (n = Math.max(n, o)); } this.canvas.width = n + this.style.strokeThickness; var a = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; for ( this.canvas.height = a * i.length, this.context.fillStyle = this.style.fill, this.context.font = this.style.font, this.context.strokeStyle = this.style.stroke, this.context.lineWidth = this.style.strokeThickness, this.context.textBaseline = "top", r = 0; r < i.length; r++ ) { var h = new e.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + r * a); "right" === this.style.align ? (h.x += n - s[r]) : "center" === this.style.align && (h.x += (n - s[r]) / 2), this.style.stroke && this.style.strokeThickness && this.context.strokeText(i[r], h.x, h.y), this.style.fill && this.context.fillText(i[r], h.x, h.y); } this.updateTexture(); }), (e.Text.prototype.updateTexture = function () { (this.texture.baseTexture.width = this.canvas.width), (this.texture.baseTexture.height = this.canvas.height), (this.texture.frame.width = this.canvas.width), (this.texture.frame.height = this.canvas.height), (this._width = this.canvas.width), (this._height = this.canvas.height), e.texturesToUpdate.push(this.texture.baseTexture); }), (e.Text.prototype.updateTransform = function () { this.dirty && (this.updateText(), (this.dirty = !1)), e.Sprite.prototype.updateTransform.call(this); }), (e.Text.prototype.determineFontHeight = function (t) { var i = e.Text.heightCache[t]; if (!i) { var s = document.getElementsByTagName("body")[0], n = document.createElement("div"), r = document.createTextNode("M"); n.appendChild(r), n.setAttribute("style", t + ";position:absolute;top:0;left:0"), s.appendChild(n), (i = n.offsetHeight), (e.Text.heightCache[t] = i), s.removeChild(n); } return i; }), (e.Text.prototype.wordWrap = function (t) { for (var e = "", i = t.split("\n"), s = 0; s < i.length; s++) { for (var n = this.style.wordWrapWidth, r = i[s].split(" "), o = 0; o < r.length; o++) { var a = this.context.measureText(r[o]).width, h = a + this.context.measureText(" ").width; h > n ? (o > 0 && (e += "\n"), (e += r[o] + " "), (n = this.style.wordWrapWidth - a)) : ((n -= h), (e += r[o] + " ")); } e += "\n"; } return e; }), (e.Text.prototype.destroy = function (t) { t && this.texture.destroy(); }), (e.Text.heightCache = {}), (e.BaseTextureCache = {}), (e.texturesToUpdate = []), (e.texturesToDestroy = []), (e.BaseTexture = function (t, i) { if ((e.EventTarget.call(this), (this.width = 100), (this.height = 100), (this.scaleMode = i || e.BaseTexture.SCALE_MODE.DEFAULT), (this.hasLoaded = !1), (this.source = t), t)) { if (this.source instanceof Image || this.source instanceof HTMLImageElement) if (this.source.complete) (this.hasLoaded = !0), (this.width = this.source.width), (this.height = this.source.height), e.texturesToUpdate.push(this); else { var s = this; this.source.onload = function () { (s.hasLoaded = !0), (s.width = s.source.width), (s.height = s.source.height), e.texturesToUpdate.push(s), s.dispatchEvent({ type: "loaded", content: s }); }; } else (this.hasLoaded = !0), (this.width = this.source.width), (this.height = this.source.height), e.texturesToUpdate.push(this); (this.imageUrl = null), (this._powerOf2 = !1); } }), (e.BaseTexture.prototype.constructor = e.BaseTexture), (e.BaseTexture.prototype.destroy = function () { this.source instanceof Image && (this.imageUrl in e.BaseTextureCache && delete e.BaseTextureCache[this.imageUrl], (this.imageUrl = null), (this.source.src = null)), (this.source = null), e.texturesToDestroy.push(this); }), (e.BaseTexture.prototype.updateSourceImage = function (t) { (this.hasLoaded = !1), (this.source.src = null), (this.source.src = t); }), (e.BaseTexture.fromImage = function (t, i, s) { var n = e.BaseTextureCache[t]; if (!n) { var r = new Image(); i && (r.crossOrigin = ""), (r.src = t), (n = new e.BaseTexture(r, s)), (n.imageUrl = t), (e.BaseTextureCache[t] = n); } return n; }), (e.BaseTexture.SCALE_MODE = { DEFAULT: 0, LINEAR: 0, NEAREST: 1 }), (e.TextureCache = {}), (e.FrameCache = {}), (e.Texture = function (t, i) { if ( (e.EventTarget.call(this), i || ((this.noFrame = !0), (i = new e.Rectangle(0, 0, 1, 1))), t instanceof e.Texture && (t = t.baseTexture), (this.baseTexture = t), (this.frame = i), (this.trim = new e.Point()), (this.scope = this), t.hasLoaded) ) this.noFrame && (i = new e.Rectangle(0, 0, t.width, t.height)), this.setFrame(i); else { var s = this; t.addEventListener("loaded", function () { s.onBaseTextureLoaded(); }); } }), (e.Texture.prototype.constructor = e.Texture), (e.Texture.prototype.onBaseTextureLoaded = function () { var t = this.baseTexture; t.removeEventListener("loaded", this.onLoaded), this.noFrame && (this.frame = new e.Rectangle(0, 0, t.width, t.height)), (this.noFrame = !1), (this.width = this.frame.width), (this.height = this.frame.height), this.scope.dispatchEvent({ type: "update", content: this }); }), (e.Texture.prototype.destroy = function (t) { t && this.baseTexture.destroy(); }), (e.Texture.prototype.setFrame = function (t) { if (((this.frame = t), (this.width = t.width), (this.height = t.height), t.x + t.width > this.baseTexture.width || t.y + t.height > this.baseTexture.height)) throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); (this.updateFrame = !0), e.Texture.frameUpdates.push(this); }), (e.Texture.fromImage = function (t, i, s) { var n = e.TextureCache[t]; return n || ((n = new e.Texture(e.BaseTexture.fromImage(t, i, s))), (e.TextureCache[t] = n)), n; }), (e.Texture.fromFrame = function (t) { var i = e.TextureCache[t]; if (!i) throw new Error('The frameId "' + t + '" does not exist in the texture cache ' + this); return i; }), (e.Texture.fromCanvas = function (t, i) { var s = new e.BaseTexture(t, i); return new e.Texture(s); }), (e.Texture.addTextureToCache = function (t, i) { e.TextureCache[i] = t; }), (e.Texture.removeTextureFromCache = function (t) { var i = e.TextureCache[t]; return (e.TextureCache[t] = null), i; }), (e.Texture.frameUpdates = []), (e.Texture.SCALE_MODE = e.BaseTexture.SCALE_MODE), (e.RenderTexture = function (t, i) { e.EventTarget.call(this), (this.width = t || 100), (this.height = i || 100), (this.indetityMatrix = e.mat3.create()), (this.frame = new e.Rectangle(0, 0, this.width, this.height)), e.gl ? this.initWebGL() : this.initCanvas(); }), (e.RenderTexture.prototype = Object.create(e.Texture.prototype)), (e.RenderTexture.prototype.constructor = e.RenderTexture), (e.RenderTexture.prototype.initWebGL = function () { var t = e.gl; (this.glFramebuffer = t.createFramebuffer()), t.bindFramebuffer(t.FRAMEBUFFER, this.glFramebuffer), (this.glFramebuffer.width = this.width), (this.glFramebuffer.height = this.height), (this.baseTexture = new e.BaseTexture()), (this.baseTexture.width = this.width), (this.baseTexture.height = this.height), (this.baseTexture._glTexture = t.createTexture()), t.bindTexture(t.TEXTURE_2D, this.baseTexture._glTexture), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, this.width, this.height, 0, t.RGBA, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), (this.baseTexture.isRender = !0), t.bindFramebuffer(t.FRAMEBUFFER, this.glFramebuffer), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.baseTexture._glTexture, 0), (this.projection = new e.Point(this.width / 2, -this.height / 2)), (this.render = this.renderWebGL); }), (e.RenderTexture.prototype.resize = function (t, i) { if (((this.width = t), (this.height = i), e.gl)) { (this.projection.x = this.width / 2), (this.projection.y = -this.height / 2); var s = e.gl; s.bindTexture(s.TEXTURE_2D, this.baseTexture._glTexture), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, this.width, this.height, 0, s.RGBA, s.UNSIGNED_BYTE, null); } else (this.frame.width = this.width), (this.frame.height = this.height), this.renderer.resize(this.width, this.height); }), (e.RenderTexture.prototype.initCanvas = function () { (this.renderer = new e.CanvasRenderer(this.width, this.height, null, 0)), (this.baseTexture = new e.BaseTexture(this.renderer.view)), (this.frame = new e.Rectangle(0, 0, this.width, this.height)), (this.render = this.renderCanvas); }), (e.RenderTexture.prototype.renderWebGL = function (t, i, s) { var n = e.gl; n.colorMask(!0, !0, !0, !0), n.viewport(0, 0, this.width, this.height), n.bindFramebuffer(n.FRAMEBUFFER, this.glFramebuffer), s && (n.clearColor(0, 0, 0, 0), n.clear(n.COLOR_BUFFER_BIT)); var r = t.children, o = t.worldTransform; (t.worldTransform = e.mat3.create()), (t.worldTransform[4] = -1), (t.worldTransform[5] = -2 * this.projection.y), i && ((t.worldTransform[2] = i.x), (t.worldTransform[5] -= i.y)), e.visibleCount++, (t.vcount = e.visibleCount); for (var a = 0, h = r.length; h > a; a++) r[a].updateTransform(); var l = t.__renderGroup; l ? t === l.root ? l.render(this.projection, this.glFramebuffer) : l.renderSpecific(t, this.projection, this.glFramebuffer) : (this.renderGroup || (this.renderGroup = new e.WebGLRenderGroup(n)), this.renderGroup.setRenderable(t), this.renderGroup.render(this.projection, this.glFramebuffer)), (t.worldTransform = o); }), (e.RenderTexture.prototype.renderCanvas = function (t, i, s) { var n = t.children; (t.worldTransform = e.mat3.create()), i && ((t.worldTransform[2] = i.x), (t.worldTransform[5] = i.y)); for (var r = 0, o = n.length; o > r; r++) n[r].updateTransform(); s && this.renderer.context.clearRect(0, 0, this.width, this.height), this.renderer.renderDisplayObject(t), this.renderer.context.setTransform(1, 0, 0, 1, 0, 0); }), (e.EventTarget = function () { var t = {}; (this.addEventListener = this.on = function (e, i) { void 0 === t[e] && (t[e] = []), -1 === t[e].indexOf(i) && t[e].push(i); }), (this.dispatchEvent = this.emit = function (e) { if (t[e.type] && t[e.type].length) for (var i = 0, s = t[e.type].length; s > i; i++) t[e.type][i](e); }), (this.removeEventListener = this.off = function (e, i) { var s = t[e].indexOf(i); -1 !== s && t[e].splice(s, 1); }), (this.removeAllEventListeners = function (e) { var i = t[e]; i && (i.length = 0); }); }), (e.PolyK = {}), (e.PolyK.Triangulate = function (t) { var i = !0, s = t.length >> 1; if (3 > s) return []; for (var n = [], r = [], o = 0; s > o; o++) r.push(o); o = 0; for (var a = s; a > 3; ) { var h = r[(o + 0) % a], l = r[(o + 1) % a], c = r[(o + 2) % a], u = t[2 * h], d = t[2 * h + 1], p = t[2 * l], f = t[2 * l + 1], g = t[2 * c], m = t[2 * c + 1], y = !1; if (e.PolyK._convex(u, d, p, f, g, m, i)) { y = !0; for (var _ = 0; a > _; _++) { var x = r[_]; if (x !== h && x !== l && x !== c && e.PolyK._PointInTriangle(t[2 * x], t[2 * x + 1], u, d, p, f, g, m)) { y = !1; break; } } } if (y) n.push(h, l, c), r.splice((o + 1) % a, 1), a--, (o = 0); else if (o++ > 3 * a) { if (!i) return window.console.log("PIXI Warning: shape too complex to fill"), []; for (n = [], r = [], o = 0; s > o; o++) r.push(o); (o = 0), (a = s), (i = !1); } } return n.push(r[0], r[1], r[2]), n; }), (e.PolyK._PointInTriangle = function (t, e, i, s, n, r, o, a) { var h = o - i, l = a - s, c = n - i, u = r - s, d = t - i, p = e - s, f = h * h + l * l, g = h * c + l * u, m = h * d + l * p, y = c * c + u * u, _ = c * d + u * p, x = 1 / (f * y - g * g), v = (y * m - g * _) * x, b = (f * _ - g * m) * x; return v >= 0 && b >= 0 && 1 > v + b; }), (e.PolyK._convex = function (t, e, i, s, n, r, o) { return (e - s) * (n - i) + (i - t) * (r - s) >= 0 === o; }), (i.Camera = function (t, e, s, n, r, o) { (this.game = t), (this.world = t.world), (this.id = 0), (this.view = new i.Rectangle(s, n, r, o)), (this.screenView = new i.Rectangle(s, n, r, o)), (this.bounds = new i.Rectangle(s, n, r, o)), (this.deadzone = null), (this.visible = !0), (this.atLimit = { x: !1, y: !1 }), (this.target = null), (this._edge = 0), (this.displayObject = null); }), (i.Camera.FOLLOW_LOCKON = 0), (i.Camera.FOLLOW_PLATFORMER = 1), (i.Camera.FOLLOW_TOPDOWN = 2), (i.Camera.FOLLOW_TOPDOWN_TIGHT = 3), (i.Camera.prototype = { follow: function (t, e) { "undefined" == typeof e && (e = i.Camera.FOLLOW_LOCKON), (this.target = t); var s; switch (e) { case i.Camera.FOLLOW_PLATFORMER: var n = this.width / 8, r = this.height / 3; this.deadzone = new i.Rectangle((this.width - n) / 2, (this.height - r) / 2 - 0.25 * r, n, r); break; case i.Camera.FOLLOW_TOPDOWN: (s = Math.max(this.width, this.height) / 4), (this.deadzone = new i.Rectangle((this.width - s) / 2, (this.height - s) / 2, s, s)); break; case i.Camera.FOLLOW_TOPDOWN_TIGHT: (s = Math.max(this.width, this.height) / 8), (this.deadzone = new i.Rectangle((this.width - s) / 2, (this.height - s) / 2, s, s)); break; case i.Camera.FOLLOW_LOCKON: this.deadzone = null; break; default: this.deadzone = null; } }, focusOn: function (t) { this.setPosition(Math.round(t.x - this.view.halfWidth), Math.round(t.y - this.view.halfHeight)); }, focusOnXY: function (t, e) { this.setPosition(Math.round(t - this.view.halfWidth), Math.round(e - this.view.halfHeight)); }, update: function () { this.target && this.updateTarget(), this.bounds && this.checkBounds(), (this.displayObject.position.x = -this.view.x), (this.displayObject.position.y = -this.view.y); }, updateTarget: function () { this.deadzone ? ((this._edge = this.target.x - this.deadzone.x), this.view.x > this._edge && (this.view.x = this._edge), (this._edge = this.target.x + this.target.width - this.deadzone.x - this.deadzone.width), this.view.x < this._edge && (this.view.x = this._edge), (this._edge = this.target.y - this.deadzone.y), this.view.y > this._edge && (this.view.y = this._edge), (this._edge = this.target.y + this.target.height - this.deadzone.y - this.deadzone.height), this.view.y < this._edge && (this.view.y = this._edge)) : this.focusOnXY(this.target.x, this.target.y); }, setBoundsToWorld: function () { this.bounds.setTo(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height); }, checkBounds: function () { (this.atLimit.x = !1), (this.atLimit.y = !1), this.view.x < this.bounds.x && ((this.atLimit.x = !0), (this.view.x = this.bounds.x)), this.view.right > this.bounds.right && ((this.atLimit.x = !0), (this.view.x = this.bounds.right - this.width)), this.view.y < this.bounds.top && ((this.atLimit.y = !0), (this.view.y = this.bounds.top)), this.view.bottom > this.bounds.bottom && ((this.atLimit.y = !0), (this.view.y = this.bounds.bottom - this.height)), this.view.floor(); }, setPosition: function (t, e) { (this.view.x = t), (this.view.y = e), this.bounds && this.checkBounds(); }, setSize: function (t, e) { (this.view.width = t), (this.view.height = e); }, }), (i.Camera.prototype.constructor = i.Camera), Object.defineProperty(i.Camera.prototype, "x", { get: function () { return this.view.x; }, set: function (t) { (this.view.x = t), this.bounds && this.checkBounds(); }, }), Object.defineProperty(i.Camera.prototype, "y", { get: function () { return this.view.y; }, set: function (t) { (this.view.y = t), this.bounds && this.checkBounds(); }, }), Object.defineProperty(i.Camera.prototype, "width", { get: function () { return this.view.width; }, set: function (t) { this.view.width = t; }, }), Object.defineProperty(i.Camera.prototype, "height", { get: function () { return this.view.height; }, set: function (t) { this.view.height = t; }, }), (i.State = function () { (this.game = null), (this.add = null), (this.camera = null), (this.cache = null), (this.input = null), (this.load = null), (this.math = null), (this.sound = null), (this.stage = null), (this.time = null), (this.tweens = null), (this.world = null), (this.particles = null), (this.physics = null); }), (i.State.prototype = { preload: function () {}, loadUpdate: function () {}, loadRender: function () {}, create: function () {}, update: function () {}, render: function () {}, paused: function () {}, destroy: function () {} }), (i.State.prototype.constructor = i.State), (i.StateManager = function (t, e) { (this.game = t), (this.states = {}), (this._pendingState = null), "undefined" != typeof e && null !== e && (this._pendingState = e), (this._created = !1), (this.current = ""), (this.onInitCallback = null), (this.onPreloadCallback = null), (this.onCreateCallback = null), (this.onUpdateCallback = null), (this.onRenderCallback = null), (this.onPreRenderCallback = null), (this.onLoadUpdateCallback = null), (this.onLoadRenderCallback = null), (this.onPausedCallback = null), (this.onShutDownCallback = null); }), (i.StateManager.prototype = { boot: function () { this.game.onPause.add(this.pause, this), this.game.onResume.add(this.resume, this), null !== this._pendingState && ("string" == typeof this._pendingState ? this.start(this._pendingState, !1, !1) : this.add("default", this._pendingState, !0)); }, add: function (t, e, s) { "undefined" == typeof s && (s = !1); var n; return ( e instanceof i.State ? (n = e) : "object" == typeof e ? ((n = e), (n.game = this.game)) : "function" == typeof e && (n = new e(this.game)), (this.states[t] = n), s && (this.game.isBooted ? this.start(t) : (this._pendingState = t)), n ); }, remove: function (t) { this.current == t && ((this.callbackContext = null), (this.onInitCallback = null), (this.onShutDownCallback = null), (this.onPreloadCallback = null), (this.onLoadRenderCallback = null), (this.onLoadUpdateCallback = null), (this.onCreateCallback = null), (this.onUpdateCallback = null), (this.onRenderCallback = null), (this.onPausedCallback = null), (this.onDestroyCallback = null)), delete this.states[t]; }, start: function (t, e, i) { return ( "undefined" == typeof e && (e = !0), "undefined" == typeof i && (i = !1), this.game.isBooted === !1 ? void (this._pendingState = t) : void ( this.checkState(t) !== !1 && (this.current && this.onShutDownCallback.call(this.callbackContext, this.game), e && (this.game.tweens.removeAll(), this.game.world.destroy(), i === !0 && this.game.cache.destroy()), this.setCurrentState(t), this.onPreloadCallback ? (this.game.load.reset(), this.onPreloadCallback.call(this.callbackContext, this.game), 0 === this.game.load.totalQueuedFiles() ? this.game.loadComplete() : this.game.load.start()) : this.game.loadComplete()) ) ); }, dummy: function () {}, checkState: function (t) { if (this.states[t]) { var e = !1; return ( this.states[t].preload && (e = !0), e === !1 && this.states[t].loadRender && (e = !0), e === !1 && this.states[t].loadUpdate && (e = !0), e === !1 && this.states[t].create && (e = !0), e === !1 && this.states[t].update && (e = !0), e === !1 && this.states[t].preRender && (e = !0), e === !1 && this.states[t].render && (e = !0), e === !1 && this.states[t].paused && (e = !0), e === !1 ? (console.warn("Invalid Phaser State object given. Must contain at least a one of the required functions."), !1) : !0 ); } return console.warn("Phaser.StateManager - No state found with the key: " + t), !1; }, link: function (t) { (this.states[t].game = this.game), (this.states[t].add = this.game.add), (this.states[t].camera = this.game.camera), (this.states[t].cache = this.game.cache), (this.states[t].input = this.game.input), (this.states[t].load = this.game.load), (this.states[t].math = this.game.math), (this.states[t].sound = this.game.sound), (this.states[t].stage = this.game.stage), (this.states[t].time = this.game.time), (this.states[t].tweens = this.game.tweens), (this.states[t].world = this.game.world), (this.states[t].particles = this.game.particles), (this.states[t].physics = this.game.physics), (this.states[t].rnd = this.game.rnd); }, setCurrentState: function (t) { (this.callbackContext = this.states[t]), this.link(t), (this.onInitCallback = this.states[t].init || this.dummy), (this.onPreloadCallback = this.states[t].preload || null), (this.onLoadRenderCallback = this.states[t].loadRender || null), (this.onLoadUpdateCallback = this.states[t].loadUpdate || null), (this.onCreateCallback = this.states[t].create || null), (this.onUpdateCallback = this.states[t].update || null), (this.onPreRenderCallback = this.states[t].preRender || null), (this.onRenderCallback = this.states[t].render || null), (this.onPausedCallback = this.states[t].paused || null), (this.onShutDownCallback = this.states[t].shutdown || this.dummy), (this.current = t), (this._created = !1), this.onInitCallback.call(this.callbackContext, this.game); }, getCurrentState: function () { return this.states[this.current]; }, loadComplete: function () { this._created === !1 && this.onCreateCallback ? ((this._created = !0), this.onCreateCallback.call(this.callbackContext, this.game)) : (this._created = !0); }, pause: function () { this._created && this.onPausedCallback && this.onPausedCallback.call(this.callbackContext, this.game, !0); }, resume: function () { this._created && this.onre && this.onPausedCallback.call(this.callbackContext, this.game, !1); }, update: function () { this._created && this.onUpdateCallback ? this.onUpdateCallback.call(this.callbackContext, this.game) : this.onLoadUpdateCallback && this.onLoadUpdateCallback.call(this.callbackContext, this.game); }, preRender: function () { this.onPreRenderCallback && this.onPreRenderCallback.call(this.callbackContext, this.game); }, render: function () { this._created && this.onRenderCallback ? (this.game.renderType === i.CANVAS && (this.game.context.save(), this.game.context.setTransform(1, 0, 0, 1, 0, 0)), this.onRenderCallback.call(this.callbackContext, this.game), this.game.renderType === i.CANVAS && this.game.context.restore()) : this.onLoadRenderCallback && this.onLoadRenderCallback.call(this.callbackContext, this.game); }, destroy: function () { (this.callbackContext = null), (this.onInitCallback = null), (this.onShutDownCallback = null), (this.onPreloadCallback = null), (this.onLoadRenderCallback = null), (this.onLoadUpdateCallback = null), (this.onCreateCallback = null), (this.onUpdateCallback = null), (this.onRenderCallback = null), (this.onPausedCallback = null), (this.onDestroyCallback = null), (this.game = null), (this.states = {}), (this._pendingState = null); }, }), (i.StateManager.prototype.constructor = i.StateManager), (i.LinkedList = function () { (this.next = null), (this.prev = null), (this.first = null), (this.last = null), (this.total = 0); }), (i.LinkedList.prototype = { add: function (t) { return 0 === this.total && null == this.first && null == this.last ? ((this.first = t), (this.last = t), (this.next = t), (t.prev = this), this.total++, t) : ((this.last.next = t), (t.prev = this.last), (this.last = t), this.total++, t); }, remove: function (t) { t == this.first ? (this.first = this.first.next) : t == this.last && (this.last = this.last.prev), t.prev && (t.prev.next = t.next), t.next && (t.next.prev = t.prev), (t.next = t.prev = null), null == this.first && (this.last = null), this.total--; }, callAll: function (t) { if (this.first && this.last) { var e = this.first; do e && e[t] && e[t].call(e), (e = e.next); while (e != this.last.next); } }, }), (i.LinkedList.prototype.constructor = i.LinkedList), (i.Signal = function () { (this._bindings = []), (this._prevParams = null); var t = this; this.dispatch = function () { i.Signal.prototype.dispatch.apply(t, arguments); }; }), (i.Signal.prototype = { memorize: !1, _shouldPropagate: !0, active: !0, validateListener: function (t, e) { if ("function" != typeof t) throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}", e)); }, _registerListener: function (t, e, s, n) { var r, o = this._indexOfListener(t, s); if (-1 !== o) { if (((r = this._bindings[o]), r.isOnce() !== e)) throw new Error("You cannot add" + (e ? "" : "Once") + "() then add" + (e ? "Once" : "") + "() the same listener without removing the relationship first."); } else (r = new i.SignalBinding(this, t, e, s, n)), this._addBinding(r); return this.memorize && this._prevParams && r.execute(this._prevParams), r; }, _addBinding: function (t) { var e = this._bindings.length; do --e; while (this._bindings[e] && t._priority <= this._bindings[e]._priority); this._bindings.splice(e + 1, 0, t); }, _indexOfListener: function (t, e) { for (var i, s = this._bindings.length; s--; ) if (((i = this._bindings[s]), i._listener === t && i.context === e)) return s; return -1; }, has: function (t, e) { return -1 !== this._indexOfListener(t, e); }, add: function (t, e, i) { return this.validateListener(t, "add"), this._registerListener(t, !1, e, i); }, addOnce: function (t, e, i) { return this.validateListener(t, "addOnce"), this._registerListener(t, !0, e, i); }, remove: function (t, e) { this.validateListener(t, "remove"); var i = this._indexOfListener(t, e); return -1 !== i && (this._bindings[i]._destroy(), this._bindings.splice(i, 1)), t; }, removeAll: function () { for (var t = this._bindings.length; t--; ) this._bindings[t]._destroy(); this._bindings.length = 0; }, getNumListeners: function () { return this._bindings.length; }, halt: function () { this._shouldPropagate = !1; }, dispatch: function () { if (this.active) { var t, e = Array.prototype.slice.call(arguments), i = this._bindings.length; if ((this.memorize && (this._prevParams = e), i)) { (t = this._bindings.slice()), (this._shouldPropagate = !0); do i--; while (t[i] && this._shouldPropagate && t[i].execute(e) !== !1); } } }, forget: function () { this._prevParams = null; }, dispose: function () { this.removeAll(), delete this._bindings, delete this._prevParams; }, toString: function () { return "[Phaser.Signal active:" + this.active + " numListeners:" + this.getNumListeners() + "]"; }, }), (i.Signal.prototype.constructor = i.Signal), (i.SignalBinding = function (t, e, i, s, n) { (this._listener = e), (this._isOnce = i), (this.context = s), (this._signal = t), (this._priority = n || 0); }), (i.SignalBinding.prototype = { active: !0, params: null, execute: function (t) { var e, i; return this.active && this._listener && ((i = this.params ? this.params.concat(t) : t), (e = this._listener.apply(this.context, i)), this._isOnce && this.detach()), e; }, detach: function () { return this.isBound() ? this._signal.remove(this._listener, this.context) : null; }, isBound: function () { return !!this._signal && !!this._listener; }, isOnce: function () { return this._isOnce; }, getListener: function () { return this._listener; }, getSignal: function () { return this._signal; }, _destroy: function () { delete this._signal, delete this._listener, delete this.context; }, toString: function () { return "[Phaser.SignalBinding isOnce:" + this._isOnce + ", isBound:" + this.isBound() + ", active:" + this.active + "]"; }, }), (i.SignalBinding.prototype.constructor = i.SignalBinding), (i.Filter = function (t, e, s) { (this.game = t), (this.type = i.WEBGL_FILTER), (this.passes = [this]), (this.dirty = !0), (this.padding = 0), (this.uniforms = { time: { type: "1f", value: 0 }, resolution: { type: "2f", value: { x: 256, y: 256 } }, mouse: { type: "2f", value: { x: 0, y: 0 } } }), (this.fragmentSrc = s || []); }), (i.Filter.prototype = { init: function () {}, setResolution: function (t, e) { (this.uniforms.resolution.value.x = t), (this.uniforms.resolution.value.y = e); }, update: function (t) { "undefined" != typeof t && (t.x > 0 && (this.uniforms.mouse.x = t.x.toFixed(2)), t.y > 0 && (this.uniforms.mouse.y = t.y.toFixed(2))), (this.uniforms.time.value = this.game.time.totalElapsedSeconds()); }, destroy: function () { this.game = null; }, }), (i.Filter.prototype.constructor = i.Filter), Object.defineProperty(i.Filter.prototype, "width", { get: function () { return this.uniforms.resolution.value.x; }, set: function (t) { this.uniforms.resolution.value.x = t; }, }), Object.defineProperty(i.Filter.prototype, "height", { get: function () { return this.uniforms.resolution.value.y; }, set: function (t) { this.uniforms.resolution.value.y = t; }, }), (i.Plugin = function (t, e) { "undefined" == typeof e && (e = null), (this.game = t), (this.parent = e), (this.active = !1), (this.visible = !1), (this.hasPreUpdate = !1), (this.hasUpdate = !1), (this.hasPostUpdate = !1), (this.hasRender = !1), (this.hasPostRender = !1); }), (i.Plugin.prototype = { preUpdate: function () {}, update: function () {}, render: function () {}, postRender: function () {}, destroy: function () { (this.game = null), (this.parent = null), (this.active = !1), (this.visible = !1); }, }), (i.Plugin.prototype.constructor = i.Plugin), (i.PluginManager = function (t, e) { (this.game = t), (this._parent = e), (this.plugins = []), (this._pluginsLength = 0); }), (i.PluginManager.prototype = { add: function (t) { var e = !1; return ( "function" == typeof t ? (t = new t(this.game, this._parent)) : ((t.game = this.game), (t.parent = this._parent)), "function" == typeof t.preUpdate && ((t.hasPreUpdate = !0), (e = !0)), "function" == typeof t.update && ((t.hasUpdate = !0), (e = !0)), "function" == typeof t.postUpdate && ((t.hasPostUpdate = !0), (e = !0)), "function" == typeof t.render && ((t.hasRender = !0), (e = !0)), "function" == typeof t.postRender && ((t.hasPostRender = !0), (e = !0)), e ? ((t.hasPreUpdate || t.hasUpdate || t.hasPostUpdate) && (t.active = !0), (t.hasRender || t.hasPostRender) && (t.visible = !0), (this._pluginsLength = this.plugins.push(t)), "function" == typeof t.init && t.init(), t) : null ); }, remove: function (t) { if (0 !== this._pluginsLength) for (this._p = 0; this._p < this._pluginsLength; this._p++) if (this.plugins[this._p] === t) return t.destroy(), this.plugins.splice(this._p, 1), void this._pluginsLength--; }, removeAll: function () { for (this._p = 0; this._p < this._pluginsLength; this._p++) this.plugins[this._p].destroy(); (this.plugins.length = 0), (this._pluginsLength = 0); }, preUpdate: function () { if (0 !== this._pluginsLength) for (this._p = 0; this._p < this._pluginsLength; this._p++) this.plugins[this._p].active && this.plugins[this._p].hasPreUpdate && this.plugins[this._p].preUpdate(); }, update: function () { if (0 !== this._pluginsLength) for (this._p = 0; this._p < this._pluginsLength; this._p++) this.plugins[this._p].active && this.plugins[this._p].hasUpdate && this.plugins[this._p].update(); }, postUpdate: function () { if (0 !== this._pluginsLength) for (this._p = 0; this._p < this._pluginsLength; this._p++) this.plugins[this._p].active && this.plugins[this._p].hasPostUpdate && this.plugins[this._p].postUpdate(); }, render: function () { if (0 !== this._pluginsLength) for (this._p = 0; this._p < this._pluginsLength; this._p++) this.plugins[this._p].visible && this.plugins[this._p].hasRender && this.plugins[this._p].render(); }, postRender: function () { if (0 !== this._pluginsLength) for (this._p = 0; this._p < this._pluginsLength; this._p++) this.plugins[this._p].visible && this.plugins[this._p].hasPostRender && this.plugins[this._p].postRender(); }, destroy: function () { (this.plugins.length = 0), (this._pluginsLength = 0), (this.game = null), (this._parent = null); }, }), (i.PluginManager.prototype.constructor = i.PluginManager), (i.Stage = function (t, s, n) { (this.game = t), (this._backgroundColor = "rgb(0,0,0)"), (this.offset = new i.Point()), (this.canvas = null), (this._stage = new e.Stage(0, !1)), (this._stage.name = "_stage_root"), (this._stage.interactive = !1), (this.display = this._stage), (this.scaleMode = i.StageScaleMode.NO_SCALE), (this.fullScreenScaleMode = i.StageScaleMode.NO_SCALE), (this.scale = new i.StageScaleMode(this.game, s, n)), (this.aspectRatio = s / n), (this.disableVisibilityChange = !1), (this._nextOffsetCheck = 0), (this.checkOffsetInterval = 2500), t.config ? this.parseConfig(t.config) : ((this.canvas = i.Canvas.create(s, n)), (this.canvas.style["-webkit-full-screen"] = "width: 100%; height: 100%")); }), (i.Stage.prototype = { parseConfig: function (t) { (this.canvas = t.canvasID ? i.Canvas.create(this.game.width, this.game.height, t.canvasID) : i.Canvas.create(this.game.width, this.game.height)), t.canvasStyle ? (this.canvas.stlye = t.canvasStyle) : (this.canvas.style["-webkit-full-screen"] = "width: 100%; height: 100%"), t.checkOffsetInterval && (this.checkOffsetInterval = t.checkOffsetInterval), t.disableVisibilityChange && (this.disableVisibilityChange = t.disableVisibilityChange), t.fullScreenScaleMode && (this.fullScreenScaleMode = t.fullScreenScaleMode), t.scaleMode && (this.scaleMode = t.scaleMode), t.backgroundColor && (this.backgroundColor = t.backgroundColor); }, boot: function () { i.Canvas.getOffset(this.canvas, this.offset), (this.bounds = new i.Rectangle(this.offset.x, this.offset.y, this.game.width, this.game.height)); var t = this; (this._onChange = function (e) { return t.visibilityChange(e); }), i.Canvas.setUserSelect(this.canvas, "none"), i.Canvas.setTouchAction(this.canvas, "none"), (this.backgroundColor = "#000"), document.addEventListener("visibilitychange", this._onChange, !1), document.addEventListener("webkitvisibilitychange", this._onChange, !1), document.addEventListener("pagehide", this._onChange, !1), document.addEventListener("pageshow", this._onChange, !1), (window.onblur = this._onChange), (window.onfocus = this._onChange); }, update: function () { this.checkOffsetInterval !== !1 && this.game.time.now > this._nextOffsetCheck && (i.Canvas.getOffset(this.canvas, this.offset), (this._nextOffsetCheck = this.game.time.now + this.checkOffsetInterval)); }, visibilityChange: function (t) { this.disableVisibilityChange || (this.game.paused = this.game.paused !== !1 || ("pagehide" != t.type && "blur" != t.type && document.hidden !== !0 && document.webkitHidden !== !0) ? !1 : !0); }, }), (i.Stage.prototype.constructor = i.Stage), Object.defineProperty(i.Stage.prototype, "backgroundColor", { get: function () { return this._backgroundColor; }, set: function (t) { (this._backgroundColor = t), this.game.transparent === !1 && (this.game.renderType == i.CANVAS ? (this.game.canvas.style.backgroundColor = t) : ("string" == typeof t && (t = i.Color.hexToRGB(t)), this._stage.setBackgroundColor(t))); }, }), (i.Group = function (t, s, n, r) { (this.game = t), "undefined" == typeof s && (s = t.world), (this.name = n || "group"), "undefined" == typeof r && (r = !1), r ? (this._container = this.game.stage._stage) : ((this._container = new e.DisplayObjectContainer()), (this._container.name = this.name), s ? (s instanceof i.Group ? s._container.addChild(this._container) : (s.addChild(this._container), s.updateTransform())) : (this.game.stage._stage.addChild(this._container), this.game.stage._stage.updateTransform())), (this.type = i.GROUP), (this.alive = !0), (this.exists = !0), (this.group = null), (this._container.scale = new i.Point(1, 1)), (this.scale = this._container.scale), (this.pivot = this._container.pivot), (this.cursor = null); }), (i.Group.RETURN_NONE = 0), (i.Group.RETURN_TOTAL = 1), (i.Group.RETURN_CHILD = 2), (i.Group.SORT_ASCENDING = -1), (i.Group.SORT_DESCENDING = 1), (i.Group.prototype = { add: function (t) { return ( t.group !== this && (t.type && t.type === i.GROUP ? ((t.group = this), this._container.addChild(t._container), t._container.updateTransform()) : ((t.group = this), this._container.addChild(t), t.updateTransform(), t.events && t.events.onAddedToGroup.dispatch(t, this)), null === this.cursor && (this.cursor = t)), t ); }, addAt: function (t, e) { return ( t.group !== this && (t.type && t.type === i.GROUP ? ((t.group = this), this._container.addChildAt(t._container, e), t._container.updateTransform()) : ((t.group = this), this._container.addChildAt(t, e), t.updateTransform(), t.events && t.events.onAddedToGroup.dispatch(t, this)), null === this.cursor && (this.cursor = t)), t ); }, getAt: function (t) { return this._container.getChildAt(t); }, create: function (t, e, s, n, r) { "undefined" == typeof r && (r = !0); var o = new i.Sprite(this.game, t, e, s, n); return (o.group = this), (o.exists = r), (o.visible = r), (o.alive = r), this._container.addChild(o), o.updateTransform(), o.events && o.events.onAddedToGroup.dispatch(o, this), null === this.cursor && (this.cursor = o), o; }, createMultiple: function (t, e, s, n) { "undefined" == typeof n && (n = !1); for (var r = 0; t > r; r++) { var o = new i.Sprite(this.game, 0, 0, e, s); (o.group = this), (o.exists = n), (o.visible = n), (o.alive = n), this._container.addChild(o), o.updateTransform(), o.events && o.events.onAddedToGroup.dispatch(o, this), null === this.cursor && (this.cursor = o); } }, next: function () { this.cursor && (this.cursor = this.cursor == this._container.last ? this._container._iNext : this.cursor._iNext); }, previous: function () { this.cursor && (this.cursor = this.cursor == this._container._iNext ? this._container.last : this.cursor._iPrev); }, childTest: function (t, e) { var i = t + " next: "; (i += e._iNext ? e._iNext.name : "-null-"), (i = i + " " + t + " prev: "), (i += e._iPrev ? e._iPrev.name : "-null-"), console.log(i); }, swapIndex: function (t, e) { var i = this.getAt(t), s = this.getAt(e); this.swap(i, s); }, swap: function (t, e) { if (t === e || !t.parent || !e.parent || t.group !== this || e.group !== this) return !1; var i = t._iPrev, s = t._iNext, n = e._iPrev, r = e._iNext, o = this._container.last._iNext, a = this.game.stage._stage; do a !== t && a !== e && (a.first === t ? (a.first = e) : a.first === e && (a.first = t), a.last === t ? (a.last = e) : a.last === e && (a.last = t)), (a = a._iNext); while (a != o); return t._iNext == e ? ((t._iNext = r), (t._iPrev = e), (e._iNext = t), (e._iPrev = i), i && (i._iNext = e), r && (r._iPrev = t), t.__renderGroup && t.__renderGroup.updateTexture(t), e.__renderGroup && e.__renderGroup.updateTexture(e), !0) : e._iNext == t ? ((t._iNext = e), (t._iPrev = n), (e._iNext = s), (e._iPrev = t), n && (n._iNext = t), s && (s._iPrev = e), t.__renderGroup && t.__renderGroup.updateTexture(t), e.__renderGroup && e.__renderGroup.updateTexture(e), !0) : ((t._iNext = r), (t._iPrev = n), (e._iNext = s), (e._iPrev = i), i && (i._iNext = e), s && (s._iPrev = e), n && (n._iNext = t), r && (r._iPrev = t), t.__renderGroup && t.__renderGroup.updateTexture(t), e.__renderGroup && e.__renderGroup.updateTexture(e), !0); }, bringToTop: function (t) { return t.group === this && (this.remove(t), this.add(t)), t; }, getIndex: function (t) { return this._container.children.indexOf(t); }, replace: function (t, e) { if (this._container.first._iNext) { var i = this.getIndex(t); -1 != i && (void 0 !== e.parent && (e.events.onRemovedFromGroup.dispatch(e, this), e.parent.removeChild(e)), this._container.removeChild(t), this._container.addChildAt(e, i), e.events.onAddedToGroup.dispatch(e, this), e.updateTransform(), this.cursor == t && (this.cursor = this._container._iNext)); } }, setProperty: function (t, e, i, s) { s = s || 0; var n = e.length; 1 == n ? 0 === s ? (t[e[0]] = i) : 1 == s ? (t[e[0]] += i) : 2 == s ? (t[e[0]] -= i) : 3 == s ? (t[e[0]] *= i) : 4 == s && (t[e[0]] /= i) : 2 == n ? 0 === s ? (t[e[0]][e[1]] = i) : 1 == s ? (t[e[0]][e[1]] += i) : 2 == s ? (t[e[0]][e[1]] -= i) : 3 == s ? (t[e[0]][e[1]] *= i) : 4 == s && (t[e[0]][e[1]] /= i) : 3 == n ? 0 === s ? (t[e[0]][e[1]][e[2]] = i) : 1 == s ? (t[e[0]][e[1]][e[2]] += i) : 2 == s ? (t[e[0]][e[1]][e[2]] -= i) : 3 == s ? (t[e[0]][e[1]][e[2]] *= i) : 4 == s && (t[e[0]][e[1]][e[2]] /= i) : 4 == n && (0 === s ? (t[e[0]][e[1]][e[2]][e[3]] = i) : 1 == s ? (t[e[0]][e[1]][e[2]][e[3]] += i) : 2 == s ? (t[e[0]][e[1]][e[2]][e[3]] -= i) : 3 == s ? (t[e[0]][e[1]][e[2]][e[3]] *= i) : 4 == s && (t[e[0]][e[1]][e[2]][e[3]] /= i)); }, set: function (t, e, i, s, n, r) { (e = e.split(".")), "undefined" == typeof s && (s = !1), "undefined" == typeof n && (n = !1), (s === !1 || (s && t.alive)) && (n === !1 || (n && t.visible)) && this.setProperty(t, e, i, r); }, setAll: function (t, e, i, s, n) { if (((t = t.split(".")), "undefined" == typeof i && (i = !1), "undefined" == typeof s && (s = !1), (n = n || 0), this._container.children.length > 0 && this._container.first._iNext)) { var r = this._container.first._iNext; do (i === !1 || (i && r.alive)) && (s === !1 || (s && r.visible)) && this.setProperty(r, t, e, n), (r = r._iNext); while (r != this._container.last._iNext); } }, addAll: function (t, e, i, s) { this.setAll(t, e, i, s, 1); }, subAll: function (t, e, i, s) { this.setAll(t, e, i, s, 2); }, multiplyAll: function (t, e, i, s) { this.setAll(t, e, i, s, 3); }, divideAll: function (t, e, i, s) { this.setAll(t, e, i, s, 4); }, callAllExists: function (t, e) { var i = Array.prototype.splice.call(arguments, 2); if (this._container.children.length > 0 && this._container.first._iNext) { var s = this._container.first._iNext; do s.exists == e && s[t] && s[t].apply(s, i), (s = s._iNext); while (s != this._container.last._iNext); } }, callbackFromArray: function (t, e, i) { if (1 == i) { if (t[e[0]]) return t[e[0]]; } else if (2 == i) { if (t[e[0]][e[1]]) return t[e[0]][e[1]]; } else if (3 == i) { if (t[e[0]][e[1]][e[2]]) return t[e[0]][e[1]][e[2]]; } else if (4 == i) { if (t[e[0]][e[1]][e[2]][e[3]]) return t[e[0]][e[1]][e[2]][e[3]]; } else if (t[e]) return t[e]; return !1; }, callAll: function (t, e) { if ("undefined" != typeof t) { t = t.split("."); var i = t.length; if ("undefined" == typeof e) e = null; else if ("string" == typeof e) { e = e.split("."); var s = e.length; } var n = Array.prototype.splice.call(arguments, 2), r = null, o = null; if (this._container.children.length > 0 && this._container.first._iNext) { var a = this._container.first._iNext; do (r = this.callbackFromArray(a, t, i)), e && r ? ((o = this.callbackFromArray(a, e, s)), r && r.apply(o, n)) : r && r.apply(a, n), (a = a._iNext); while (a != this._container.last._iNext); } } }, forEach: function (t, e, i) { "undefined" == typeof i && (i = !1); var s = Array.prototype.splice.call(arguments, 3); if ((s.unshift(null), this._container.children.length > 0 && this._container.first._iNext)) { var n = this._container.first._iNext; do (i === !1 || (i && n.exists)) && ((s[0] = n), t.apply(e, s)), (n = n._iNext); while (n != this._container.last._iNext); } }, forEachExists: function (t, e) { var s = Array.prototype.splice.call(arguments, 2); s.unshift(null), this.iterate("exists", !0, i.Group.RETURN_TOTAL, t, e, s); }, forEachAlive: function (t, e) { var s = Array.prototype.splice.call(arguments, 2); s.unshift(null), this.iterate("alive", !0, i.Group.RETURN_TOTAL, t, e, s); }, forEachDead: function (t, e) { var s = Array.prototype.splice.call(arguments, 2); s.unshift(null), this.iterate("alive", !1, i.Group.RETURN_TOTAL, t, e, s); }, sort: function (t, e) { "undefined" == typeof t && (t = "y"), "undefined" == typeof e && (e = i.Group.SORT_ASCENDING); var s, n; do { s = !1; for (var r = 0, o = this._container.children.length - 1; o > r; r++) e == i.Group.SORT_ASCENDING ? this._container.children[r][t] > this._container.children[r + 1][t] && (this.swap(this.getAt(r), this.getAt(r + 1)), (n = this._container.children[r]), (this._container.children[r] = this._container.children[r + 1]), (this._container.children[r + 1] = n), (s = !0)) : this._container.children[r][t] < this._container.children[r + 1][t] && (this.swap(this.getAt(r), this.getAt(r + 1)), (n = this._container.children[r]), (this._container.children[r] = this._container.children[r + 1]), (this._container.children[r + 1] = n), (s = !0)); } while (s); }, iterate: function (t, e, s, n, r, o) { if (s === i.Group.RETURN_TOTAL && 0 === this._container.children.length) return 0; "undefined" == typeof n && (n = !1); var a = 0; if (this._container.children.length > 0 && this._container.first._iNext) { var h = this._container.first._iNext; do { if (h[t] === e && (a++, n && ((o[0] = h), n.apply(r, o)), s === i.Group.RETURN_CHILD)) return h; h = h._iNext; } while (h != this._container.last._iNext); } return s === i.Group.RETURN_TOTAL ? a : s === i.Group.RETURN_CHILD ? null : void 0; }, getFirstExists: function (t) { return "boolean" != typeof t && (t = !0), this.iterate("exists", t, i.Group.RETURN_CHILD); }, getFirstAlive: function () { return this.iterate("alive", !0, i.Group.RETURN_CHILD); }, getFirstDead: function () { return this.iterate("alive", !1, i.Group.RETURN_CHILD); }, countLiving: function () { return this.iterate("alive", !0, i.Group.RETURN_TOTAL); }, countDead: function () { return this.iterate("alive", !1, i.Group.RETURN_TOTAL); }, getRandom: function (t, e) { return 0 === this._container.children.length ? null : ((t = t || 0), (e = e || this._container.children.length), this.game.math.getRandom(this._container.children, t, e)); }, remove: function (t) { return t.group !== this ? !1 : (t.events && t.events.onRemovedFromGroup.dispatch(t, this), t.parent === this._container && this._container.removeChild(t), this.cursor == t && (this.cursor = this._container._iNext ? this._container._iNext : null), (t.group = null), !0); }, removeAll: function () { if (0 !== this._container.children.length) { do this._container.children[0].events && this._container.children[0].events.onRemovedFromGroup.dispatch(this._container.children[0], this), this._container.removeChild(this._container.children[0]); while (this._container.children.length > 0); this.cursor = null; } }, removeBetween: function (t, e) { if (0 !== this._container.children.length) { if (t > e || 0 > t || e > this._container.children.length) return !1; for (var i = t; e > i; i++) { var s = this._container.children[i]; s.events.onRemovedFromGroup.dispatch(s, this), this._container.removeChild(s), this.cursor == s && (this.cursor = this._container._iNext ? this._container._iNext : null); } } }, destroy: function (t) { if (("undefined" == typeof t && (t = !1), t)) { if (this._container.children.length > 0) do this._container.children[0].group && this._container.children[0].destroy(); while (this._container.children.length > 0); } else this.removeAll(); this._container.parent.removeChild(this._container), (this._container = null), (this.game = null), (this.exists = !1), (this.cursor = null); }, validate: function () { var t = this.game.stage._stage.last._iNext, e = this.game.stage._stage, i = null, s = null, n = 0; do { if (n > 0) { if (e !== i) return console.log("check next fail"), !1; if (e._iPrev !== s) return console.log("check previous fail"), !1; } (i = e._iNext), (s = e), (e = e._iNext), n++; } while (e != t); return !0; }, }), (i.Group.prototype.constructor = i.Group), Object.defineProperty(i.Group.prototype, "total", { get: function () { return this._container ? this.iterate("exists", !0, i.Group.RETURN_TOTAL) : 0; }, }), Object.defineProperty(i.Group.prototype, "length", { get: function () { return this._container ? this._container.children.length : 0; }, }), Object.defineProperty(i.Group.prototype, "x", { get: function () { return this._container.position.x; }, set: function (t) { this._container.position.x = t; }, }), Object.defineProperty(i.Group.prototype, "y", { get: function () { return this._container.position.y; }, set: function (t) { this._container.position.y = t; }, }), Object.defineProperty(i.Group.prototype, "angle", { get: function () { return i.Math.radToDeg(this._container.rotation); }, set: function (t) { this._container.rotation = i.Math.degToRad(t); }, }), Object.defineProperty(i.Group.prototype, "rotation", { get: function () { return this._container.rotation; }, set: function (t) { this._container.rotation = t; }, }), Object.defineProperty(i.Group.prototype, "visible", { get: function () { return this._container.visible; }, set: function (t) { this._container.visible = t; }, }), Object.defineProperty(i.Group.prototype, "alpha", { get: function () { return this._container.alpha; }, set: function (t) { this._container.alpha = t; }, }), (i.World = function (t) { i.Group.call(this, t, null, "__world", !1), (this.bounds = new i.Rectangle(0, 0, t.width, t.height)), (this.camera = null), (this.currentRenderOrderID = 0); }), (i.World.prototype = Object.create(i.Group.prototype)), (i.World.prototype.constructor = i.World), (i.World.prototype.boot = function () { (this.camera = new i.Camera(this.game, 0, 0, 0, this.game.width, this.game.height)), (this.camera.displayObject = this._container), (this.game.camera = this.camera); }), (i.World.prototype.preUpdate = function () { if (this.game.stage._stage.first._iNext) { var t = this.game.stage._stage.first._iNext; do t = t.preUpdate && !t.preUpdate() ? t.last._iNext : t._iNext; while (t != this.game.stage._stage.last._iNext); } }), (i.World.prototype.update = function () { if (((this.currentRenderOrderID = 0), this.game.stage._stage.first._iNext)) { var t = this.game.stage._stage.first._iNext; do t = t.update && !t.update() ? t.last._iNext : t._iNext; while (t != this.game.stage._stage.last._iNext); } }), (i.World.prototype.postUpdate = function () { if (this.camera.target && this.camera.target.postUpdate) { if ((this.camera.target.postUpdate(), this.camera.update(), this.game.stage._stage.first._iNext)) { var t = this.game.stage._stage.first._iNext; do t.postUpdate && t !== this.camera.target && t.postUpdate(), (t = t._iNext); while (t != this.game.stage._stage.last._iNext); } } else if ((this.camera.update(), this.game.stage._stage.first._iNext)) { var t = this.game.stage._stage.first._iNext; do t.postUpdate && t.postUpdate(), (t = t._iNext); while (t != this.game.stage._stage.last._iNext); } }), (i.World.prototype.setBounds = function (t, e, i, s) { i < this.game.width && (i = this.game.width), s < this.game.height && (s = this.game.height), this.bounds.setTo(t, e, i, s), this.camera.bounds && this.camera.bounds.setTo(t, e, i, s), this.game.physics.setBoundsToWorld(); }), (i.World.prototype.destroy = function () { (this.camera.x = 0), (this.camera.y = 0), this.game.input.reset(!0), this.removeAll(); }), Object.defineProperty(i.World.prototype, "width", { get: function () { return this.bounds.width; }, set: function (t) { this.bounds.width = t; }, }), Object.defineProperty(i.World.prototype, "height", { get: function () { return this.bounds.height; }, set: function (t) { this.bounds.height = t; }, }), Object.defineProperty(i.World.prototype, "centerX", { get: function () { return this.bounds.halfWidth; }, }), Object.defineProperty(i.World.prototype, "centerY", { get: function () { return this.bounds.halfHeight; }, }), Object.defineProperty(i.World.prototype, "randomX", { get: function () { return this.bounds.x < 0 ? this.game.rnd.integerInRange(this.bounds.x, this.bounds.width - Math.abs(this.bounds.x)) : this.game.rnd.integerInRange(this.bounds.x, this.bounds.width); }, }), Object.defineProperty(i.World.prototype, "randomY", { get: function () { return this.bounds.y < 0 ? this.game.rnd.integerInRange(this.bounds.y, this.bounds.height - Math.abs(this.bounds.y)) : this.game.rnd.integerInRange(this.bounds.y, this.bounds.height); }, }), Object.defineProperty(i.World.prototype, "visible", { get: function () { return this._container.visible; }, set: function (t) { this._container.visible = t; }, }), (i.Game = function (t, e, s, n, r, o, a) { (this.id = i.GAMES.push(this) - 1), (this.config = null), (this.parent = ""), (this.width = 800), (this.height = 600), (this.transparent = !1), (this.antialias = !0), (this.renderer = i.AUTO), (this.renderType = i.AUTO), (this.state = null), (this._paused = !1), (this._loadComplete = !1), (this.isBooted = !1), (this.isRunning = !1), (this.raf = null), (this.add = null), (this.cache = null), (this.input = null), (this.load = null), (this.math = null), (this.net = null), (this.sound = null), (this.stage = null), (this.time = null), (this.tweens = null), (this.world = null), (this.physics = null), (this.rnd = null), (this.device = null), (this.camera = null), (this.canvas = null), (this.context = null), (this.debug = null), (this.particles = null), (this.stepping = !1), (this.pendingStep = !1), (this.stepCount = 0), 1 === arguments.length && "object" == typeof arguments[0] ? this.parseConfig(arguments[0]) : ("undefined" != typeof t && (this.width = t), "undefined" != typeof e && (this.height = e), "undefined" != typeof s && ((this.renderer = s), (this.renderType = s)), "undefined" != typeof n && (this.parent = n), "undefined" != typeof o && (this.transparent = o), "undefined" != typeof a && (this.antialias = a), (this.state = new i.StateManager(this, r))); var h = this; return ( (this._onBoot = function () { return h.boot(); }), "complete" === document.readyState || "interactive" === document.readyState ? window.setTimeout(this._onBoot, 0) : (document.addEventListener("DOMContentLoaded", this._onBoot, !1), window.addEventListener("load", this._onBoot, !1)), this ); }), (i.Game.prototype = { parseConfig: function (t) { (this.config = t), t.width && (this.width = this.parseDimension(t.width, 0)), t.height && (this.height = this.parseDimension(t.height, 1)), t.renderer && ((this.renderer = t.renderer), (this.renderType = t.renderer)), t.parent && (this.parent = t.parent), t.transparent && (this.transparent = t.transparent), t.antialias && (this.antialias = t.antialias); var e = null; t.state && (e = t.state), (this.state = new i.StateManager(this, e)); }, parseDimension: function (t, e) { var i = 0, s = 0; return "string" == typeof t ? ("%" === t.substr(-1) ? ((i = parseInt(t, 10) / 100), (s = 0 === e ? window.innerWidth * i : window.innerHeight * i)) : (s = parseInt(t, 10))) : (s = t), s; }, boot: function () { this.isBooted || (document.body ? (document.removeEventListener("DOMContentLoaded", this._onBoot), window.removeEventListener("load", this._onBoot), (this.onPause = new i.Signal()), (this.onResume = new i.Signal()), (this.isBooted = !0), (this.device = new i.Device()), (this.math = i.Math), (this.rnd = new i.RandomDataGenerator([(Date.now() * Math.random()).toString()])), (this.stage = new i.Stage(this, this.width, this.height)), this.setUpRenderer(), (this.world = new i.World(this)), (this.add = new i.GameObjectFactory(this)), (this.cache = new i.Cache(this)), (this.load = new i.Loader(this)), (this.time = new i.Time(this)), (this.tweens = new i.TweenManager(this)), (this.input = new i.Input(this)), (this.sound = new i.SoundManager(this)), (this.physics = new i.Physics.Arcade(this)), (this.particles = new i.Particles(this)), (this.plugins = new i.PluginManager(this, this)), (this.net = new i.Net(this)), (this.debug = new i.Utils.Debug(this)), this.time.boot(), this.stage.boot(), this.world.boot(), this.input.boot(), this.sound.boot(), this.state.boot(), this.load.onLoadComplete.add(this.loadComplete, this), this.showDebugHeader(), (this.isRunning = !0), (this._loadComplete = !1), (this.raf = new i.RequestAnimationFrame(this)), this.raf.start()) : window.setTimeout(this._onBoot, 20)); }, showDebugHeader: function () { var t = i.DEV_VERSION, e = "Canvas", s = "HTML Audio"; if ((this.renderType == i.WEBGL ? (e = "WebGL") : this.renderType == i.HEADLESS && (e = "Headless"), this.device.webAudio && (s = "WebAudio"), this.device.chrome)) { var n = ["%c %c %c Phaser v" + t + " - Renderer: " + e + " - Audio: " + s + " %c %c ", "background: #00bff3", "background: #0072bc", "color: #ffffff; background: #003471", "background: #0072bc", "background: #00bff3"]; console.log.apply(console, n); } else console.log("Phaser v" + t + " - Renderer: " + e + " - Audio: " + s); }, setUpRenderer: function () { if (this.renderType === i.HEADLESS || this.renderType === i.CANVAS || (this.renderType === i.AUTO && this.device.webGL === !1)) { if (!this.device.canvas) throw new Error("Phaser.Game - cannot create Canvas or WebGL context, aborting."); this.renderType === i.AUTO && (this.renderType = i.CANVAS), (this.renderer = new e.CanvasRenderer(this.width, this.height, this.stage.canvas, this.transparent)), i.Canvas.setSmoothingEnabled(this.renderer.context, this.antialias), (this.canvas = this.renderer.view), (this.context = this.renderer.context); } else (this.renderType = i.WEBGL), (this.renderer = new e.WebGLRenderer(this.width, this.height, this.stage.canvas, this.transparent, this.antialias)), (this.canvas = this.renderer.view), (this.context = null); i.Canvas.addToDOM(this.renderer.view, this.parent, !0), i.Canvas.setTouchAction(this.renderer.view); }, loadComplete: function () { (this._loadComplete = !0), this.state.loadComplete(); }, update: function (t) { this.time.update(t), this._paused ? (this.renderer.render(this.stage._stage), this.plugins.render(), this.state.render()) : (this.pendingStep || (this.stepping && (this.pendingStep = !0), this.plugins.preUpdate(), this.world.preUpdate(), this.stage.update(), this.tweens.update(), this.sound.update(), this.input.update(), this.state.update(), this.world.update(), this.particles.update(), this.plugins.update(), this.world.postUpdate(), this.plugins.postUpdate()), this.renderType !== i.HEADLESS && (this.renderer.render(this.stage._stage), this.plugins.render(), this.state.render(), this.plugins.postRender())); }, enableStep: function () { (this.stepping = !0), (this.pendingStep = !1), (this.stepCount = 0); }, disableStep: function () { (this.stepping = !1), (this.pendingStep = !1); }, step: function () { (this.pendingStep = !1), this.stepCount++; }, destroy: function () { this.raf.stop(), this.input.destroy(), this.state.destroy(), (this.state = null), (this.cache = null), (this.input = null), (this.load = null), (this.sound = null), (this.stage = null), (this.time = null), (this.world = null), (this.isBooted = !1); }, }), (i.Game.prototype.constructor = i.Game), Object.defineProperty(i.Game.prototype, "paused", { get: function () { return this._paused; }, set: function (t) { t === !0 ? this._paused === !1 && ((this._paused = !0), this.onPause.dispatch(this)) : this._paused && ((this._paused = !1), this.onResume.dispatch(this)); }, }), (i.Input = function (t) { (this.game = t), (this.hitCanvas = null), (this.hitContext = null), (this.moveCallback = null), (this.moveCallbackContext = this); }), (i.Input.MOUSE_OVERRIDES_TOUCH = 0), (i.Input.TOUCH_OVERRIDES_MOUSE = 1), (i.Input.MOUSE_TOUCH_COMBINE = 2), (i.Input.prototype = { pollRate: 0, _pollCounter: 0, _oldPosition: null, _x: 0, _y: 0, disabled: !1, multiInputOverride: i.Input.MOUSE_TOUCH_COMBINE, position: null, speed: null, circle: null, scale: null, maxPointers: 10, currentPointers: 0, tapRate: 200, doubleTapRate: 300, holdRate: 2e3, justPressedRate: 200, justReleasedRate: 200, recordPointerHistory: !1, recordRate: 100, recordLimit: 100, pointer1: null, pointer2: null, pointer3: null, pointer4: null, pointer5: null, pointer6: null, pointer7: null, pointer8: null, pointer9: null, pointer10: null, activePointer: null, mousePointer: null, mouse: null, keyboard: null, touch: null, mspointer: null, gamepad: null, onDown: null, onUp: null, onTap: null, onHold: null, interactiveItems: new i.LinkedList(), boot: function () { (this.mousePointer = new i.Pointer(this.game, 0)), (this.pointer1 = new i.Pointer(this.game, 1)), (this.pointer2 = new i.Pointer(this.game, 2)), (this.mouse = new i.Mouse(this.game)), (this.keyboard = new i.Keyboard(this.game)), (this.touch = new i.Touch(this.game)), (this.mspointer = new i.MSPointer(this.game)), (this.gamepad = new i.Gamepad(this.game)), (this.onDown = new i.Signal()), (this.onUp = new i.Signal()), (this.onTap = new i.Signal()), (this.onHold = new i.Signal()), (this.scale = new i.Point(1, 1)), (this.speed = new i.Point()), (this.position = new i.Point()), (this._oldPosition = new i.Point()), (this.circle = new i.Circle(0, 0, 44)), (this.activePointer = this.mousePointer), (this.currentPointers = 0), (this.hitCanvas = document.createElement("canvas")), (this.hitCanvas.width = 1), (this.hitCanvas.height = 1), (this.hitContext = this.hitCanvas.getContext("2d")), this.mouse.start(), this.keyboard.start(), this.touch.start(), this.mspointer.start(), (this.mousePointer.active = !0); }, destroy: function () { this.mouse.stop(), this.keyboard.stop(), this.touch.stop(), this.mspointer.stop(), this.gamepad.stop(), (this.moveCallback = null); }, setMoveCallback: function (t, e) { (this.moveCallback = t), (this.moveCallbackContext = e); }, addPointer: function () { for (var t = 0, e = 10; e > 0; e--) null === this["pointer" + e] && (t = e); return 0 === t ? (console.warn("You can only have 10 Pointer objects"), null) : ((this["pointer" + t] = new i.Pointer(this.game, t)), this["pointer" + t]); }, update: function () { return this.pollRate > 0 && this._pollCounter < this.pollRate ? void this._pollCounter++ : ((this.speed.x = this.position.x - this._oldPosition.x), (this.speed.y = this.position.y - this._oldPosition.y), this._oldPosition.copyFrom(this.position), this.mousePointer.update(), this.gamepad.active && this.gamepad.update(), this.pointer1.update(), this.pointer2.update(), this.pointer3 && this.pointer3.update(), this.pointer4 && this.pointer4.update(), this.pointer5 && this.pointer5.update(), this.pointer6 && this.pointer6.update(), this.pointer7 && this.pointer7.update(), this.pointer8 && this.pointer8.update(), this.pointer9 && this.pointer9.update(), this.pointer10 && this.pointer10.update(), void (this._pollCounter = 0)); }, reset: function (t) { if (this.game.isBooted !== !1) { "undefined" == typeof t && (t = !1), this.keyboard.reset(), this.mousePointer.reset(), this.gamepad.reset(); for (var e = 1; 10 >= e; e++) this["pointer" + e] && this["pointer" + e].reset(); (this.currentPointers = 0), "none" !== this.game.canvas.style.cursor && (this.game.canvas.style.cursor = "default"), t === !0 && (this.onDown.dispose(), this.onUp.dispose(), this.onTap.dispose(), this.onHold.dispose(), (this.onDown = new i.Signal()), (this.onUp = new i.Signal()), (this.onTap = new i.Signal()), (this.onHold = new i.Signal()), this.interactiveItems.callAll("reset")), (this._pollCounter = 0); } }, resetSpeed: function (t, e) { this._oldPosition.setTo(t, e), this.speed.setTo(0, 0); }, startPointer: function (t) { if (this.maxPointers < 10 && this.totalActivePointers == this.maxPointers) return null; if (this.pointer1.active === !1) return this.pointer1.start(t); if (this.pointer2.active === !1) return this.pointer2.start(t); for (var e = 3; 10 >= e; e++) if (this["pointer" + e] && this["pointer" + e].active === !1) return this["pointer" + e].start(t); return null; }, updatePointer: function (t) { if (this.pointer1.active && this.pointer1.identifier == t.identifier) return this.pointer1.move(t); if (this.pointer2.active && this.pointer2.identifier == t.identifier) return this.pointer2.move(t); for (var e = 3; 10 >= e; e++) if (this["pointer" + e] && this["pointer" + e].active && this["pointer" + e].identifier == t.identifier) return this["pointer" + e].move(t); return null; }, stopPointer: function (t) { if (this.pointer1.active && this.pointer1.identifier == t.identifier) return this.pointer1.stop(t); if (this.pointer2.active && this.pointer2.identifier == t.identifier) return this.pointer2.stop(t); for (var e = 3; 10 >= e; e++) if (this["pointer" + e] && this["pointer" + e].active && this["pointer" + e].identifier == t.identifier) return this["pointer" + e].stop(t); return null; }, getPointer: function (t) { if (((t = t || !1), this.pointer1.active == t)) return this.pointer1; if (this.pointer2.active == t) return this.pointer2; for (var e = 3; 10 >= e; e++) if (this["pointer" + e] && this["pointer" + e].active == t) return this["pointer" + e]; return null; }, getPointerFromIdentifier: function (t) { if (this.pointer1.identifier == t) return this.pointer1; if (this.pointer2.identifier == t) return this.pointer2; for (var e = 3; 10 >= e; e++) if (this["pointer" + e] && this["pointer" + e].identifier == t) return this["pointer" + e]; return null; }, }), (i.Input.prototype.constructor = i.Input), Object.defineProperty(i.Input.prototype, "x", { get: function () { return this._x; }, set: function (t) { this._x = Math.floor(t); }, }), Object.defineProperty(i.Input.prototype, "y", { get: function () { return this._y; }, set: function (t) { this._y = Math.floor(t); }, }), Object.defineProperty(i.Input.prototype, "pollLocked", { get: function () { return this.pollRate > 0 && this._pollCounter < this.pollRate; }, }), Object.defineProperty(i.Input.prototype, "totalInactivePointers", { get: function () { return 10 - this.currentPointers; }, }), Object.defineProperty(i.Input.prototype, "totalActivePointers", { get: function () { this.currentPointers = 0; for (var t = 1; 10 >= t; t++) this["pointer" + t] && this["pointer" + t].active && this.currentPointers++; return this.currentPointers; }, }), Object.defineProperty(i.Input.prototype, "worldX", { get: function () { return this.game.camera.view.x + this.x; }, }), Object.defineProperty(i.Input.prototype, "worldY", { get: function () { return this.game.camera.view.y + this.y; }, }), (i.Key = function (t, e) { (this.game = t), (this.isDown = !1), (this.isUp = !1), (this.altKey = !1), (this.ctrlKey = !1), (this.shiftKey = !1), (this.timeDown = 0), (this.duration = 0), (this.timeUp = 0), (this.repeats = 0), (this.keyCode = e), (this.onDown = new i.Signal()), (this.onUp = new i.Signal()); }), (i.Key.prototype = { processKeyDown: function (t) { (this.altKey = t.altKey), (this.ctrlKey = t.ctrlKey), (this.shiftKey = t.shiftKey), this.isDown ? ((this.duration = t.timeStamp - this.timeDown), this.repeats++) : ((this.isDown = !0), (this.isUp = !1), (this.timeDown = t.timeStamp), (this.duration = 0), (this.repeats = 0), this.onDown.dispatch(this)); }, processKeyUp: function (t) { (this.isDown = !1), (this.isUp = !0), (this.timeUp = t.timeStamp), this.onUp.dispatch(this); }, justPressed: function (t) { return "undefined" == typeof t && (t = 250), this.isDown && this.duration < t; }, justReleased: function (t) { return "undefined" == typeof t && (t = 250), this.isDown === !1 && this.game.time.now - this.timeUp < t; }, }), (i.Key.prototype.constructor = i.Key), (i.Keyboard = function (t) { (this.game = t), (this._keys = {}), (this._hotkeys = {}), (this._capture = {}), (this.disabled = !1), (this._onKeyDown = null), (this._onKeyUp = null), (this.callbackContext = this), (this.onDownCallback = null), (this.onUpCallback = null); }), (i.Keyboard.prototype = { addCallbacks: function (t, e, i) { (this.callbackContext = t), (this.onDownCallback = e), "undefined" != typeof i && (this.onUpCallback = i); }, addKey: function (t) { return (this._hotkeys[t] = new i.Key(this.game, t)), this.addKeyCapture(t), this._hotkeys[t]; }, removeKey: function (t) { delete this._hotkeys[t]; }, createCursorKeys: function () { return { up: this.addKey(i.Keyboard.UP), down: this.addKey(i.Keyboard.DOWN), left: this.addKey(i.Keyboard.LEFT), right: this.addKey(i.Keyboard.RIGHT) }; }, start: function () { var t = this; (this._onKeyDown = function (e) { return t.processKeyDown(e); }), (this._onKeyUp = function (e) { return t.processKeyUp(e); }), window.addEventListener("keydown", this._onKeyDown, !1), window.addEventListener("keyup", this._onKeyUp, !1); }, stop: function () { window.removeEventListener("keydown", this._onKeyDown), window.removeEventListener("keyup", this._onKeyUp); }, addKeyCapture: function (t) { if ("object" == typeof t) for (var e in t) this._capture[t[e]] = !0; else this._capture[t] = !0; }, removeKeyCapture: function (t) { delete this._capture[t]; }, clearCaptures: function () { this._capture = {}; }, processKeyDown: function (t) { if (!keyPressedCurrently && t.keyCode == i.Keyboard.UP) { (this.event = t), this.capture && t.preventDefault(), (this.button = t.which), this.mouseDownCallback && this.mouseDownCallback.call(this.callbackContext, t), this.game.input.disabled || this.disabled || ((t.identifier = 0), this.game.input.mousePointer.start(t)); keyPressedCurrently == true; } }, processKeyUp: function (t) { if (keyPressedCurrently && t.keyCode == i.Keyboard.UP) { keyPressedCurrently == false; } this.game.input.disabled || this.disabled || (this._capture[t.keyCode] && t.preventDefault(), this.onUpCallback && this.onUpCallback.call(this.callbackContext, t), this._hotkeys[t.keyCode] && this._hotkeys[t.keyCode].processKeyUp(t), this._keys[t.keyCode] ? ((this._keys[t.keyCode].isDown = !1), (this._keys[t.keyCode].timeUp = this.game.time.now)) : (this._keys[t.keyCode] = { isDown: !1, timeDown: this.game.time.now, timeUp: this.game.time.now, duration: 0 })); }, reset: function () { for (var t in this._keys) this._keys[t].isDown = !1; }, justPressed: function (t, e) { return "undefined" == typeof e && (e = 250), this._keys[t] && this._keys[t].isDown && this._keys[t].duration < e ? !0 : !1; }, justReleased: function (t, e) { return "undefined" == typeof e && (e = 250), this._keys[t] && this._keys[t].isDown === !1 && this.game.time.now - this._keys[t].timeUp < e ? !0 : !1; }, isDown: function (t) { return this._keys[t] ? this._keys[t].isDown : !1; }, }), (i.Keyboard.prototype.constructor = i.Keyboard), (i.Keyboard.A = "A".charCodeAt(0)), (i.Keyboard.B = "B".charCodeAt(0)), (i.Keyboard.C = "C".charCodeAt(0)), (i.Keyboard.D = "D".charCodeAt(0)), (i.Keyboard.E = "E".charCodeAt(0)), (i.Keyboard.F = "F".charCodeAt(0)), (i.Keyboard.G = "G".charCodeAt(0)), (i.Keyboard.H = "H".charCodeAt(0)), (i.Keyboard.I = "I".charCodeAt(0)), (i.Keyboard.J = "J".charCodeAt(0)), (i.Keyboard.K = "K".charCodeAt(0)), (i.Keyboard.L = "L".charCodeAt(0)), (i.Keyboard.M = "M".charCodeAt(0)), (i.Keyboard.N = "N".charCodeAt(0)), (i.Keyboard.O = "O".charCodeAt(0)), (i.Keyboard.P = "P".charCodeAt(0)), (i.Keyboard.Q = "Q".charCodeAt(0)), (i.Keyboard.R = "R".charCodeAt(0)), (i.Keyboard.S = "S".charCodeAt(0)), (i.Keyboard.T = "T".charCodeAt(0)), (i.Keyboard.U = "U".charCodeAt(0)), (i.Keyboard.V = "V".charCodeAt(0)), (i.Keyboard.W = "W".charCodeAt(0)), (i.Keyboard.X = "X".charCodeAt(0)), (i.Keyboard.Y = "Y".charCodeAt(0)), (i.Keyboard.Z = "Z".charCodeAt(0)), (i.Keyboard.ZERO = "0".charCodeAt(0)), (i.Keyboard.ONE = "1".charCodeAt(0)), (i.Keyboard.TWO = "2".charCodeAt(0)), (i.Keyboard.THREE = "3".charCodeAt(0)), (i.Keyboard.FOUR = "4".charCodeAt(0)), (i.Keyboard.FIVE = "5".charCodeAt(0)), (i.Keyboard.SIX = "6".charCodeAt(0)), (i.Keyboard.SEVEN = "7".charCodeAt(0)), (i.Keyboard.EIGHT = "8".charCodeAt(0)), (i.Keyboard.NINE = "9".charCodeAt(0)), (i.Keyboard.NUMPAD_0 = 96), (i.Keyboard.NUMPAD_1 = 97), (i.Keyboard.NUMPAD_2 = 98), (i.Keyboard.NUMPAD_3 = 99), (i.Keyboard.NUMPAD_4 = 100), (i.Keyboard.NUMPAD_5 = 101), (i.Keyboard.NUMPAD_6 = 102), (i.Keyboard.NUMPAD_7 = 103), (i.Keyboard.NUMPAD_8 = 104), (i.Keyboard.NUMPAD_9 = 105), (i.Keyboard.NUMPAD_MULTIPLY = 106), (i.Keyboard.NUMPAD_ADD = 107), (i.Keyboard.NUMPAD_ENTER = 108), (i.Keyboard.NUMPAD_SUBTRACT = 109), (i.Keyboard.NUMPAD_DECIMAL = 110), (i.Keyboard.NUMPAD_DIVIDE = 111), (i.Keyboard.F1 = 112), (i.Keyboard.F2 = 113), (i.Keyboard.F3 = 114), (i.Keyboard.F4 = 115), (i.Keyboard.F5 = 116), (i.Keyboard.F6 = 117), (i.Keyboard.F7 = 118), (i.Keyboard.F8 = 119), (i.Keyboard.F9 = 120), (i.Keyboard.F10 = 121), (i.Keyboard.F11 = 122), (i.Keyboard.F12 = 123), (i.Keyboard.F13 = 124), (i.Keyboard.F14 = 125), (i.Keyboard.F15 = 126), (i.Keyboard.COLON = 186), (i.Keyboard.EQUALS = 187), (i.Keyboard.UNDERSCORE = 189), (i.Keyboard.QUESTION_MARK = 191), (i.Keyboard.TILDE = 192), (i.Keyboard.OPEN_BRACKET = 219), (i.Keyboard.BACKWARD_SLASH = 220), (i.Keyboard.CLOSED_BRACKET = 221), (i.Keyboard.QUOTES = 222), (i.Keyboard.BACKSPACE = 8), (i.Keyboard.TAB = 9), (i.Keyboard.CLEAR = 12), (i.Keyboard.ENTER = 13), (i.Keyboard.SHIFT = 16), (i.Keyboard.CONTROL = 17), (i.Keyboard.ALT = 18), (i.Keyboard.CAPS_LOCK = 20), (i.Keyboard.ESC = 27), (i.Keyboard.SPACEBAR = 32), (i.Keyboard.PAGE_UP = 33), (i.Keyboard.PAGE_DOWN = 34), (i.Keyboard.END = 35), (i.Keyboard.HOME = 36), (i.Keyboard.LEFT = 37), (i.Keyboard.UP = 38), (i.Keyboard.RIGHT = 39), (i.Keyboard.DOWN = 40), (i.Keyboard.INSERT = 45), (i.Keyboard.DELETE = 46), (i.Keyboard.HELP = 47), (i.Keyboard.NUM_LOCK = 144), (i.Mouse = function (t) { (this.game = t), (this.callbackContext = this.game), (this.mouseDownCallback = null), (this.mouseMoveCallback = null), (this.mouseUpCallback = null), (this.capture = !1), (this.button = -1), (this.disabled = !1), (this.locked = !1), (this.pointerLock = new i.Signal()), (this.event = null), (this._onMouseDown = null), (this._onMouseMove = null), (this._onMouseUp = null); }), (i.Mouse.NO_BUTTON = -1), (i.Mouse.LEFT_BUTTON = 0), (i.Mouse.MIDDLE_BUTTON = 1), (i.Mouse.RIGHT_BUTTON = 2), (i.Mouse.prototype = { start: function () { var t = this; (this.game.device.android && this.game.device.chrome === !1) || ((this._onMouseDown = function (e) { return t.onMouseDown(e); }), (this._onMouseMove = function (e) { return t.onMouseMove(e); }), (this._onMouseUp = function (e) { return t.onMouseUp(e); }), document.addEventListener("mousedown", this._onMouseDown, !0), document.addEventListener("mousemove", this._onMouseMove, !0), document.addEventListener("mouseup", this._onMouseUp, !0)); }, onMouseDown: function (t) { (this.event = t), this.capture && t.preventDefault(), (this.button = t.which), this.mouseDownCallback && this.mouseDownCallback.call(this.callbackContext, t), this.game.input.disabled || this.disabled || ((t.identifier = 0), this.game.input.mousePointer.start(t)); }, onMouseMove: function (t) { (this.event = t), this.capture && t.preventDefault(), this.mouseMoveCallback && this.mouseMoveCallback.call(this.callbackContext, t), this.game.input.disabled || this.disabled || ((t.identifier = 0), this.game.input.mousePointer.move(t)); }, onMouseUp: function (t) { (this.event = t), this.capture && t.preventDefault(), (this.button = i.Mouse.NO_BUTTON), this.mouseUpCallback && this.mouseUpCallback.call(this.callbackContext, t), this.game.input.disabled || this.disabled || ((t.identifier = 0), this.game.input.mousePointer.stop(t)); }, requestPointerLock: function () { if (this.game.device.pointerLock) { var t = this.game.stage.canvas; (t.requestPointerLock = t.requestPointerLock || t.mozRequestPointerLock || t.webkitRequestPointerLock), t.requestPointerLock(); var e = this; (this._pointerLockChange = function (t) { return e.pointerLockChange(t); }), document.addEventListener("pointerlockchange", this._pointerLockChange, !0), document.addEventListener("mozpointerlockchange", this._pointerLockChange, !0), document.addEventListener("webkitpointerlockchange", this._pointerLockChange, !0); } }, pointerLockChange: function (t) { var e = this.game.stage.canvas; document.pointerLockElement === e || document.mozPointerLockElement === e || document.webkitPointerLockElement === e ? ((this.locked = !0), this.pointerLock.dispatch(!0, t)) : ((this.locked = !1), this.pointerLock.dispatch(!1, t)); }, releasePointerLock: function () { (document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock), document.exitPointerLock(), document.removeEventListener("pointerlockchange", this._pointerLockChange, !0), document.removeEventListener("mozpointerlockchange", this._pointerLockChange, !0), document.removeEventListener("webkitpointerlockchange", this._pointerLockChange, !0); }, stop: function () { document.removeEventListener("mousedown", this._onMouseDown, !0), document.removeEventListener("mousemove", this._onMouseMove, !0), document.removeEventListener("mouseup", this._onMouseUp, !0); }, }), (i.Mouse.prototype.constructor = i.Mouse), (i.MSPointer = function (t) { (this.game = t), (this.callbackContext = this.game), (this.disabled = !1), (this._onMSPointerDown = null), (this._onMSPointerMove = null), (this._onMSPointerUp = null); }), (i.MSPointer.prototype = { start: function () { var t = this; this.game.device.mspointer === !0 && ((this._onMSPointerDown = function (e) { return t.onPointerDown(e); }), (this._onMSPointerMove = function (e) { return t.onPointerMove(e); }), (this._onMSPointerUp = function (e) { return t.onPointerUp(e); }), this.game.renderer.view.addEventListener("MSPointerDown", this._onMSPointerDown, !1), this.game.renderer.view.addEventListener("MSPointerMove", this._onMSPointerMove, !1), this.game.renderer.view.addEventListener("MSPointerUp", this._onMSPointerUp, !1), this.game.renderer.view.addEventListener("pointerDown", this._onMSPointerDown, !1), this.game.renderer.view.addEventListener("pointerMove", this._onMSPointerMove, !1), this.game.renderer.view.addEventListener("pointerUp", this._onMSPointerUp, !1), (this.game.renderer.view.style["-ms-content-zooming"] = "none"), (this.game.renderer.view.style["-ms-touch-action"] = "none")); }, onPointerDown: function (t) { this.game.input.disabled || this.disabled || (t.preventDefault(), (t.identifier = t.pointerId), this.game.input.startPointer(t)); }, onPointerMove: function (t) { this.game.input.disabled || this.disabled || (t.preventDefault(), (t.identifier = t.pointerId), this.game.input.updatePointer(t)); }, onPointerUp: function (t) { this.game.input.disabled || this.disabled || (t.preventDefault(), (t.identifier = t.pointerId), this.game.input.stopPointer(t)); }, stop: function () { this.game.stage.canvas.removeEventListener("MSPointerDown", this._onMSPointerDown), this.game.stage.canvas.removeEventListener("MSPointerMove", this._onMSPointerMove), this.game.stage.canvas.removeEventListener("MSPointerUp", this._onMSPointerUp), this.game.stage.canvas.removeEventListener("pointerDown", this._onMSPointerDown), this.game.stage.canvas.removeEventListener("pointerMove", this._onMSPointerMove), this.game.stage.canvas.removeEventListener("pointerUp", this._onMSPointerUp); }, }), (i.MSPointer.prototype.constructor = i.MSPointer), (i.Pointer = function (t, e) { (this.game = t), (this.id = e), (this._holdSent = !1), (this._history = []), (this._nextDrop = 0), (this._stateReset = !1), (this.withinGame = !1), (this.clientX = -1), (this.clientY = -1), (this.pageX = -1), (this.pageY = -1), (this.screenX = -1), (this.screenY = -1), (this.x = -1), (this.y = -1), (this.isMouse = !1), (this.isDown = !1), (this.isUp = !0), (this.timeDown = 0), (this.timeUp = 0), (this.previousTapTime = 0), (this.totalTouches = 0), (this.msSinceLastClick = Number.MAX_VALUE), (this.targetObject = null), (this.active = !1), (this.position = new i.Point()), (this.positionDown = new i.Point()), (this.circle = new i.Circle(0, 0, 44)), 0 === e && (this.isMouse = !0); }), (i.Pointer.prototype = { start: function (t) { return ( (this.identifier = t.identifier), (this.target = t.target), "undefined" != typeof t.button && (this.button = t.button), this.game.stage.disableVisibilityChange === !1 && this.game.paused && this.game.stage.scale.incorrectOrientation === !1 ? ((this.game.paused = !1), this) : ((this._history.length = 0), (this.active = !0), (this.withinGame = !0), (this.isDown = !0), (this.isUp = !1), (this.msSinceLastClick = this.game.time.now - this.timeDown), (this.timeDown = this.game.time.now), (this._holdSent = !1), this.move(t), this.positionDown.setTo(this.x, this.y), (this.game.input.multiInputOverride == i.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == i.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == i.Input.TOUCH_OVERRIDES_MOUSE && 0 === this.game.input.currentPointers)) && ((this.game.input.x = this.x), (this.game.input.y = this.y), this.game.input.position.setTo(this.x, this.y), this.game.input.onDown.dispatch(this, t), this.game.input.resetSpeed(this.x, this.y)), (this._stateReset = !1), this.totalTouches++, this.isMouse === !1 && this.game.input.currentPointers++, null !== this.targetObject && this.targetObject._touchedHandler(this), this) ); }, update: function () { this.active && (this._holdSent === !1 && this.duration >= this.game.input.holdRate && ((this.game.input.multiInputOverride == i.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == i.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == i.Input.TOUCH_OVERRIDES_MOUSE && 0 === this.game.input.currentPointers)) && this.game.input.onHold.dispatch(this), (this._holdSent = !0)), this.game.input.recordPointerHistory && this.game.time.now >= this._nextDrop && ((this._nextDrop = this.game.time.now + this.game.input.recordRate), this._history.push({ x: this.position.x, y: this.position.y }), this._history.length > this.game.input.recordLimit && this._history.shift())); }, move: function (t) { if (!this.game.input.pollLocked) { if ( ("undefined" != typeof t.button && (this.button = t.button), (this.clientX = t.clientX), (this.clientY = t.clientY), (this.pageX = t.pageX), (this.pageY = t.pageY), (this.screenX = t.screenX), (this.screenY = t.screenY), (this.x = (this.pageX - this.game.stage.offset.x) * this.game.input.scale.x), (this.y = (this.pageY - this.game.stage.offset.y) * this.game.input.scale.y), this.position.setTo(this.x, this.y), (this.circle.x = this.x), (this.circle.y = this.y), (this.game.input.multiInputOverride == i.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == i.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == i.Input.TOUCH_OVERRIDES_MOUSE && 0 === this.game.input.currentPointers)) && ((this.game.input.activePointer = this), (this.game.input.x = this.x), (this.game.input.y = this.y), this.game.input.position.setTo(this.game.input.x, this.game.input.y), (this.game.input.circle.x = this.game.input.x), (this.game.input.circle.y = this.game.input.y)), this.game.paused) ) return this; if ((this.game.input.moveCallback && this.game.input.moveCallback.call(this.game.input.moveCallbackContext, this, this.x, this.y), null !== this.targetObject && this.targetObject.isDragged === !0)) return this.targetObject.update(this) === !1 && (this.targetObject = null), this; if (((this._highestRenderOrderID = -1), (this._highestRenderObject = null), (this._highestInputPriorityID = -1), this.game.input.interactiveItems.total > 0)) { var e = this.game.input.interactiveItems.next; do (e.pixelPerfect || e.priorityID > this._highestInputPriorityID || (e.priorityID == this._highestInputPriorityID && e.sprite.renderOrderID > this._highestRenderOrderID)) && e.checkPointerOver(this) && ((this._highestRenderOrderID = e.sprite.renderOrderID), (this._highestInputPriorityID = e.priorityID), (this._highestRenderObject = e)), (e = e.next); while (null != e); } return ( null == this._highestRenderObject ? this.targetObject && (this.targetObject._pointerOutHandler(this), (this.targetObject = null)) : null == this.targetObject ? ((this.targetObject = this._highestRenderObject), this._highestRenderObject._pointerOverHandler(this)) : this.targetObject == this._highestRenderObject ? this._highestRenderObject.update(this) === !1 && (this.targetObject = null) : (this.targetObject._pointerOutHandler(this), (this.targetObject = this._highestRenderObject), this.targetObject._pointerOverHandler(this)), this ); } }, leave: function (t) { (this.withinGame = !1), this.move(t); }, stop: function (t) { if (this._stateReset) return void t.preventDefault(); if ( ((this.timeUp = this.game.time.now), (this.game.input.multiInputOverride == i.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == i.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == i.Input.TOUCH_OVERRIDES_MOUSE && 0 === this.game.input.currentPointers)) && (this.game.input.onUp.dispatch(this, t), this.duration >= 0 && this.duration <= this.game.input.tapRate && (this.timeUp - this.previousTapTime < this.game.input.doubleTapRate ? this.game.input.onTap.dispatch(this, !0) : this.game.input.onTap.dispatch(this, !1), (this.previousTapTime = this.timeUp))), this.id > 0 && (this.active = !1), (this.withinGame = !1), (this.isDown = !1), (this.isUp = !0), this.isMouse === !1 && this.game.input.currentPointers--, this.game.input.interactiveItems.total > 0) ) { var e = this.game.input.interactiveItems.next; do e && e._releasedHandler(this), (e = e.next); while (null != e); } return this.targetObject && this.targetObject._releasedHandler(this), (this.targetObject = null), this; }, justPressed: function (t) { return (t = t || this.game.input.justPressedRate), this.isDown === !0 && this.timeDown + t > this.game.time.now; }, justReleased: function (t) { return (t = t || this.game.input.justReleasedRate), this.isUp === !0 && this.timeUp + t > this.game.time.now; }, reset: function () { this.isMouse === !1 && (this.active = !1), (this.identifier = null), (this.isDown = !1), (this.isUp = !0), (this.totalTouches = 0), (this._holdSent = !1), (this._history.length = 0), (this._stateReset = !0), this.targetObject && this.targetObject._releasedHandler(this), (this.targetObject = null); }, }), (i.Pointer.prototype.constructor = i.Pointer), Object.defineProperty(i.Pointer.prototype, "duration", { get: function () { return this.isUp ? -1 : this.game.time.now - this.timeDown; }, }), Object.defineProperty(i.Pointer.prototype, "worldX", { get: function () { return this.game.world.camera.x + this.x; }, }), Object.defineProperty(i.Pointer.prototype, "worldY", { get: function () { return this.game.world.camera.y + this.y; }, }), (i.Touch = function (t) { (this.game = t), (this.disabled = !1), (this.callbackContext = this.game), (this.touchStartCallback = null), (this.touchMoveCallback = null), (this.touchEndCallback = null), (this.touchEnterCallback = null), (this.touchLeaveCallback = null), (this.touchCancelCallback = null), (this.preventDefault = !0), (this.event = null), (this._onTouchStart = null), (this._onTouchMove = null), (this._onTouchEnd = null), (this._onTouchEnter = null), (this._onTouchLeave = null), (this._onTouchCancel = null), (this._onTouchMove = null); }), (i.Touch.prototype = { start: function () { var t = this; this.game.device.touch && ((this._onTouchStart = function (e) { return t.onTouchStart(e); }), (this._onTouchMove = function (e) { return t.onTouchMove(e); }), (this._onTouchEnd = function (e) { return t.onTouchEnd(e); }), (this._onTouchEnter = function (e) { return t.onTouchEnter(e); }), (this._onTouchLeave = function (e) { return t.onTouchLeave(e); }), (this._onTouchCancel = function (e) { return t.onTouchCancel(e); }), this.game.renderer.view.addEventListener("touchstart", this._onTouchStart, !1), this.game.renderer.view.addEventListener("touchmove", this._onTouchMove, !1), this.game.renderer.view.addEventListener("touchend", this._onTouchEnd, !1), this.game.renderer.view.addEventListener("touchenter", this._onTouchEnter, !1), this.game.renderer.view.addEventListener("touchleave", this._onTouchLeave, !1), this.game.renderer.view.addEventListener("touchcancel", this._onTouchCancel, !1)); }, consumeDocumentTouches: function () { (this._documentTouchMove = function (t) { t.preventDefault(); }), document.addEventListener("touchmove", this._documentTouchMove, !1); }, onTouchStart: function (t) { if (((this.event = t), this.touchStartCallback && this.touchStartCallback.call(this.callbackContext, t), !this.game.input.disabled && !this.disabled)) { this.preventDefault && t.preventDefault(); for (var e = 0; e < t.changedTouches.length; e++) this.game.input.startPointer(t.changedTouches[e]); } }, onTouchCancel: function (t) { if (((this.event = t), this.touchCancelCallback && this.touchCancelCallback.call(this.callbackContext, t), !this.game.input.disabled && !this.disabled)) { this.preventDefault && t.preventDefault(); for (var e = 0; e < t.changedTouches.length; e++) this.game.input.stopPointer(t.changedTouches[e]); } }, onTouchEnter: function (t) { (this.event = t), this.touchEnterCallback && this.touchEnterCallback.call(this.callbackContext, t), this.game.input.disabled || this.disabled || (this.preventDefault && t.preventDefault()); }, onTouchLeave: function (t) { (this.event = t), this.touchLeaveCallback && this.touchLeaveCallback.call(this.callbackContext, t), this.preventDefault && t.preventDefault(); }, onTouchMove: function (t) { (this.event = t), this.touchMoveCallback && this.touchMoveCallback.call(this.callbackContext, t), this.preventDefault && t.preventDefault(); for (var e = 0; e < t.changedTouches.length; e++) this.game.input.updatePointer(t.changedTouches[e]); }, onTouchEnd: function (t) { (this.event = t), this.touchEndCallback && this.touchEndCallback.call(this.callbackContext, t), this.preventDefault && t.preventDefault(); for (var e = 0; e < t.changedTouches.length; e++) this.game.input.stopPointer(t.changedTouches[e]); }, stop: function () { this.game.device.touch && (this.game.stage.canvas.removeEventListener("touchstart", this._onTouchStart), this.game.stage.canvas.removeEventListener("touchmove", this._onTouchMove), this.game.stage.canvas.removeEventListener("touchend", this._onTouchEnd), this.game.stage.canvas.removeEventListener("touchenter", this._onTouchEnter), this.game.stage.canvas.removeEventListener("touchleave", this._onTouchLeave), this.game.stage.canvas.removeEventListener("touchcancel", this._onTouchCancel)); }, }), (i.Touch.prototype.constructor = i.Touch), (i.InputHandler = function (t) { (this.sprite = t), (this.game = t.game), (this.enabled = !1), (this.priorityID = 0), (this.useHandCursor = !1), (this.isDragged = !1), (this.allowHorizontalDrag = !0), (this.allowVerticalDrag = !0), (this.bringToTop = !1), (this.snapOffset = null), (this.snapOnDrag = !1), (this.snapOnRelease = !1), (this.snapX = 0), (this.snapY = 0), (this.snapOffsetX = 0), (this.snapOffsetY = 0), (this.pixelPerfect = !1), (this.pixelPerfectAlpha = 255), (this.draggable = !1), (this.boundsRect = null), (this.boundsSprite = null), (this.consumePointerEvent = !1), (this._tempPoint = new i.Point()), (this._pointerData = []), this._pointerData.push({ id: 0, x: 0, y: 0, isDown: !1, isUp: !1, isOver: !1, isOut: !1, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: !1 }); }), (i.InputHandler.prototype = { start: function (t, e) { if (((t = t || 0), "undefined" == typeof e && (e = !1), this.enabled === !1)) { this.game.input.interactiveItems.add(this), (this.useHandCursor = e), (this.priorityID = t); for (var s = 0; 10 > s; s++) this._pointerData[s] = { id: s, x: 0, y: 0, isDown: !1, isUp: !1, isOver: !1, isOut: !1, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: !1 }; (this.snapOffset = new i.Point()), (this.enabled = !0), this.sprite.events && null == this.sprite.events.onInputOver && ((this.sprite.events.onInputOver = new i.Signal()), (this.sprite.events.onInputOut = new i.Signal()), (this.sprite.events.onInputDown = new i.Signal()), (this.sprite.events.onInputUp = new i.Signal()), (this.sprite.events.onDragStart = new i.Signal()), (this.sprite.events.onDragStop = new i.Signal())); } return this.sprite; }, reset: function () { this.enabled = !1; for (var t = 0; 10 > t; t++) this._pointerData[t] = { id: t, x: 0, y: 0, isDown: !1, isUp: !1, isOver: !1, isOut: !1, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: !1 }; }, stop: function () { this.enabled !== !1 && ((this.enabled = !1), this.game.input.interactiveItems.remove(this)); }, destroy: function () { this.enabled && ((this.enabled = !1), this.game.input.interactiveItems.remove(this), this.stop(), (this.sprite = null)); }, pointerX: function (t) { return (t = t || 0), this._pointerData[t].x; }, pointerY: function (t) { return (t = t || 0), this._pointerData[t].y; }, pointerDown: function (t) { return (t = t || 0), this._pointerData[t].isDown; }, pointerUp: function (t) { return (t = t || 0), this._pointerData[t].isUp; }, pointerTimeDown: function (t) { return (t = t || 0), this._pointerData[t].timeDown; }, pointerTimeUp: function (t) { return (t = t || 0), this._pointerData[t].timeUp; }, pointerOver: function (t) { if (this.enabled) { if ("undefined" != typeof t) return this._pointerData[t].isOver; for (var e = 0; 10 > e; e++) if (this._pointerData[e].isOver) return !0; } return !1; }, pointerOut: function (t) { if (this.enabled) { if ("undefined" != typeof t) return this._pointerData[t].isOut; for (var e = 0; 10 > e; e++) if (this._pointerData[e].isOut) return !0; } return !1; }, pointerTimeOver: function (t) { return (t = t || 0), this._pointerData[t].timeOver; }, pointerTimeOut: function (t) { return (t = t || 0), this._pointerData[t].timeOut; }, pointerDragged: function (t) { return (t = t || 0), this._pointerData[t].isDragged; }, checkPointerOver: function (t) { return this.enabled === !1 || this.sprite.visible === !1 || (this.sprite.group && this.sprite.group.visible === !1) ? !1 : (this.sprite.getLocalUnmodifiedPosition(this._tempPoint, t.x, t.y), this._tempPoint.x >= 0 && this._tempPoint.x <= this.sprite.currentFrame.width && this._tempPoint.y >= 0 && this._tempPoint.y <= this.sprite.currentFrame.height ? this.pixelPerfect ? this.checkPixel(this._tempPoint.x, this._tempPoint.y) : !0 : void 0); }, checkPixel: function (t, e) { if (this.sprite.texture.baseTexture.source) { this.game.input.hitContext.clearRect(0, 0, 1, 1), (t += this.sprite.texture.frame.x), (e += this.sprite.texture.frame.y), this.game.input.hitContext.drawImage(this.sprite.texture.baseTexture.source, t, e, 1, 1, 0, 0, 1, 1); var i = this.game.input.hitContext.getImageData(0, 0, 1, 1); if (i.data[3] >= this.pixelPerfectAlpha) return !0; } return !1; }, update: function (t) { return this.enabled === !1 || this.sprite.visible === !1 || (this.sprite.group && this.sprite.group.visible === !1) ? (this._pointerOutHandler(t), !1) : this.draggable && this._draggedPointerID == t.id ? this.updateDrag(t) : this._pointerData[t.id].isOver === !0 ? this.checkPointerOver(t) ? ((this._pointerData[t.id].x = t.x - this.sprite.x), (this._pointerData[t.id].y = t.y - this.sprite.y), !0) : (this._pointerOutHandler(t), !1) : void 0; }, _pointerOverHandler: function (t) { this._pointerData[t.id].isOver === !1 && ((this._pointerData[t.id].isOver = !0), (this._pointerData[t.id].isOut = !1), (this._pointerData[t.id].timeOver = this.game.time.now), (this._pointerData[t.id].x = t.x - this.sprite.x), (this._pointerData[t.id].y = t.y - this.sprite.y), this.useHandCursor && this._pointerData[t.id].isDragged === !1 && (this.game.canvas.style.cursor = "pointer"), this.sprite.events.onInputOver.dispatch(this.sprite, t)); }, _pointerOutHandler: function (t) { (this._pointerData[t.id].isOver = !1), (this._pointerData[t.id].isOut = !0), (this._pointerData[t.id].timeOut = this.game.time.now), this.useHandCursor && this._pointerData[t.id].isDragged === !1 && (this.game.canvas.style.cursor = "default"), this.sprite && this.sprite.events && this.sprite.events.onInputOut.dispatch(this.sprite, t); }, _touchedHandler: function (t) { return ( this._pointerData[t.id].isDown === !1 && this._pointerData[t.id].isOver === !0 && ((this._pointerData[t.id].isDown = !0), (this._pointerData[t.id].isUp = !1), (this._pointerData[t.id].timeDown = this.game.time.now), this.sprite.events.onInputDown.dispatch(this.sprite, t), this.draggable && this.isDragged === !1 && this.startDrag(t), this.bringToTop && this.sprite.bringToTop()), this.consumePointerEvent ); }, _releasedHandler: function (t) { this._pointerData[t.id].isDown && t.isUp && ((this._pointerData[t.id].isDown = !1), (this._pointerData[t.id].isUp = !0), (this._pointerData[t.id].timeUp = this.game.time.now), (this._pointerData[t.id].downDuration = this._pointerData[t.id].timeUp - this._pointerData[t.id].timeDown), this.checkPointerOver(t) ? this.sprite.events.onInputUp.dispatch(this.sprite, t, !0) : (this.sprite.events.onInputUp.dispatch(this.sprite, t, !1), this.useHandCursor && (this.game.canvas.style.cursor = "default")), this.draggable && this.isDragged && this._draggedPointerID == t.id && this.stopDrag(t)); }, updateDrag: function (t) { return t.isUp ? (this.stopDrag(t), !1) : (this.sprite.fixedToCamera ? (this.allowHorizontalDrag && (this.sprite.cameraOffset.x = t.x + this._dragPoint.x + this.dragOffset.x), this.allowVerticalDrag && (this.sprite.cameraOffset.y = t.y + this._dragPoint.y + this.dragOffset.y), this.boundsRect && this.checkBoundsRect(), this.boundsSprite && this.checkBoundsSprite(), this.snapOnDrag && ((this.sprite.cameraOffset.x = Math.round((this.sprite.cameraOffset.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX)), (this.sprite.cameraOffset.y = Math.round((this.sprite.cameraOffset.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY)))) : (this.allowHorizontalDrag && (this.sprite.x = t.x + this._dragPoint.x + this.dragOffset.x), this.allowVerticalDrag && (this.sprite.y = t.y + this._dragPoint.y + this.dragOffset.y), this.boundsRect && this.checkBoundsRect(), this.boundsSprite && this.checkBoundsSprite(), this.snapOnDrag && ((this.sprite.x = Math.round((this.sprite.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX)), (this.sprite.y = Math.round((this.sprite.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY)))), !0); }, justOver: function (t, e) { return (t = t || 0), (e = e || 500), this._pointerData[t].isOver && this.overDuration(t) < e; }, justOut: function (t, e) { return (t = t || 0), (e = e || 500), this._pointerData[t].isOut && this.game.time.now - this._pointerData[t].timeOut < e; }, justPressed: function (t, e) { return (t = t || 0), (e = e || 500), this._pointerData[t].isDown && this.downDuration(t) < e; }, justReleased: function (t, e) { return (t = t || 0), (e = e || 500), this._pointerData[t].isUp && this.game.time.now - this._pointerData[t].timeUp < e; }, overDuration: function (t) { return (t = t || 0), this._pointerData[t].isOver ? this.game.time.now - this._pointerData[t].timeOver : -1; }, downDuration: function (t) { return (t = t || 0), this._pointerData[t].isDown ? this.game.time.now - this._pointerData[t].timeDown : -1; }, enableDrag: function (t, e, s, n, r, o) { "undefined" == typeof t && (t = !1), "undefined" == typeof e && (e = !1), "undefined" == typeof s && (s = !1), "undefined" == typeof n && (n = 255), "undefined" == typeof r && (r = null), "undefined" == typeof o && (o = null), (this._dragPoint = new i.Point()), (this.draggable = !0), (this.bringToTop = e), (this.dragOffset = new i.Point()), (this.dragFromCenter = t), (this.pixelPerfect = s), (this.pixelPerfectAlpha = n), r && (this.boundsRect = r), o && (this.boundsSprite = o); }, disableDrag: function () { if (this._pointerData) for (var t = 0; 10 > t; t++) this._pointerData[t].isDragged = !1; (this.draggable = !1), (this.isDragged = !1), (this._draggedPointerID = -1); }, startDrag: function (t) { (this.isDragged = !0), (this._draggedPointerID = t.id), (this._pointerData[t.id].isDragged = !0), this.sprite.fixedToCamera ? this.dragFromCenter ? (this.sprite.centerOn(t.x, t.y), this._dragPoint.setTo(this.sprite.cameraOffset.x - t.x, this.sprite.cameraOffset.y - t.y)) : this._dragPoint.setTo(this.sprite.cameraOffset.x - t.x, this.sprite.cameraOffset.y - t.y) : this.dragFromCenter ? (this.sprite.centerOn(t.x, t.y), this._dragPoint.setTo(this.sprite.x - t.x, this.sprite.y - t.y)) : this._dragPoint.setTo(this.sprite.x - t.x, this.sprite.y - t.y), this.updateDrag(t), this.bringToTop && this.sprite.bringToTop(), this.sprite.events.onDragStart.dispatch(this.sprite, t); }, stopDrag: function (t) { (this.isDragged = !1), (this._draggedPointerID = -1), (this._pointerData[t.id].isDragged = !1), this.snapOnRelease && (this.sprite.fixedToCamera ? ((this.sprite.cameraOffset.x = Math.round((this.sprite.cameraOffset.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX)), (this.sprite.cameraOffset.y = Math.round((this.sprite.cameraOffset.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY))) : ((this.sprite.x = Math.round((this.sprite.x - (this.snapOffsetX % this.snapX)) / this.snapX) * this.snapX + (this.snapOffsetX % this.snapX)), (this.sprite.y = Math.round((this.sprite.y - (this.snapOffsetY % this.snapY)) / this.snapY) * this.snapY + (this.snapOffsetY % this.snapY)))), this.sprite.events.onDragStop.dispatch(this.sprite, t), this.sprite.events.onInputUp.dispatch(this.sprite, t), this.checkPointerOver(t) === !1 && this._pointerOutHandler(t); }, setDragLock: function (t, e) { "undefined" == typeof t && (t = !0), "undefined" == typeof e && (e = !0), (this.allowHorizontalDrag = t), (this.allowVerticalDrag = e); }, enableSnap: function (t, e, i, s) { "undefined" == typeof i && (i = !0), "undefined" == typeof s && (s = !1), "undefined" == typeof snapOffsetX && (snapOffsetX = 0), "undefined" == typeof snapOffsetY && (snapOffsetY = 0), (this.snapX = t), (this.snapY = e), (this.snapOffsetX = snapOffsetX), (this.snapOffsetY = snapOffsetY), (this.snapOnDrag = i), (this.snapOnRelease = s); }, disableSnap: function () { (this.snapOnDrag = !1), (this.snapOnRelease = !1); }, checkBoundsRect: function () { this.sprite.fixedToCamera ? (this.sprite.cameraOffset.x < this.boundsRect.left ? (this.sprite.cameraOffset.x = this.boundsRect.cameraOffset.x) : this.sprite.cameraOffset.x + this.sprite.width > this.boundsRect.right && (this.sprite.cameraOffset.x = this.boundsRect.right - this.sprite.width), this.sprite.cameraOffset.y < this.boundsRect.top ? (this.sprite.cameraOffset.y = this.boundsRect.top) : this.sprite.cameraOffset.y + this.sprite.height > this.boundsRect.bottom && (this.sprite.cameraOffset.y = this.boundsRect.bottom - this.sprite.height)) : (this.sprite.x < this.boundsRect.left ? (this.sprite.x = this.boundsRect.x) : this.sprite.x + this.sprite.width > this.boundsRect.right && (this.sprite.x = this.boundsRect.right - this.sprite.width), this.sprite.y < this.boundsRect.top ? (this.sprite.y = this.boundsRect.top) : this.sprite.y + this.sprite.height > this.boundsRect.bottom && (this.sprite.y = this.boundsRect.bottom - this.sprite.height)); }, checkBoundsSprite: function () { this.sprite.fixedToCamera && this.boundsSprite.fixedToCamera ? (this.sprite.cameraOffset.x < this.boundsSprite.camerOffset.x ? (this.sprite.cameraOffset.x = this.boundsSprite.camerOffset.x) : this.sprite.cameraOffset.x + this.sprite.width > this.boundsSprite.camerOffset.x + this.boundsSprite.width && (this.sprite.cameraOffset.x = this.boundsSprite.camerOffset.x + this.boundsSprite.width - this.sprite.width), this.sprite.cameraOffset.y < this.boundsSprite.camerOffset.y ? (this.sprite.cameraOffset.y = this.boundsSprite.camerOffset.y) : this.sprite.cameraOffset.y + this.sprite.height > this.boundsSprite.camerOffset.y + this.boundsSprite.height && (this.sprite.cameraOffset.y = this.boundsSprite.camerOffset.y + this.boundsSprite.height - this.sprite.height)) : (this.sprite.x < this.boundsSprite.x ? (this.sprite.x = this.boundsSprite.x) : this.sprite.x + this.sprite.width > this.boundsSprite.x + this.boundsSprite.width && (this.sprite.x = this.boundsSprite.x + this.boundsSprite.width - this.sprite.width), this.sprite.y < this.boundsSprite.y ? (this.sprite.y = this.boundsSprite.y) : this.sprite.y + this.sprite.height > this.boundsSprite.y + this.boundsSprite.height && (this.sprite.y = this.boundsSprite.y + this.boundsSprite.height - this.sprite.height)); }, }), (i.InputHandler.prototype.constructor = i.InputHandler), (i.Gamepad = function (t) { (this.game = t), (this._gamepads = [new i.SinglePad(t, this), new i.SinglePad(t, this), new i.SinglePad(t, this), new i.SinglePad(t, this)]), (this._gamepadIndexMap = {}), (this._rawPads = []), (this._active = !1), (this.disabled = !1), (this._gamepadSupportAvailable = !!navigator.webkitGetGamepads || !!navigator.webkitGamepads || -1 != navigator.userAgent.indexOf("Firefox/")), (this._prevRawGamepadTypes = []), (this._prevTimestamps = []), (this.callbackContext = this), (this.onConnectCallback = null), (this.onDisconnectCallback = null), (this.onDownCallback = null), (this.onUpCallback = null), (this.onAxisCallback = null), (this.onFloatCallback = null), (this._ongamepadconnected = null), (this._gamepaddisconnected = null); }), (i.Gamepad.prototype = { addCallbacks: function (t, e) { "undefined" != typeof e && ((this.onConnectCallback = "function" == typeof e.onConnect ? e.onConnect : this.onConnectCallback), (this.onDisconnectCallback = "function" == typeof e.onDisconnect ? e.onDisconnect : this.onDisconnectCallback), (this.onDownCallback = "function" == typeof e.onDown ? e.onDown : this.onDownCallback), (this.onUpCallback = "function" == typeof e.onUp ? e.onUp : this.onUpCallback), (this.onAxisCallback = "function" == typeof e.onAxis ? e.onAxis : this.onAxisCallback), (this.onFloatCallback = "function" == typeof e.onFloat ? e.onFloat : this.onFloatCallback)); }, start: function () { this._active = !0; var t = this; (this._ongamepadconnected = function (e) { var i = e.gamepad; t._rawPads.push(i), t._gamepads[i.index].connect(i); }), window.addEventListener("gamepadconnected", this._ongamepadconnected, !1), (this._ongamepaddisconnected = function (e) { var i = e.gamepad; for (var s in t._rawPads) t._rawPads[s].index === i.index && t._rawPads.splice(s, 1); t._gamepads[i.index].disconnect(); }), window.addEventListener("gamepaddisconnected", this._ongamepaddisconnected, !1); }, update: function () { this._pollGamepads(); for (var t = 0; t < this._gamepads.length; t++) this._gamepads[t]._connected && this._gamepads[t].pollStatus(); }, _pollGamepads: function () { var t = (navigator.webkitGetGamepads && navigator.webkitGetGamepads()) || navigator.webkitGamepads; if (t) { this._rawPads = []; for (var e = !1, i = 0; i < t.length && (typeof t[i] !== this._prevRawGamepadTypes[i] && ((e = !0), (this._prevRawGamepadTypes[i] = typeof t[i])), t[i] && this._rawPads.push(t[i]), 3 !== i); i++); if (e) { for (var s, n = { rawIndices: {}, padIndices: {} }, r = 0; r < this._gamepads.length; r++) if (((s = this._gamepads[r]), s.connected)) for (var o = 0; o < this._rawPads.length; o++) this._rawPads[o].index === s.index && ((n.rawIndices[s.index] = !0), (n.padIndices[r] = !0)); for (var a = 0; a < this._gamepads.length; a++) if (((s = this._gamepads[a]), !n.padIndices[a])) { this._rawPads.length < 1 && s.disconnect(); for (var h = 0; h < this._rawPads.length && !n.padIndices[a]; h++) { var l = this._rawPads[h]; if (l) { if (n.rawIndices[l.index]) { s.disconnect(); continue; } s.connect(l), (n.rawIndices[l.index] = !0), (n.padIndices[a] = !0); } else s.disconnect(); } } } } }, setDeadZones: function (t) { for (var e = 0; e < this._gamepads.length; e++) this._gamepads[e].deadZone = t; }, stop: function () { (this._active = !1), window.removeEventListener("gamepadconnected", this._ongamepadconnected), window.removeEventListener("gamepaddisconnected", this._ongamepaddisconnected); }, reset: function () { this.update(); for (var t = 0; t < this._gamepads.length; t++) this._gamepads[t].reset(); }, justPressed: function (t, e) { for (var i = 0; i < this._gamepads.length; i++) if (this._gamepads[i].justPressed(t, e) === !0) return !0; return !1; }, justReleased: function (t, e) { for (var i = 0; i < this._gamepads.length; i++) if (this._gamepads[i].justReleased(t, e) === !0) return !0; return !1; }, isDown: function (t) { for (var e = 0; e < this._gamepads.length; e++) if (this._gamepads[e].isDown(t) === !0) return !0; return !1; }, }), (i.Gamepad.prototype.constructor = i.Gamepad), Object.defineProperty(i.Gamepad.prototype, "active", { get: function () { return this._active; }, }), Object.defineProperty(i.Gamepad.prototype, "supported", { get: function () { return this._gamepadSupportAvailable; }, }), Object.defineProperty(i.Gamepad.prototype, "padsConnected", { get: function () { return this._rawPads.length; }, }), Object.defineProperty(i.Gamepad.prototype, "pad1", { get: function () { return this._gamepads[0]; }, }), Object.defineProperty(i.Gamepad.prototype, "pad2", { get: function () { return this._gamepads[1]; }, }), Object.defineProperty(i.Gamepad.prototype, "pad3", { get: function () { return this._gamepads[2]; }, }), Object.defineProperty(i.Gamepad.prototype, "pad4", { get: function () { return this._gamepads[3]; }, }), (i.Gamepad.BUTTON_0 = 0), (i.Gamepad.BUTTON_1 = 1), (i.Gamepad.BUTTON_2 = 2), (i.Gamepad.BUTTON_3 = 3), (i.Gamepad.BUTTON_4 = 4), (i.Gamepad.BUTTON_5 = 5), (i.Gamepad.BUTTON_6 = 6), (i.Gamepad.BUTTON_7 = 7), (i.Gamepad.BUTTON_8 = 8), (i.Gamepad.BUTTON_9 = 9), (i.Gamepad.BUTTON_10 = 10), (i.Gamepad.BUTTON_11 = 11), (i.Gamepad.BUTTON_12 = 12), (i.Gamepad.BUTTON_13 = 13), (i.Gamepad.BUTTON_14 = 14), (i.Gamepad.BUTTON_15 = 15), (i.Gamepad.AXIS_0 = 0), (i.Gamepad.AXIS_1 = 1), (i.Gamepad.AXIS_2 = 2), (i.Gamepad.AXIS_3 = 3), (i.Gamepad.AXIS_4 = 4), (i.Gamepad.AXIS_5 = 5), (i.Gamepad.AXIS_6 = 6), (i.Gamepad.AXIS_7 = 7), (i.Gamepad.AXIS_8 = 8), (i.Gamepad.AXIS_9 = 9), (i.Gamepad.XBOX360_A = 0), (i.Gamepad.XBOX360_B = 1), (i.Gamepad.XBOX360_X = 2), (i.Gamepad.XBOX360_Y = 3), (i.Gamepad.XBOX360_LEFT_BUMPER = 4), (i.Gamepad.XBOX360_RIGHT_BUMPER = 5), (i.Gamepad.XBOX360_LEFT_TRIGGER = 6), (i.Gamepad.XBOX360_RIGHT_TRIGGER = 7), (i.Gamepad.XBOX360_BACK = 8), (i.Gamepad.XBOX360_START = 9), (i.Gamepad.XBOX360_STICK_LEFT_BUTTON = 10), (i.Gamepad.XBOX360_STICK_RIGHT_BUTTON = 11), (i.Gamepad.XBOX360_DPAD_LEFT = 14), (i.Gamepad.XBOX360_DPAD_RIGHT = 15), (i.Gamepad.XBOX360_DPAD_UP = 12), (i.Gamepad.XBOX360_DPAD_DOWN = 13), (i.Gamepad.XBOX360_STICK_LEFT_X = 0), (i.Gamepad.XBOX360_STICK_LEFT_Y = 1), (i.Gamepad.XBOX360_STICK_RIGHT_X = 2), (i.Gamepad.XBOX360_STICK_RIGHT_Y = 3), (i.SinglePad = function (t, e) { (this.game = t), (this._padParent = e), (this._index = null), (this._rawPad = null), (this._connected = !1), (this._prevTimestamp = null), (this._rawButtons = []), (this._buttons = []), (this._axes = []), (this._hotkeys = []), (this.callbackContext = this), (this.onConnectCallback = null), (this.onDisconnectCallback = null), (this.onDownCallback = null), (this.onUpCallback = null), (this.onAxisCallback = null), (this.onFloatCallback = null), (this.deadZone = 0.26); }), (i.SinglePad.prototype = { addCallbacks: function (t, e) { "undefined" != typeof e && ((this.onConnectCallback = "function" == typeof e.onConnect ? e.onConnect : this.onConnectCallback), (this.onDisconnectCallback = "function" == typeof e.onDisconnect ? e.onDisconnect : this.onDisconnectCallback), (this.onDownCallback = "function" == typeof e.onDown ? e.onDown : this.onDownCallback), (this.onUpCallback = "function" == typeof e.onUp ? e.onUp : this.onUpCallback), (this.onAxisCallback = "function" == typeof e.onAxis ? e.onAxis : this.onAxisCallback), (this.onFloatCallback = "function" == typeof e.onFloat ? e.onFloat : this.onFloatCallback)); }, addButton: function (t) { return (this._hotkeys[t] = new i.GamepadButton(this.game, t)), this._hotkeys[t]; }, pollStatus: function () { if (!this._rawPad.timestamp || this._rawPad.timestamp != this._prevTimestamp) { for (var t = 0; t < this._rawPad.buttons.length; t += 1) { var e = this._rawPad.buttons[t]; this._rawButtons[t] !== e && (1 === e ? this.processButtonDown(t, e) : 0 === e ? this.processButtonUp(t, e) : this.processButtonFloat(t, e), (this._rawButtons[t] = e)); } for (var i = this._rawPad.axes, s = 0; s < i.length; s += 1) { var n = i[s]; this.processAxisChange((n > 0 && n > this.deadZone) || (0 > n && n < -this.deadZone) ? { axis: s, value: n } : { axis: s, value: 0 }); } this._prevTimestamp = this._rawPad.timestamp; } }, connect: function (t) { var e = !this._connected; (this._index = t.index), (this._connected = !0), (this._rawPad = t), (this._rawButtons = t.buttons), (this._axes = t.axes), e && this._padParent.onConnectCallback && this._padParent.onConnectCallback.call(this._padParent.callbackContext, this._index), e && this.onConnectCallback && this.onConnectCallback.call(this.callbackContext); }, disconnect: function () { var t = this._connected; (this._connected = !1), (this._rawPad = void 0), (this._rawButtons = []), (this._buttons = []); var e = this._index; (this._index = null), t && this._padParent.onDisconnectCallback && this._padParent.onDisconnectCallback.call(this._padParent.callbackContext, e), t && this.onDisconnectCallback && this.onDisconnectCallback.call(this.callbackContext); }, processAxisChange: function (t) { this.game.input.disabled || this.game.input.gamepad.disabled || (this._axes[t.axis] !== t.value && ((this._axes[t.axis] = t.value), this._padParent.onAxisCallback && this._padParent.onAxisCallback.call(this._padParent.callbackContext, t, this._index), this.onAxisCallback && this.onAxisCallback.call(this.callbackContext, t))); }, processButtonDown: function (t, e) { this.game.input.disabled || this.game.input.gamepad.disabled || (this._padParent.onDownCallback && this._padParent.onDownCallback.call(this._padParent.callbackContext, t, e, this._index), this.onDownCallback && this.onDownCallback.call(this.callbackContext, t, e), this._buttons[t] && this._buttons[t].isDown ? (this._buttons[t].duration = this.game.time.now - this._buttons[t].timeDown) : this._buttons[t] ? ((this._buttons[t].isDown = !0), (this._buttons[t].timeDown = this.game.time.now), (this._buttons[t].duration = 0), (this._buttons[t].value = e)) : (this._buttons[t] = { isDown: !0, timeDown: this.game.time.now, timeUp: 0, duration: 0, value: e }), this._hotkeys[t] && this._hotkeys[t].processButtonDown(e)); }, processButtonUp: function (t, e) { this.game.input.disabled || this.game.input.gamepad.disabled || (this._padParent.onUpCallback && this._padParent.onUpCallback.call(this._padParent.callbackContext, t, e, this._index), this.onUpCallback && this.onUpCallback.call(this.callbackContext, t, e), this._hotkeys[t] && this._hotkeys[t].processButtonUp(e), this._buttons[t] ? ((this._buttons[t].isDown = !1), (this._buttons[t].timeUp = this.game.time.now), (this._buttons[t].value = e)) : (this._buttons[t] = { isDown: !1, timeDown: this.game.time.now, timeUp: this.game.time.now, duration: 0, value: e })); }, processButtonFloat: function (t, e) { this.game.input.disabled || this.game.input.gamepad.disabled || (this._padParent.onFloatCallback && this._padParent.onFloatCallback.call(this._padParent.callbackContext, t, e, this._index), this.onFloatCallback && this.onFloatCallback.call(this.callbackContext, t, e), this._buttons[t] ? (this._buttons[t].value = e) : (this._buttons[t] = { value: e }), this._hotkeys[t] && this._hotkeys[t].processButtonFloat(e)); }, axis: function (t) { return this._axes[t] ? this._axes[t] : !1; }, isDown: function (t) { return this._buttons[t] ? this._buttons[t].isDown : !1; }, justReleased: function (t, e) { return "undefined" == typeof e && (e = 250), this._buttons[t] && this._buttons[t].isDown === !1 && this.game.time.now - this._buttons[t].timeUp < e; }, justPressed: function (t, e) { return "undefined" == typeof e && (e = 250), this._buttons[t] && this._buttons[t].isDown && this._buttons[t].duration < e; }, buttonValue: function (t) { return this._buttons[t] ? this._buttons[t].value : !1; }, reset: function () { for (var t = 0; t < this._buttons.length; t++) this._buttons[t] = 0; for (var e = 0; e < this._axes.length; e++) this._axes[e] = 0; }, }), (i.SinglePad.prototype.constructor = i.SinglePad), Object.defineProperty(i.SinglePad.prototype, "connected", { get: function () { return this._connected; }, }), Object.defineProperty(i.SinglePad.prototype, "index", { get: function () { return this._index; }, }), (i.GamepadButton = function (t, e) { (this.game = t), (this.isDown = !1), (this.isUp = !1), (this.timeDown = 0), (this.duration = 0), (this.timeUp = 0), (this.repeats = 0), (this.value = 0), (this.buttonCode = e), (this.onDown = new i.Signal()), (this.onUp = new i.Signal()), (this.onFloat = new i.Signal()); }), (i.GamepadButton.prototype = { processButtonDown: function (t) { this.isDown ? ((this.duration = this.game.time.now - this.timeDown), this.repeats++) : ((this.isDown = !0), (this.isUp = !1), (this.timeDown = this.game.time.now), (this.duration = 0), (this.repeats = 0), (this.value = t), this.onDown.dispatch(this, t)); }, processButtonUp: function (t) { (this.isDown = !1), (this.isUp = !0), (this.timeUp = this.game.time.now), (this.value = t), this.onUp.dispatch(this, t); }, processButtonFloat: function (t) { (this.value = t), this.onFloat.dispatch(this, t); }, justPressed: function (t) { return "undefined" == typeof t && (t = 250), this.isDown && this.duration < t; }, justReleased: function (t) { return "undefined" == typeof t && (t = 250), this.isDown === !1 && this.game.time.now - this.timeUp < t; }, }), (i.GamepadButton.prototype.constructor = i.GamepadButton), (i.Events = function (t) { (this.parent = t), (this.onAddedToGroup = new i.Signal()), (this.onRemovedFromGroup = new i.Signal()), (this.onKilled = new i.Signal()), (this.onRevived = new i.Signal()), (this.onOutOfBounds = new i.Signal()), (this.onInputOver = null), (this.onInputOut = null), (this.onInputDown = null), (this.onInputUp = null), (this.onDragStart = null), (this.onDragStop = null), (this.onAnimationStart = null), (this.onAnimationComplete = null), (this.onAnimationLoop = null), (this.onBeginContact = null), (this.onEndContact = null); }), (i.Events.prototype = { destroy: function () { (this.parent = null), this.onAddedToGroup.dispose(), this.onRemovedFromGroup.dispose(), this.onKilled.dispose(), this.onRevived.dispose(), this.onOutOfBounds.dispose(), this.onInputOver && (this.onInputOver.dispose(), this.onInputOut.dispose(), this.onInputDown.dispose(), this.onInputUp.dispose(), this.onDragStart.dispose(), this.onDragStop.dispose()), this.onAnimationStart && (this.onAnimationStart.dispose(), this.onAnimationComplete.dispose(), this.onAnimationLoop.dispose()); }, }), (i.Events.prototype.constructor = i.Events), (i.GameObjectFactory = function (t) { (this.game = t), (this.world = this.game.world); }), (i.GameObjectFactory.prototype = { existing: function (t) { return this.world.add(t); }, sprite: function (t, e, i, s, n) { return "undefined" == typeof n && (n = this.world), n.create(t, e, i, s); }, child: function (t, e, i, s, n) { return t.create(e, i, s, n); }, tween: function (t) { return this.game.tweens.create(t); }, group: function (t, e) { return new i.Group(this.game, t, e); }, audio: function (t, e, i, s) { return this.game.sound.add(t, e, i, s); }, sound: function (t, e, i, s) { return this.game.sound.add(t, e, i, s); }, tileSprite: function (t, e, s, n, r, o) { return "undefined" == typeof o && (o = this.world), o.add(new i.TileSprite(this.game, t, e, s, n, r)); }, text: function (t, e, s, n, r) { return "undefined" == typeof r && (r = this.world), r.add(new i.Text(this.game, t, e, s, n)); }, button: function (t, e, s, n, r, o, a, h, l, c) { return "undefined" == typeof c && (c = this.world), c.add(new i.Button(this.game, t, e, s, n, r, o, a, h, l)); }, graphics: function (t, e, s) { return "undefined" == typeof s && (s = this.world), s.add(new i.Graphics(this.game, t, e)); }, emitter: function (t, e, s) { return this.game.particles.add(new i.Particles.Arcade.Emitter(this.game, t, e, s)); }, bitmapText: function (t, e, s, n, r) { return "undefined" == typeof r && (r = this.world), this.world.add(new i.BitmapText(this.game, t, e, s, n)); }, tilemap: function (t, e) { return new i.Tilemap(this.game, t, e); }, renderTexture: function (t, e, s) { var n = new i.RenderTexture(this.game, t, e, s); return this.game.cache.addRenderTexture(t, n), n; }, bitmapData: function (t, e) { return new i.BitmapData(this.game, t, e); }, filter: function (t) { var e = Array.prototype.splice.call(arguments, 1), t = new i.Filter[t](this.game); return t.init.apply(t, e), t; }, }), (i.GameObjectFactory.prototype.constructor = i.GameObjectFactory), (i.BitmapData = function (t, s, n) { "undefined" == typeof s && (s = 256), "undefined" == typeof n && (n = 256), (this.game = t), (this.name = ""), (this.width = s), (this.height = n), (this.canvas = i.Canvas.create(s, n)), (this.context = this.canvas.getContext("2d")), (this.imageData = this.context.getImageData(0, 0, s, n)), (this.pixels = this.imageData.data.buffer ? this.imageData.data.buffer : this.imageData.data), (this.baseTexture = new e.BaseTexture(this.canvas)), (this.texture = new e.Texture(this.baseTexture)), (this.textureFrame = new i.Frame(0, 0, 0, s, n, "bitmapData", t.rnd.uuid())), (this.type = i.BITMAPDATA), (this._dirty = !1); }), (i.BitmapData.prototype = { add: function (t) { t.loadTexture(this); }, addTo: function (t) { for (var e = 0; e < t.length; e++) t[e].texture && t[e].loadTexture(this); }, clear: function () { this.context.clearRect(0, 0, this.width, this.height), (this._dirty = !0); }, refreshBuffer: function () { (this.imageData = this.context.getImageData(0, 0, this.width, this.height)), (this.pixels = new Int32Array(this.imageData.data.buffer)); }, setPixel32: function (t, e, i, s, n, r) { t >= 0 && t <= this.width && e >= 0 && e <= this.height && ((this.pixels[e * this.width + t] = (r << 24) | (n << 16) | (s << 8) | i), this.context.putImageData(this.imageData, 0, 0), (this._dirty = !0)); }, setPixel: function (t, e, i, s, n) { this.setPixel32(t, e, i, s, n, 255); }, getPixel: function (t, e) { return t >= 0 && t <= this.width && e >= 0 && e <= this.height ? this.data32[e * this.width + t] : void 0; }, getPixel32: function (t, e) { return t >= 0 && t <= this.width && e >= 0 && e <= this.height ? this.data32[e * this.width + t] : void 0; }, getPixels: function (t) { return this.context.getImageData(t.x, t.y, t.width, t.height); }, arc: function (t, e, i, s, n, r) { return "undefined" == typeof r && (r = !1), (this._dirty = !0), this.context.arc(t, e, i, s, n, r), this; }, arcTo: function (t, e, i, s, n) { return (this._dirty = !0), this.context.arcTo(t, e, i, s, n), this; }, beginFill: function (t) { return this.fillStyle(t), this; }, beginLinearGradientFill: function (t, e, i, s, n, r) { for (var o = this.createLinearGradient(i, s, n, r), a = 0, h = t.length; h > a; a++) o.addColorStop(e[a], t[a]); return this.fillStyle(o), this; }, beginLinearGradientStroke: function (t, e, i, s, n, r) { for (var o = this.createLinearGradient(i, s, n, r), a = 0, h = t.length; h > a; a++) o.addColorStop(e[a], t[a]); return this.strokeStyle(o), this; }, beginRadialGradientStroke: function (t, e, i, s, n, r, o, a) { for (var h = this.createRadialGradient(i, s, n, r, o, a), l = 0, c = t.length; c > l; l++) h.addColorStop(e[l], t[l]); return this.strokeStyle(h), this; }, beginPath: function () { return this.context.beginPath(), this; }, beginStroke: function (t) { return this.strokeStyle(t), this; }, bezierCurveTo: function (t, e, i, s, n, r) { return (this._dirty = !0), this.context.bezierCurveTo(t, e, i, s, n, r), this; }, circle: function (t, e, i) { return this.arc(t, e, i, 0, 2 * Math.PI), this; }, clearRect: function (t, e, i, s) { return (this._dirty = !0), this.context.clearRect(t, e, i, s), this; }, clip: function () { return (this._dirty = !0), this.context.clip(), this; }, closePath: function () { return (this._dirty = !0), this.context.closePath(), this; }, createLinearGradient: function (t, e, i, s) { return this.context.createLinearGradient(t, e, i, s); }, createRadialGradient: function (t, e, i, s, n, r) { return this.context.createRadialGradient(t, e, i, s, n, r); }, ellipse: function (t, e, i, s) { var n = 0.5522848, r = (i / 2) * n, o = (s / 2) * n, a = t + i, h = e + s, l = t + i / 2, c = e + s / 2; return this.moveTo(t, c), this.bezierCurveTo(t, c - o, l - r, e, l, e), this.bezierCurveTo(l + r, e, a, c - o, a, c), this.bezierCurveTo(a, c + o, l + r, h, l, h), this.bezierCurveTo(l - r, h, t, c + o, t, c), this; }, fill: function () { return (this._dirty = !0), this.context.fill(), this; }, fillRect: function (t, e, i, s) { return (this._dirty = !0), this.context.fillRect(t, e, i, s), this; }, fillStyle: function (t) { return (this.context.fillStyle = t), this; }, font: function (t) { return (this.context.font = t), this; }, globalAlpha: function (t) { return (this.context.globalAlpha = t), this; }, globalCompositeOperation: function (t) { return (this.context.globalCompositeOperation = t), this; }, lineCap: function (t) { return (this.context.lineCap = t), this; }, lineDashOffset: function (t) { return (this.context.lineDashOffset = t), this; }, lineJoin: function (t) { return (this.context.lineJoin = t), this; }, lineWidth: function (t) { return (this.context.lineWidth = t), this; }, miterLimit: function (t) { return (this.context.miterLimit = t), this; }, lineTo: function (t, e) { return (this._dirty = !0), this.context.lineTo(t, e), this; }, moveTo: function (t, e) { return this.context.moveTo(t, e), this; }, quadraticCurveTo: function (t, e, i, s) { return (this._dirty = !0), this.context.quadraticCurveTo(t, e, i, s), this; }, rect: function (t, e, i, s) { return (this._dirty = !0), this.context.rect(t, e, i, s), this; }, restore: function () { return (this._dirty = !0), this.context.restore(), this; }, rotate: function (t) { return (this._dirty = !0), this.context.rotate(t), this; }, setStrokeStyle: function (t, e, i, s, n) { return ( "undefined" == typeof t && (t = 1), "undefined" == typeof e && (e = "butt"), "undefined" == typeof i && (i = "miter"), "undefined" == typeof s && (s = 10), (n = !1), this.lineWidth(t), this.lineCap(e), this.lineJoin(i), this.miterLimit(s), this ); }, save: function () { return (this._dirty = !0), this.context.save(), this; }, scale: function (t, e) { return (this._dirty = !0), this.context.scale(t, e), this; }, scrollPathIntoView: function () { return (this._dirty = !0), this.context.scrollPathIntoView(), this; }, stroke: function () { return (this._dirty = !0), this.context.stroke(), this; }, strokeRect: function (t, e, i, s) { return (this._dirty = !0), this.context.strokeRect(t, e, i, s), this; }, strokeStyle: function (t) { return (this.context.strokeStyle = t), this; }, render: function () { this._dirty && (this.game.renderType == i.WEBGL && e.texturesToUpdate.push(this.baseTexture), (this._dirty = !1)); }, }), (i.BitmapData.prototype.constructor = i.BitmapData), (i.BitmapData.prototype.mt = i.BitmapData.prototype.moveTo), (i.BitmapData.prototype.lt = i.BitmapData.prototype.lineTo), (i.BitmapData.prototype.at = i.BitmapData.prototype.arcTo), (i.BitmapData.prototype.bt = i.BitmapData.prototype.bezierCurveTo), (i.BitmapData.prototype.qt = i.BitmapData.prototype.quadraticCurveTo), (i.BitmapData.prototype.a = i.BitmapData.prototype.arc), (i.BitmapData.prototype.r = i.BitmapData.prototype.rect), (i.BitmapData.prototype.cp = i.BitmapData.prototype.closePath), (i.BitmapData.prototype.c = i.BitmapData.prototype.clear), (i.BitmapData.prototype.f = i.BitmapData.prototype.beginFill), (i.BitmapData.prototype.lf = i.BitmapData.prototype.beginLinearGradientFill), (i.BitmapData.prototype.rf = i.BitmapData.prototype.beginRadialGradientFill), (i.BitmapData.prototype.ef = i.BitmapData.prototype.endFill), (i.BitmapData.prototype.ss = i.BitmapData.prototype.setStrokeStyle), (i.BitmapData.prototype.s = i.BitmapData.prototype.beginStroke), (i.BitmapData.prototype.ls = i.BitmapData.prototype.beginLinearGradientStroke), (i.BitmapData.prototype.rs = i.BitmapData.prototype.beginRadialGradientStroke), (i.BitmapData.prototype.dr = i.BitmapData.prototype.rect), (i.BitmapData.prototype.dc = i.BitmapData.prototype.circle), (i.BitmapData.prototype.de = i.BitmapData.prototype.ellipse), (i.Sprite = function (t, s, n, r, o) { (s = s || 0), (n = n || 0), (r = r || null), (o = o || null), (this.game = t), (this.exists = !0), (this.alive = !0), (this.group = null), (this.name = ""), (this.type = i.SPRITE), (this.renderOrderID = -1), (this.lifespan = 0), (this.events = new i.Events(this)), (this.animations = new i.AnimationManager(this)), (this.input = new i.InputHandler(this)), (this.key = r), (this.currentFrame = null), r instanceof i.RenderTexture ? (e.Sprite.call(this, r), (this.currentFrame = this.game.cache.getTextureFrame(r.name))) : r instanceof i.BitmapData ? (e.Sprite.call(this, r.texture, r.textureFrame), (this.currentFrame = r.textureFrame)) : r instanceof e.Texture ? (e.Sprite.call(this, r), (this.currentFrame = o)) : (null === r || "undefined" == typeof r ? ((r = "__default"), (this.key = r)) : "string" == typeof r && this.game.cache.checkImageKey(r) === !1 && ((r = "__missing"), (this.key = r)), e.Sprite.call(this, e.TextureCache[r]), this.game.cache.isSpriteSheet(r) ? (this.animations.loadFrameData(this.game.cache.getFrameData(r)), null !== o && ("string" == typeof o ? (this.frameName = o) : (this.frame = o))) : (this.currentFrame = this.game.cache.getFrame(r))), (this.textureRegion = new i.Rectangle(this.texture.frame.x, this.texture.frame.y, this.texture.frame.width, this.texture.frame.height)), (this.anchor = new i.Point()), (this.x = s), (this.y = n), (this.position.x = s), (this.position.y = n), (this.world = new i.Point(s, n)), (this.autoCull = !1), (this.scale = new i.Point(1, 1)), (this._cache = { fresh: !0, dirty: !1, a00: -1, a01: -1, a02: -1, a10: -1, a11: -1, a12: -1, id: -1, i01: -1, i10: -1, idi: -1, left: null, right: null, top: null, bottom: null, prevX: s, prevY: n, x: -1, y: -1, scaleX: 1, scaleY: 1, width: this.currentFrame.sourceSizeW, height: this.currentFrame.sourceSizeH, halfWidth: Math.floor(this.currentFrame.sourceSizeW / 2), halfHeight: Math.floor(this.currentFrame.sourceSizeH / 2), calcWidth: -1, calcHeight: -1, frameID: -1, frameWidth: this.currentFrame.width, frameHeight: this.currentFrame.height, cameraVisible: !0, cropX: 0, cropY: 0, cropWidth: this.currentFrame.sourceSizeW, cropHeight: this.currentFrame.sourceSizeH, }), (this.offset = new i.Point()), (this.center = new i.Point(s + Math.floor(this._cache.width / 2), n + Math.floor(this._cache.height / 2))), (this.topLeft = new i.Point(s, n)), (this.topRight = new i.Point(s + this._cache.width, n)), (this.bottomRight = new i.Point(s + this._cache.width, n + this._cache.height)), (this.bottomLeft = new i.Point(s, n + this._cache.height)), (this.bounds = new i.Rectangle(s, n, this._cache.width, this._cache.height)), (this.body = new i.Physics.Arcade.Body(this)), (this.health = 1), (this.inWorld = i.Rectangle.intersects(this.bounds, this.game.world.bounds)), (this.inWorldThreshold = 0), (this.outOfBoundsKill = !1), (this._outOfBoundsFired = !1), (this.fixedToCamera = !1), (this.cameraOffset = new i.Point(s, n)), (this.crop = new i.Rectangle(0, 0, this._cache.width, this._cache.height)), (this.cropEnabled = !1), (this.debug = !1), this.updateCache(), this.updateBounds(); }), (i.Sprite.prototype = Object.create(e.Sprite.prototype)), (i.Sprite.prototype.constructor = i.Sprite), (i.Sprite.prototype.preUpdate = function () { return this._cache.fresh ? (this.world.setTo(this.parent.position.x + this.x, this.parent.position.y + this.y), (this.worldTransform[2] = this.world.x), (this.worldTransform[5] = this.world.y), (this._cache.fresh = !1), void ( this.body && ((this.body.x = this.world.x - this.anchor.x * this.width + this.body.offset.x), (this.body.y = this.world.y - this.anchor.y * this.height + this.body.offset.y), (this.body.preX = this.body.x), (this.body.preY = this.body.y)) )) : !this.exists || (this.group && !this.group.exists) ? ((this.renderOrderID = -1), !1) : this.lifespan > 0 && ((this.lifespan -= this.game.time.elapsed), this.lifespan <= 0) ? (this.kill(), !1) : ((this._cache.dirty = !1), this.visible && (this.renderOrderID = this.game.world.currentRenderOrderID++), this.updateCache(), this.updateAnimation(), this.updateCrop(), (this._cache.dirty || this.world.x !== this._cache.prevX || this.world.y !== this._cache.prevY) && this.updateBounds(), this.body && this.body.preUpdate(), !0); }), (i.Sprite.prototype.updateCache = function () { (this._cache.prevX = this.world.x), (this._cache.prevY = this.world.y), this.fixedToCamera && ((this.x = this.game.camera.view.x + this.cameraOffset.x), (this.y = this.game.camera.view.y + this.cameraOffset.y)), this.world.setTo(this.game.camera.x + this.worldTransform[2], this.game.camera.y + this.worldTransform[5]), (this.worldTransform[1] != this._cache.i01 || this.worldTransform[3] != this._cache.i10 || this.worldTransform[0] != this._cache.a00 || this.worldTransform[41] != this._cache.a11) && ((this._cache.a00 = this.worldTransform[0]), (this._cache.a01 = this.worldTransform[1]), (this._cache.a10 = this.worldTransform[3]), (this._cache.a11 = this.worldTransform[4]), (this._cache.i01 = this.worldTransform[1]), (this._cache.i10 = this.worldTransform[3]), (this._cache.scaleX = Math.sqrt(this._cache.a00 * this._cache.a00 + this._cache.a01 * this._cache.a01)), (this._cache.scaleY = Math.sqrt(this._cache.a10 * this._cache.a10 + this._cache.a11 * this._cache.a11)), (this._cache.a01 *= -1), (this._cache.a10 *= -1), (this._cache.id = 1 / (this._cache.a00 * this._cache.a11 + this._cache.a01 * -this._cache.a10)), (this._cache.idi = 1 / (this._cache.a00 * this._cache.a11 + this._cache.i01 * -this._cache.i10)), (this._cache.dirty = !0)), (this._cache.a02 = this.worldTransform[2]), (this._cache.a12 = this.worldTransform[5]); }), (i.Sprite.prototype.updateAnimation = function () { (this.animations.update() || (this.currentFrame && this.currentFrame.uuid != this._cache.frameID)) && ((this._cache.frameID = this.currentFrame.uuid), (this._cache.frameWidth = this.texture.frame.width), (this._cache.frameHeight = this.texture.frame.height), (this._cache.width = this.currentFrame.width), (this._cache.height = this.currentFrame.height), (this._cache.halfWidth = Math.floor(this._cache.width / 2)), (this._cache.halfHeight = Math.floor(this._cache.height / 2)), (this._cache.dirty = !0)); }), (i.Sprite.prototype.updateCrop = function () { !this.cropEnabled || (this.crop.width == this._cache.cropWidth && this.crop.height == this._cache.cropHeight && this.crop.x == this._cache.cropX && this.crop.y == this._cache.cropY) || (this.crop.floorAll(), (this._cache.cropX = this.crop.x), (this._cache.cropY = this.crop.y), (this._cache.cropWidth = this.crop.width), (this._cache.cropHeight = this.crop.height), (this.texture.frame = this.crop), (this.texture.width = this.crop.width), (this.texture.height = this.crop.height), (this.texture.updateFrame = !0), e.Texture.frameUpdates.push(this.texture)); }), (i.Sprite.prototype.updateBounds = function () { this.offset.setTo(this._cache.a02 - this.anchor.x * this.width, this._cache.a12 - this.anchor.y * this.height), this.getLocalPosition(this.center, this.offset.x + this.width / 2, this.offset.y + this.height / 2), this.getLocalPosition(this.topLeft, this.offset.x, this.offset.y), this.getLocalPosition(this.topRight, this.offset.x + this.width, this.offset.y), this.getLocalPosition(this.bottomLeft, this.offset.x, this.offset.y + this.height), this.getLocalPosition(this.bottomRight, this.offset.x + this.width, this.offset.y + this.height), (this._cache.left = i.Math.min(this.topLeft.x, this.topRight.x, this.bottomLeft.x, this.bottomRight.x)), (this._cache.right = i.Math.max(this.topLeft.x, this.topRight.x, this.bottomLeft.x, this.bottomRight.x)), (this._cache.top = i.Math.min(this.topLeft.y, this.topRight.y, this.bottomLeft.y, this.bottomRight.y)), (this._cache.bottom = i.Math.max(this.topLeft.y, this.topRight.y, this.bottomLeft.y, this.bottomRight.y)), this.bounds.setTo(this._cache.left, this._cache.top, this._cache.right - this._cache.left, this._cache.bottom - this._cache.top), (this.updateFrame = !0), this.inWorld === !1 ? ((this.inWorld = i.Rectangle.intersects(this.bounds, this.game.world.bounds, this.inWorldThreshold)), this.inWorld && (this._outOfBoundsFired = !1)) : ((this.inWorld = i.Rectangle.intersects(this.bounds, this.game.world.bounds, this.inWorldThreshold)), this.inWorld === !1 && (this.events.onOutOfBounds.dispatch(this), (this._outOfBoundsFired = !0), this.outOfBoundsKill && this.kill())), (this._cache.cameraVisible = i.Rectangle.intersects(this.game.world.camera.screenView, this.bounds, 0)), this.autoCull && (this.renderable = this._cache.cameraVisible); }), (i.Sprite.prototype.getLocalPosition = function (t, e, i) { return ( (t.x = (this._cache.a11 * this._cache.id * e + -this._cache.a01 * this._cache.id * i + (this._cache.a12 * this._cache.a01 - this._cache.a02 * this._cache.a11) * this._cache.id) * this.scale.x + this._cache.a02), (t.y = (this._cache.a00 * this._cache.id * i + -this._cache.a10 * this._cache.id * e + (-this._cache.a12 * this._cache.a00 + this._cache.a02 * this._cache.a10) * this._cache.id) * this.scale.y + this._cache.a12), t ); }), (i.Sprite.prototype.getLocalUnmodifiedPosition = function (t, e, i) { return ( (t.x = this._cache.a11 * this._cache.idi * e + -this._cache.i01 * this._cache.idi * i + (this._cache.a12 * this._cache.i01 - this._cache.a02 * this._cache.a11) * this._cache.idi + this.anchor.x * this._cache.width), (t.y = this._cache.a00 * this._cache.idi * i + -this._cache.i10 * this._cache.idi * e + (-this._cache.a12 * this._cache.a00 + this._cache.a02 * this._cache.i10) * this._cache.idi + this.anchor.y * this._cache.height), t ); }), (i.Sprite.prototype.resetCrop = function () { (this.crop = new i.Rectangle(0, 0, this._cache.width, this._cache.height)), this.texture.setFrame(this.crop), (this.cropEnabled = !1); }), (i.Sprite.prototype.postUpdate = function () { this.key instanceof i.BitmapData && this.key._dirty && this.key.render(), this.exists && (this.body && this.body.postUpdate(), this.fixedToCamera ? ((this._cache.x = this.game.camera.view.x + this.cameraOffset.x), (this._cache.y = this.game.camera.view.y + this.cameraOffset.y)) : ((this._cache.x = this.x), (this._cache.y = this.y)), (this.position.x = this._cache.x), (this.position.y = this._cache.y)); }), (i.Sprite.prototype.loadTexture = function (t, s) { (this.key = t), t instanceof i.RenderTexture ? (this.currentFrame = this.game.cache.getTextureFrame(t.name)) : t instanceof i.BitmapData ? (this.setTexture(t.texture), (this.currentFrame = t.textureFrame)) : t instanceof e.Texture ? (this.currentFrame = s) : (("undefined" == typeof t || this.game.cache.checkImageKey(t) === !1) && ((t = "__default"), (this.key = t)), this.game.cache.isSpriteSheet(t) ? (this.animations.loadFrameData(this.game.cache.getFrameData(t)), "undefined" != typeof s && ("string" == typeof s ? (this.frameName = s) : (this.frame = s))) : ((this.currentFrame = this.game.cache.getFrame(t)), this.setTexture(e.TextureCache[t]))); }), (i.Sprite.prototype.centerOn = function (t, e) { return ( this.fixedToCamera ? ((this.cameraOffset.x = t + (this.cameraOffset.x - this.center.x)), (this.cameraOffset.y = e + (this.cameraOffset.y - this.center.y))) : ((this.x = t + (this.x - this.center.x)), (this.y = e + (this.y - this.center.y))), this ); }), (i.Sprite.prototype.revive = function (t) { return "undefined" == typeof t && (t = 1), (this.alive = !0), (this.exists = !0), (this.visible = !0), (this.health = t), this.events && this.events.onRevived.dispatch(this), this; }), (i.Sprite.prototype.kill = function () { return (this.alive = !1), (this.exists = !1), (this.visible = !1), this.events && this.events.onKilled.dispatch(this), this; }), (i.Sprite.prototype.destroy = function () { this.filters && (this.filters = null), this.group && this.group.remove(this), this.input && this.input.destroy(), this.events && this.events.destroy(), this.animations && this.animations.destroy(), this.body && this.body.destroy(), (this.alive = !1), (this.exists = !1), (this.visible = !1), (this.game = null); }), (i.Sprite.prototype.damage = function (t) { return this.alive && ((this.health -= t), this.health < 0 && this.kill()), this; }), (i.Sprite.prototype.reset = function (t, e, i) { return ( "undefined" == typeof i && (i = 1), (this.x = t), (this.y = e), this.world.setTo(t, e), (this.position.x = this.x), (this.position.y = this.y), (this.alive = !0), (this.exists = !0), (this.visible = !0), (this.renderable = !0), (this._outOfBoundsFired = !1), (this.health = i), this.body && this.body.reset(!1), this ); }), (i.Sprite.prototype.bringToTop = function () { return this.group ? this.group.bringToTop(this) : this.game.world.bringToTop(this), this; }), (i.Sprite.prototype.play = function (t, e, i, s) { return this.animations ? this.animations.play(t, e, i, s) : void 0; }), Object.defineProperty(i.Sprite.prototype, "deltaX", { get: function () { return this.world.x - this._cache.prevX; }, }), Object.defineProperty(i.Sprite.prototype, "deltaY", { get: function () { return this.world.y - this._cache.prevY; }, }), Object.defineProperty(i.Sprite.prototype, "angle", { get: function () { return i.Math.wrapAngle(i.Math.radToDeg(this.rotation)); }, set: function (t) { this.rotation = i.Math.degToRad(i.Math.wrapAngle(t)); }, }), Object.defineProperty(i.Sprite.prototype, "frame", { get: function () { return this.animations.frame; }, set: function (t) { this.animations.frame = t; }, }), Object.defineProperty(i.Sprite.prototype, "frameName", { get: function () { return this.animations.frameName; }, set: function (t) { this.animations.frameName = t; }, }), Object.defineProperty(i.Sprite.prototype, "inCamera", { get: function () { return this._cache.cameraVisible; }, }), Object.defineProperty(i.Sprite.prototype, "worldCenterX", { get: function () { return this.game.camera.x + this.center.x; }, }), Object.defineProperty(i.Sprite.prototype, "worldCenterY", { get: function () { return this.game.camera.y + this.center.y; }, }), Object.defineProperty(i.Sprite.prototype, "width", { get: function () { return this.scale.x * this.currentFrame.width; }, set: function (t) { (this.scale.x = t / this.currentFrame.width), (this._cache.scaleX = t / this.currentFrame.width), (this._width = t); }, }), Object.defineProperty(i.Sprite.prototype, "height", { get: function () { return this.scale.y * this.currentFrame.height; }, set: function (t) { (this.scale.y = t / this.currentFrame.height), (this._cache.scaleY = t / this.currentFrame.height), (this._height = t); }, }), Object.defineProperty(i.Sprite.prototype, "inputEnabled", { get: function () { return this.input.enabled; }, set: function (t) { t ? this.input.enabled === !1 && this.input.start() : this.input.enabled && this.input.stop(); }, }), (i.TileSprite = function (t, s, n, r, o, a) { (s = s || 0), (n = n || 0), (r = r || 256), (o = o || 256), (a = a || null), i.Sprite.call(this, t, s, n, a), (this.texture = e.TextureCache[a]), e.TilingSprite.call(this, this.texture, r, o), (this.type = i.TILESPRITE), (this.tileScale = new i.Point(1, 1)), (this.tilePosition = new i.Point(0, 0)), (this.body.width = r), (this.body.height = o); }), (i.TileSprite.prototype = i.Utils.extend(!0, e.TilingSprite.prototype, i.Sprite.prototype)), (i.TileSprite.prototype.constructor = i.TileSprite), Object.defineProperty(i.TileSprite.prototype, "angle", { get: function () { return i.Math.wrapAngle(i.Math.radToDeg(this.rotation)); }, set: function (t) { this.rotation = i.Math.degToRad(i.Math.wrapAngle(t)); }, }), Object.defineProperty(i.TileSprite.prototype, "frame", { get: function () { return this.animations.frame; }, set: function (t) { this.animations.frame = t; }, }), Object.defineProperty(i.TileSprite.prototype, "frameName", { get: function () { return this.animations.frameName; }, set: function (t) { this.animations.frameName = t; }, }), Object.defineProperty(i.TileSprite.prototype, "inCamera", { get: function () { return this._cache.cameraVisible; }, }), Object.defineProperty(i.TileSprite.prototype, "inputEnabled", { get: function () { return this.input.enabled; }, set: function (t) { t ? this.input.enabled === !1 && this.input.start() : this.input.enabled && this.input.stop(); }, }), (i.Text = function (t, s, n, r, o) { (s = s || 0), (n = n || 0), (r = r || ""), (o = o || ""), (this.game = t), (this.exists = !0), (this.alive = !0), (this.group = null), (this.name = ""), (this.type = i.TEXT), (this._text = r), (this._style = o), e.Text.call(this, r, o), (this.position.x = this.x = s), (this.position.y = this.y = n), (this.anchor = new i.Point()), (this.scale = new i.Point(1, 1)), (this.fixedToCamera = !1), (this.cameraOffset = new i.Point(s, n)), (this._cache = { dirty: !1, a00: 1, a01: 0, a02: s, a10: 0, a11: 1, a12: n, id: 1, x: -1, y: -1, scaleX: 1, scaleY: 1 }), (this._cache.x = this.x), (this._cache.y = this.y), (this.renderable = !0); }), (i.Text.prototype = Object.create(e.Text.prototype)), (i.Text.prototype.constructor = i.Text), (i.Text.prototype.update = function () { this.exists && (this.fixedToCamera && ((this.x = this.game.camera.view.x + this.cameraOffset.x), (this.y = this.game.camera.view.y + this.cameraOffset.y)), (this._cache.dirty = !1), (this._cache.x = this.x), (this._cache.y = this.y), (this.position.x != this._cache.x || this.position.y != this._cache.y) && ((this.position.x = this._cache.x), (this.position.y = this._cache.y), (this._cache.dirty = !0))); }), (i.Text.prototype.destroy = function () { this.group && this.group.remove(this), this.canvas.parentNode ? this.canvas.parentNode.removeChild(this.canvas) : ((this.canvas = null), (this.context = null)), (this.exists = !1), (this.group = null); }), Object.defineProperty(i.Text.prototype, "angle", { get: function () { return i.Math.radToDeg(this.rotation); }, set: function (t) { this.rotation = i.Math.degToRad(t); }, }), Object.defineProperty(i.Text.prototype, "x", { get: function () { return this.position.x; }, set: function (t) { this.position.x = t; }, }), Object.defineProperty(i.Text.prototype, "y", { get: function () { return this.position.y; }, set: function (t) { this.position.y = t; }, }), Object.defineProperty(i.Text.prototype, "content", { get: function () { return this._text; }, set: function (t) { t !== this._text && ((this._text = t), this.setText(t)); }, }), Object.defineProperty(i.Text.prototype, "font", { get: function () { return this._style; }, set: function (t) { t !== this._style && ((this._style = t), this.setStyle(t)); }, }), (i.BitmapText = function (t, s, n, r, o) { (s = s || 0), (n = n || 0), (r = r || ""), (o = o || ""), (this.game = t), (this.exists = !0), (this.alive = !0), (this.group = null), (this.name = ""), (this.type = i.BITMAPTEXT), e.BitmapText.call(this, r, o), (this.position.x = s), (this.position.y = n), (this.anchor = new i.Point()), (this.scale = new i.Point(1, 1)), (this._cache = { dirty: !1, a00: 1, a01: 0, a02: s, a10: 0, a11: 1, a12: n, id: 1, x: -1, y: -1, scaleX: 1, scaleY: 1 }), (this._cache.x = this.x), (this._cache.y = this.y); }), (i.BitmapText.prototype = Object.create(e.BitmapText.prototype)), (i.BitmapText.prototype.constructor = i.BitmapText), (i.BitmapText.prototype.update = function () { this.exists && ((this._cache.dirty = !1), (this._cache.x = this.x), (this._cache.y = this.y), (this.position.x != this._cache.x || this.position.y != this._cache.y) && ((this.position.x = this._cache.x), (this.position.y = this._cache.y), (this._cache.dirty = !0)), (this.pivot.x = this.anchor.x * this.width), (this.pivot.y = this.anchor.y * this.height)); }), (i.BitmapText.prototype.destroy = function () { this.group && this.group.remove(this), this.canvas && this.canvas.parentNode ? this.canvas.parentNode.removeChild(this.canvas) : ((this.canvas = null), (this.context = null)), (this.exists = !1), (this.group = null); }), Object.defineProperty(i.BitmapText.prototype, "angle", { get: function () { return i.Math.radToDeg(this.rotation); }, set: function (t) { this.rotation = i.Math.degToRad(t); }, }), Object.defineProperty(i.BitmapText.prototype, "x", { get: function () { return this.position.x; }, set: function (t) { this.position.x = t; }, }), Object.defineProperty(i.BitmapText.prototype, "y", { get: function () { return this.position.y; }, set: function (t) { this.position.y = t; }, }), (i.Button = function (t, e, s, n, r, o, a, h, l, c) { (e = e || 0), (s = s || 0), (n = n || null), (r = r || null), (o = o || this), i.Sprite.call(this, t, e, s, n, h), (this.type = i.BUTTON), (this._onOverFrameName = null), (this._onOutFrameName = null), (this._onDownFrameName = null), (this._onUpFrameName = null), (this._onOverFrameID = null), (this._onOutFrameID = null), (this._onDownFrameID = null), (this._onUpFrameID = null), (this.onOverSound = null), (this.onOutSound = null), (this.onDownSound = null), (this.onUpSound = null), (this.onOverSoundMarker = ""), (this.onOutSoundMarker = ""), (this.onDownSoundMarker = ""), (this.onUpSoundMarker = ""), (this.onInputOver = new i.Signal()), (this.onInputOut = new i.Signal()), (this.onInputDown = new i.Signal()), (this.onInputUp = new i.Signal()), (this.freezeFrames = !1), (this.forceOut = !1), this.setFrames(a, h, l, c), null !== r && this.onInputUp.add(r, o), this.input.start(0, !0), this.events.onInputOver.add(this.onInputOverHandler, this), this.events.onInputOut.add(this.onInputOutHandler, this), this.events.onInputDown.add(this.onInputDownHandler, this), this.events.onInputUp.add(this.onInputUpHandler, this); }), (i.Button.prototype = Object.create(i.Sprite.prototype)), (i.Button.prototype = i.Utils.extend(!0, i.Button.prototype, i.Sprite.prototype, e.Sprite.prototype)), (i.Button.prototype.constructor = i.Button), (i.Button.prototype.clearFrames = function () { (this._onOverFrameName = null), (this._onOverFrameID = null), (this._onOutFrameName = null), (this._onOutFrameID = null), (this._onDownFrameName = null), (this._onDownFrameID = null), (this._onUpFrameName = null), (this._onUpFrameID = null); }), (i.Button.prototype.setFrames = function (t, e, i, s) { this.clearFrames(), null !== t && ("string" == typeof t ? ((this._onOverFrameName = t), this.input.pointerOver() && (this.frameName = t)) : ((this._onOverFrameID = t), this.input.pointerOver() && (this.frame = t))), null !== e && ("string" == typeof e ? ((this._onOutFrameName = e), this.input.pointerOver() === !1 && (this.frameName = e)) : ((this._onOutFrameID = e), this.input.pointerOver() === !1 && (this.frame = e))), null !== i && ("string" == typeof i ? ((this._onDownFrameName = i), this.input.pointerDown() && (this.frameName = i)) : ((this._onDownFrameID = i), this.input.pointerDown() && (this.frame = i))), null !== s && ("string" == typeof s ? ((this._onUpFrameName = s), this.input.pointerUp() && (this.frameName = s)) : ((this._onUpFrameID = s), this.input.pointerUp() && (this.frame = s))); }), (i.Button.prototype.setSounds = function (t, e, i, s, n, r, o, a) { this.setOverSound(t, e), this.setOutSound(n, r), this.setDownSound(i, s), this.setUpSound(o, a); }), (i.Button.prototype.setOverSound = function (t, e) { (this.onOverSound = null), (this.onOverSoundMarker = ""), t instanceof i.Sound && (this.onOverSound = t), "string" == typeof e && (this.onOverSoundMarker = e); }), (i.Button.prototype.setOutSound = function (t, e) { (this.onOutSound = null), (this.onOutSoundMarker = ""), t instanceof i.Sound && (this.onOutSound = t), "string" == typeof e && (this.onOutSoundMarker = e); }), (i.Button.prototype.setDownSound = function (t, e) { (this.onDownSound = null), (this.onDownSoundMarker = ""), t instanceof i.Sound && (this.onDownSound = t), "string" == typeof e && (this.onDownSoundMarker = e); }), (i.Button.prototype.setUpSound = function (t, e) { (this.onUpSound = null), (this.onUpSoundMarker = ""), t instanceof i.Sound && (this.onUpSound = t), "string" == typeof e && (this.onUpSoundMarker = e); }), (i.Button.prototype.onInputOverHandler = function (t, e) { this.freezeFrames === !1 && this.setState(1), this.onOverSound && this.onOverSound.play(this.onOverSoundMarker), this.onInputOver && this.onInputOver.dispatch(this, e); }), (i.Button.prototype.onInputOutHandler = function (t, e) { this.freezeFrames === !1 && this.setState(2), this.onOutSound && this.onOutSound.play(this.onOutSoundMarker), this.onInputOut && this.onInputOut.dispatch(this, e); }), (i.Button.prototype.onInputDownHandler = function (t, e) { this.freezeFrames === !1 && this.setState(3), this.onDownSound && this.onDownSound.play(this.onDownSoundMarker), this.onInputDown && this.onInputDown.dispatch(this, e); }), (i.Button.prototype.onInputUpHandler = function (t, e, i) { this.onUpSound && this.onUpSound.play(this.onUpSoundMarker), this.onInputUp && this.onInputUp.dispatch(this, e, i), this.freezeFrames || this.setState(this.forceOut ? 2 : this._onUpFrameName || this._onUpFrameID ? 4 : i ? 1 : 2); }), (i.Button.prototype.setState = function (t) { 1 === t ? null != this._onOverFrameName ? (this.frameName = this._onOverFrameName) : null != this._onOverFrameID && (this.frame = this._onOverFrameID) : 2 === t ? null != this._onOutFrameName ? (this.frameName = this._onOutFrameName) : null != this._onOutFrameID && (this.frame = this._onOutFrameID) : 3 === t ? null != this._onDownFrameName ? (this.frameName = this._onDownFrameName) : null != this._onDownFrameID && (this.frame = this._onDownFrameID) : 4 === t && (null != this._onUpFrameName ? (this.frameName = this._onUpFrameName) : null != this._onUpFrameID && (this.frame = this._onUpFrameID)); }), (i.Graphics = function (t, s, n) { (this.game = t), e.Graphics.call(this), (this.type = i.GRAPHICS), (this.position.x = s), (this.position.y = n); }), (i.Graphics.prototype = Object.create(e.Graphics.prototype)), (i.Graphics.prototype.constructor = i.Graphics), (i.Graphics.prototype.destroy = function () { this.clear(), this.group && this.group.remove(this), (this.game = null); }), (i.Graphics.prototype.drawPolygon = function (t) { this.moveTo(t.points[0].x, t.points[0].y); for (var e = 1; e < t.points.length; e += 1) this.lineTo(t.points[e].x, t.points[e].y); this.lineTo(t.points[0].x, t.points[0].y); }), Object.defineProperty(i.Graphics.prototype, "angle", { get: function () { return i.Math.wrapAngle(i.Math.radToDeg(this.rotation)); }, set: function (t) { this.rotation = i.Math.degToRad(i.Math.wrapAngle(t)); }, }), Object.defineProperty(i.Graphics.prototype, "x", { get: function () { return this.position.x; }, set: function (t) { this.position.x = t; }, }), Object.defineProperty(i.Graphics.prototype, "y", { get: function () { return this.position.y; }, set: function (t) { this.position.y = t; }, }), (i.RenderTexture = function (t, s, n, r) { (this.game = t), (this.name = s), e.EventTarget.call(this), (this.width = n || 100), (this.height = r || 100), (this.indetityMatrix = e.mat3.create()), (this.frame = new e.Rectangle(0, 0, this.width, this.height)), (this.type = i.RENDERTEXTURE), (this._tempPoint = { x: 0, y: 0 }), e.gl ? this.initWebGL() : this.initCanvas(); }), (i.RenderTexture.prototype = Object.create(e.Texture.prototype)), (i.RenderTexture.prototype.constructor = e.RenderTexture), (i.RenderTexture.prototype.render = function (t, s, n, r) { "undefined" == typeof s && (s = !1), "undefined" == typeof n && (n = !1), "undefined" == typeof r && (r = !1), t instanceof i.Group && (t = t._container), e.gl ? this.renderWebGL(t, s, n, r) : this.renderCanvas(t, s, n, r); }), (i.RenderTexture.prototype.renderXY = function (t, e, i, s, n) { (this._tempPoint.x = e), (this._tempPoint.y = i), this.render(t, this._tempPoint, s, n); }), (i.RenderTexture.prototype.initWebGL = function () { var t = e.gl; (this.glFramebuffer = t.createFramebuffer()), t.bindFramebuffer(t.FRAMEBUFFER, this.glFramebuffer), (this.glFramebuffer.width = this.width), (this.glFramebuffer.height = this.height), (this.baseTexture = new e.BaseTexture()), (this.baseTexture.width = this.width), (this.baseTexture.height = this.height), (this.baseTexture._glTexture = t.createTexture()), t.bindTexture(t.TEXTURE_2D, this.baseTexture._glTexture), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, this.width, this.height, 0, t.RGBA, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), (this.baseTexture.isRender = !0), t.bindFramebuffer(t.FRAMEBUFFER, this.glFramebuffer), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.baseTexture._glTexture, 0), (this.projection = new e.Point(this.width / 2, -this.height / 2)); }), (i.RenderTexture.prototype.resize = function (t, i) { if (((this.width = t), (this.height = i), e.gl)) { (this.projection.x = this.width / 2), (this.projection.y = -this.height / 2); var s = e.gl; s.bindTexture(s.TEXTURE_2D, this.baseTexture._glTexture), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, this.width, this.height, 0, s.RGBA, s.UNSIGNED_BYTE, null); } else (this.frame.width = this.width), (this.frame.height = this.height), this.renderer.resize(this.width, this.height); }), (i.RenderTexture.prototype.initCanvas = function () { (this.renderer = new e.CanvasRenderer(this.width, this.height, null, 0)), (this.baseTexture = new e.BaseTexture(this.renderer.view)), (this.frame = new e.Rectangle(0, 0, this.width, this.height)); }), (i.RenderTexture.prototype.renderWebGL = function (t, i, s) { var n = e.gl; n.colorMask(!0, !0, !0, !0), n.viewport(0, 0, this.width, this.height), n.bindFramebuffer(n.FRAMEBUFFER, this.glFramebuffer), s && (n.clearColor(0, 0, 0, 0), n.clear(n.COLOR_BUFFER_BIT)); var r = t.children, o = t.worldTransform; (t.worldTransform = e.mat3.create()), (t.worldTransform[4] = -1), (t.worldTransform[5] = -2 * this.projection.y), i && ((t.worldTransform[2] = i.x), (t.worldTransform[5] -= i.y)), e.visibleCount++, (t.vcount = e.visibleCount); for (var a = 0, h = r.length; h > a; a++) r[a].updateTransform(); var l = t.__renderGroup; l ? t == l.root ? l.render(this.projection, this.glFramebuffer) : l.renderSpecific(t, this.projection, this.glFramebuffer) : (this.renderGroup || (this.renderGroup = new e.WebGLRenderGroup(n)), this.renderGroup.setRenderable(t), this.renderGroup.render(this.projection, this.glFramebuffer)), (t.worldTransform = o); }), (i.RenderTexture.prototype.renderCanvas = function (t, i, s, n) { var r = t.children; (t.worldTransform = e.mat3.create()), i && ((t.worldTransform[2] = i.x), (t.worldTransform[5] = i.y)); for (var o = 0, a = r.length; a > o; o++) r[o].updateTransform(); s && this.renderer.context.clearRect(0, 0, this.width, this.height), this.renderer.renderDisplayObject(t, n), this.renderer.context.setTransform(1, 0, 0, 1, 0, 0); }), (i.Canvas = { create: function (t, e, i) { (t = t || 256), (e = e || 256); var s = document.createElement("canvas"); return "string" == typeof i && (s.id = i), (s.width = t), (s.height = e), (s.style.display = "block"), s; }, getOffset: function (t, e) { e = e || new i.Point(); var s = t.getBoundingClientRect(), n = t.clientTop || document.body.clientTop || 0, r = t.clientLeft || document.body.clientLeft || 0, o = 0, a = 0; return ( "CSS1Compat" === document.compatMode ? ((o = window.pageYOffset || document.documentElement.scrollTop || t.scrollTop || 0), (a = window.pageXOffset || document.documentElement.scrollLeft || t.scrollLeft || 0)) : ((o = window.pageYOffset || document.body.scrollTop || t.scrollTop || 0), (a = window.pageXOffset || document.body.scrollLeft || t.scrollLeft || 0)), (e.x = s.left + a - r), (e.y = s.top + o - n), e ); }, getAspectRatio: function (t) { return t.width / t.height; }, setBackgroundColor: function (t, e) { return (e = e || "rgb(0,0,0)"), (t.style.backgroundColor = e), t; }, setTouchAction: function (t, e) { return (e = e || "none"), (t.style.msTouchAction = e), (t.style["ms-touch-action"] = e), (t.style["touch-action"] = e), t; }, setUserSelect: function (t, e) { return ( (e = e || "none"), (t.style["-webkit-touch-callout"] = e), (t.style["-webkit-user-select"] = e), (t.style["-khtml-user-select"] = e), (t.style["-moz-user-select"] = e), (t.style["-ms-user-select"] = e), (t.style["user-select"] = e), (t.style["-webkit-tap-highlight-color"] = "rgba(0, 0, 0, 0)"), t ); }, addToDOM: function (t, e, i) { var s; return ( "undefined" == typeof i && (i = !0), e && ("string" == typeof e ? (s = document.getElementById(e)) : "object" == typeof e && 1 === e.nodeType && (s = e)), s || (s = document.body), i && s.style && (s.style.overflow = "hidden"), s.appendChild(t), t ); }, setTransform: function (t, e, i, s, n, r, o) { return t.setTransform(s, r, o, n, e, i), t; }, setSmoothingEnabled: function (t, e) { return (t.imageSmoothingEnabled = e), (t.mozImageSmoothingEnabled = e), (t.oImageSmoothingEnabled = e), (t.webkitImageSmoothingEnabled = e), (t.msImageSmoothingEnabled = e), t; }, setImageRenderingCrisp: function (t) { return ( (t.style["image-rendering"] = "optimizeSpeed"), (t.style["image-rendering"] = "crisp-edges"), (t.style["image-rendering"] = "-moz-crisp-edges"), (t.style["image-rendering"] = "-webkit-optimize-contrast"), (t.style["image-rendering"] = "optimize-contrast"), (t.style.msInterpolationMode = "nearest-neighbor"), t ); }, setImageRenderingBicubic: function (t) { return (t.style["image-rendering"] = "auto"), (t.style.msInterpolationMode = "bicubic"), t; }, }), (i.StageScaleMode = function (t, e, s) { (this.game = t), (this.width = e), (this.height = s), (this.minWidth = null), (this.maxWidth = null), (this.minHeight = null), (this.maxHeight = null), (this._startHeight = 0), (this.forceLandscape = !1), (this.forcePortrait = !1), (this.incorrectOrientation = !1), (this.pageAlignHorizontally = !1), (this.pageAlignVertically = !1), (this._width = 0), (this._height = 0), (this.maxIterations = 5), (this.orientationSprite = null), (this.enterLandscape = new i.Signal()), (this.enterPortrait = new i.Signal()), (this.enterIncorrectOrientation = new i.Signal()), (this.leaveIncorrectOrientation = new i.Signal()), (this.hasResized = new i.Signal()), (this.orientation = window.orientation ? window.orientation : window.outerWidth > window.outerHeight ? 90 : 0), (this.scaleFactor = new i.Point(1, 1)), (this.scaleFactorInversed = new i.Point(1, 1)), (this.margin = new i.Point(0, 0)), (this.aspectRatio = 0), (this.event = null); var n = this; window.addEventListener( "orientationchange", function (t) { return n.checkOrientation(t); }, !1 ), window.addEventListener( "resize", function (t) { return n.checkResize(t); }, !1 ), document.addEventListener( "webkitfullscreenchange", function (t) { return n.fullScreenChange(t); }, !1 ), document.addEventListener( "mozfullscreenchange", function (t) { return n.fullScreenChange(t); }, !1 ), document.addEventListener( "fullscreenchange", function (t) { return n.fullScreenChange(t); }, !1 ); }), (i.StageScaleMode.EXACT_FIT = 0), (i.StageScaleMode.NO_SCALE = 1), (i.StageScaleMode.SHOW_ALL = 2), (i.StageScaleMode.prototype = { startFullScreen: function (t) { if (!this.isFullScreen) { "undefined" != typeof t && i.Canvas.setSmoothingEnabled(this.game.context, t); var e = this.game.canvas; (this._width = this.width), (this._height = this.height), e.requestFullScreen ? e.requestFullScreen() : e.mozRequestFullScreen ? e.parentNode.mozRequestFullScreen() : e.webkitRequestFullScreen && e.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); } }, stopFullScreen: function () { document.cancelFullScreen ? document.cancelFullScreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.webkitCancelFullScreen && document.webkitCancelFullScreen(); }, fullScreenChange: function (t) { (this.event = t), this.isFullScreen ? this.game.stage.fullScreenScaleMode === i.StageScaleMode.EXACT_FIT ? ((this.game.stage.canvas.style.width = "100%"), (this.game.stage.canvas.style.height = "100%"), this.setMaximum(), this.game.input.scale.setTo(this.game.width / this.width, this.game.height / this.height), (this.aspectRatio = this.width / this.height), (this.scaleFactor.x = this.game.width / this.width), (this.scaleFactor.y = this.game.height / this.height)) : this.game.stage.fullScreenScaleMode === i.StageScaleMode.SHOW_ALL && (this.game.stage.scale.setShowAll(), this.game.stage.scale.refresh()) : ((this.game.stage.canvas.style.width = this.game.width + "px"), (this.game.stage.canvas.style.height = this.game.height + "px"), (this.width = this._width), (this.height = this._height), this.game.input.scale.setTo(this.game.width / this.width, this.game.height / this.height), (this.aspectRatio = this.width / this.height), (this.scaleFactor.x = this.game.width / this.width), (this.scaleFactor.y = this.game.height / this.height)); }, forceOrientation: function (t, i, s) { "undefined" == typeof i && (i = !1), (this.forceLandscape = t), (this.forcePortrait = i), "undefined" != typeof s && ((null == s || this.game.cache.checkImageKey(s) === !1) && (s = "__default"), (this.orientationSprite = new e.Sprite(e.TextureCache[s])), (this.orientationSprite.anchor.x = 0.5), (this.orientationSprite.anchor.y = 0.5), (this.orientationSprite.position.x = this.game.width / 2), (this.orientationSprite.position.y = this.game.height / 2), this.checkOrientationState(), this.incorrectOrientation ? ((this.orientationSprite.visible = !0), (this.game.world.visible = !1)) : ((this.orientationSprite.visible = !1), (this.game.world.visible = !0)), this.game.stage._stage.addChild(this.orientationSprite)); }, checkOrientationState: function () { this.incorrectOrientation ? ((this.forceLandscape && window.innerWidth > window.innerHeight) || (this.forcePortrait && window.innerHeight > window.innerWidth)) && ((this.game.paused = !1), (this.incorrectOrientation = !1), this.leaveIncorrectOrientation.dispatch(), this.orientationSprite && ((this.orientationSprite.visible = !1), (this.game.world.visible = !0)), this.refresh()) : ((this.forceLandscape && window.innerWidth < window.innerHeight) || (this.forcePortrait && window.innerHeight < window.innerWidth)) && ((this.game.paused = !0), (this.incorrectOrientation = !0), this.enterIncorrectOrientation.dispatch(), this.orientationSprite && this.orientationSprite.visible === !1 && ((this.orientationSprite.visible = !0), (this.game.world.visible = !1)), this.refresh()); }, checkOrientation: function (t) { (this.event = t), (this.orientation = window.orientation), this.isLandscape ? this.enterLandscape.dispatch(this.orientation, !0, !1) : this.enterPortrait.dispatch(this.orientation, !1, !0), this.game.stage.scaleMode !== i.StageScaleMode.NO_SCALE && this.refresh(); }, checkResize: function (t) { (this.event = t), (this.orientation = window.outerWidth > window.outerHeight ? 90 : 0), this.isLandscape ? this.enterLandscape.dispatch(this.orientation, !0, !1) : this.enterPortrait.dispatch(this.orientation, !1, !0), this.game.stage.scaleMode !== i.StageScaleMode.NO_SCALE && this.refresh(), this.checkOrientationState(); }, refresh: function () { if ( (this.game.device.iPad === !1 && this.game.device.webApp === !1 && this.game.device.desktop === !1 && (this.game.device.android && this.game.device.chrome === !1 ? window.scrollTo(0, 1) : window.scrollTo(0, 0)), null == this._check && this.maxIterations > 0) ) { this._iterations = this.maxIterations; var t = this; (this._check = window.setInterval(function () { return t.setScreenSize(); }, 10)), this.setScreenSize(); } }, setScreenSize: function (t) { "undefined" == typeof t && (t = !1), this.game.device.iPad === !1 && this.game.device.webApp === !1 && this.game.device.desktop === !1 && (this.game.device.android && this.game.device.chrome === !1 ? window.scrollTo(0, 1) : window.scrollTo(0, 0)), this._iterations--, (t || window.innerHeight > this._startHeight || this._iterations < 0) && ((document.documentElement.style.minHeight = window.innerHeight + "px"), this.incorrectOrientation === !0 ? this.setMaximum() : this.isFullScreen ? this.game.stage.fullScreenScaleMode == i.StageScaleMode.EXACT_FIT ? this.setExactFit() : this.game.stage.fullScreenScaleMode == i.StageScaleMode.SHOW_ALL && this.setShowAll() : this.game.stage.scaleMode == i.StageScaleMode.EXACT_FIT ? this.setExactFit() : this.game.stage.scaleMode == i.StageScaleMode.SHOW_ALL && this.setShowAll(), this.setSize(), clearInterval(this._check), (this._check = null)); }, setSize: function () { this.incorrectOrientation === !1 && (this.maxWidth && this.width > this.maxWidth && (this.width = this.maxWidth), this.maxHeight && this.height > this.maxHeight && (this.height = this.maxHeight), this.minWidth && this.width < this.minWidth && (this.width = this.minWidth), this.minHeight && this.height < this.minHeight && (this.height = this.minHeight)), (this.game.canvas.style.width = this.width + "px"), (this.game.canvas.style.height = this.height + "px"), this.game.input.scale.setTo(this.game.width / this.width, this.game.height / this.height), this.pageAlignHorizontally && (this.width < window.innerWidth && this.incorrectOrientation === !1 ? ((this.margin.x = Math.round((window.innerWidth - this.width) / 2)), (this.game.canvas.style.marginLeft = this.margin.x + "px")) : ((this.margin.x = 0), (this.game.canvas.style.marginLeft = "0px"))), this.pageAlignVertically && (this.height < window.innerHeight && this.incorrectOrientation === !1 ? ((this.margin.y = Math.round((window.innerHeight - this.height) / 2)), (this.game.canvas.style.marginTop = this.margin.y + "px")) : ((this.margin.y = 0), (this.game.canvas.style.marginTop = "0px"))), i.Canvas.getOffset(this.game.canvas, this.game.stage.offset), (this.aspectRatio = this.width / this.height), (this.scaleFactor.x = this.game.width / this.width), (this.scaleFactor.y = this.game.height / this.height), (this.scaleFactorInversed.x = this.width / this.game.width), (this.scaleFactorInversed.y = this.height / this.game.height), this.hasResized.dispatch(this.width, this.height), this.checkOrientationState(); }, setMaximum: function () { (this.width = window.innerWidth), (this.height = window.innerHeight); }, setShowAll: function () { var t = Math.min(window.innerHeight / this.game.height, window.innerWidth / this.game.width); (this.width = Math.round(this.game.width * t)), (this.height = Math.round(this.game.height * t)); }, setExactFit: function () { var t = window.innerWidth, e = window.innerHeight; (this.width = this.maxWidth && t > this.maxWidth ? this.maxWidth : t), (this.height = this.maxHeight && e > this.maxHeight ? this.maxHeight : e); }, }), (i.StageScaleMode.prototype.constructor = i.StageScaleMode), Object.defineProperty(i.StageScaleMode.prototype, "isFullScreen", { get: function () { return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement; }, }), Object.defineProperty(i.StageScaleMode.prototype, "isPortrait", { get: function () { return 0 === this.orientation || 180 == this.orientation; }, }), Object.defineProperty(i.StageScaleMode.prototype, "isLandscape", { get: function () { return 90 === this.orientation || -90 === this.orientation; }, }), (i.Device = function () { (this.patchAndroidClearRectBug = !1), (this.desktop = !1), (this.iOS = !1), (this.cocoonJS = !1), (this.ejecta = !1), (this.android = !1), (this.chromeOS = !1), (this.linux = !1), (this.macOS = !1), (this.windows = !1), (this.canvas = !1), (this.file = !1), (this.fileSystem = !1), (this.localStorage = !1), (this.webGL = !1), (this.worker = !1), (this.touch = !1), (this.mspointer = !1), (this.css3D = !1), (this.pointerLock = !1), (this.typedArray = !1), (this.vibration = !1), (this.quirksMode = !1), (this.arora = !1), (this.chrome = !1), (this.epiphany = !1), (this.firefox = !1), (this.ie = !1), (this.ieVersion = 0), (this.trident = !1), (this.tridentVersion = 0), (this.mobileSafari = !1), (this.midori = !1), (this.opera = !1), (this.safari = !1), (this.webApp = !1), (this.silk = !1), (this.audioData = !1), (this.webAudio = !1), (this.ogg = !1), (this.opus = !1), (this.mp3 = !1), (this.wav = !1), (this.m4a = !1), (this.webm = !1), (this.iPhone = !1), (this.iPhone4 = !1), (this.iPad = !1), (this.pixelRatio = 0), (this.littleEndian = !1), this._checkAudio(), this._checkBrowser(), this._checkCSS3D(), this._checkDevice(), this._checkFeatures(), this._checkOS(); }), (i.Device.prototype = { _checkOS: function () { var t = navigator.userAgent; /Android/.test(t) ? (this.android = !0) : /CrOS/.test(t) ? (this.chromeOS = !0) : /iP[ao]d|iPhone/i.test(t) ? (this.iOS = !0) : /Linux/.test(t) ? (this.linux = !0) : /Mac OS/.test(t) ? (this.macOS = !0) : /Windows/.test(t) && (this.windows = !0), (this.windows || this.macOS || (this.linux && this.silk === !1)) && (this.desktop = !0); }, _checkFeatures: function () { this.canvas = !!window.CanvasRenderingContext2D; try { this.localStorage = !!localStorage.getItem; } catch (t) { this.localStorage = !1; } (this.file = !!(window.File && window.FileReader && window.FileList && window.Blob)), (this.fileSystem = !!window.requestFileSystem), (this.webGL = (function () { try { var t = document.createElement("canvas"); return !!window.WebGLRenderingContext && (t.getContext("webgl") || t.getContext("experimental-webgl")); } catch (e) { return !1; } })()), (this.webGL = null === this.webGL || this.webGL === !1 ? !1 : !0), (this.worker = !!window.Worker), ("ontouchstart" in document.documentElement || (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 1)) && (this.touch = !0), (window.navigator.msPointerEnabled || window.navigator.pointerEnabled) && (this.mspointer = !0), (this.pointerLock = "pointerLockElement" in document || "mozPointerLockElement" in document || "webkitPointerLockElement" in document), (this.quirksMode = "CSS1Compat" === document.compatMode ? !1 : !0); }, _checkBrowser: function () { var t = navigator.userAgent; /Arora/.test(t) ? (this.arora = !0) : /Chrome/.test(t) ? (this.chrome = !0) : /Epiphany/.test(t) ? (this.epiphany = !0) : /Firefox/.test(t) ? (this.firefox = !0) : /Mobile Safari/.test(t) ? (this.mobileSafari = !0) : /MSIE (\d+\.\d+);/.test(t) ? ((this.ie = !0), (this.ieVersion = parseInt(RegExp.$1, 10))) : /Midori/.test(t) ? (this.midori = !0) : /Opera/.test(t) ? (this.opera = !0) : /Safari/.test(t) ? (this.safari = !0) : /Silk/.test(t) ? (this.silk = !0) : /Trident\/(\d+\.\d+);/.test(t) && ((this.ie = !0), (this.trident = !0), (this.tridentVersion = parseInt(RegExp.$1, 10))), navigator.standalone && (this.webApp = !0), navigator.isCocoonJS && (this.cocoonJS = !0), "undefined" != typeof window.ejecta && (this.ejecta = !0); }, _checkAudio: function () { (this.audioData = !!window.Audio), (this.webAudio = !(!window.webkitAudioContext && !window.AudioContext)); var t = document.createElement("audio"), e = !1; try { (e = !!t.canPlayType) && (t.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, "") && (this.ogg = !0), t.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, "") && (this.opus = !0), t.canPlayType("audio/mpeg;").replace(/^no$/, "") && (this.mp3 = !0), t.canPlayType('audio/wav; codecs="1"').replace(/^no$/, "") && (this.wav = !0), (t.canPlayType("audio/x-m4a;") || t.canPlayType("audio/aac;").replace(/^no$/, "")) && (this.m4a = !0), t.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, "") && (this.webm = !0)); } catch (i) {} }, _checkDevice: function () { (this.pixelRatio = window.devicePixelRatio || 1), (this.iPhone = -1 != navigator.userAgent.toLowerCase().indexOf("iphone")), (this.iPhone4 = 2 == this.pixelRatio && this.iPhone), (this.iPad = -1 != navigator.userAgent.toLowerCase().indexOf("ipad")), "undefined" != typeof Int8Array ? ((this.littleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0), (this.typedArray = !0)) : ((this.littleEndian = !1), (this.typedArray = !1)), (navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate), navigator.vibrate && (this.vibration = !0); }, _checkCSS3D: function () { var t, e = document.createElement("p"), i = { webkitTransform: "-webkit-transform", OTransform: "-o-transform", msTransform: "-ms-transform", MozTransform: "-moz-transform", transform: "transform" }; document.body.insertBefore(e, null); for (var s in i) void 0 !== e.style[s] && ((e.style[s] = "translate3d(1px,1px,1px)"), (t = window.getComputedStyle(e).getPropertyValue(i[s]))); document.body.removeChild(e), (this.css3D = void 0 !== t && t.length > 0 && "none" !== t); }, canPlayAudio: function (t) { return "mp3" == t && this.mp3 ? !0 : "ogg" == t && (this.ogg || this.opus) ? !0 : "m4a" == t && this.m4a ? !0 : "wav" == t && this.wav ? !0 : "webm" == t && this.webm ? !0 : !1; }, isConsoleOpen: function () { return window.console && window.console.firebug ? !0 : window.console ? (console.profile(), console.profileEnd(), console.clear && console.clear(), console.profiles.length > 0) : !1; }, }), (i.Device.prototype.constructor = i.Device), (i.RequestAnimationFrame = function (t) { (this.game = t), (this.isRunning = !1); for (var e = ["ms", "moz", "webkit", "o"], i = 0; i < e.length && !window.requestAnimationFrame; i++) (window.requestAnimationFrame = window[e[i] + "RequestAnimationFrame"]), (window.cancelAnimationFrame = window[e[i] + "CancelAnimationFrame"]); (this._isSetTimeOut = !1), (this._onLoop = null), (this._timeOutID = null); }), (i.RequestAnimationFrame.prototype = { start: function () { this.isRunning = !0; var t = this; window.requestAnimationFrame ? ((this._isSetTimeOut = !1), (this._onLoop = function (e) { return t.updateRAF(e); }), (this._timeOutID = window.requestAnimationFrame(this._onLoop))) : ((this._isSetTimeOut = !0), (this._onLoop = function () { return t.updateSetTimeout(); }), (this._timeOutID = window.setTimeout(this._onLoop, 0))); }, updateRAF: function (t) { this.game.update(t), (this._timeOutID = window.requestAnimationFrame(this._onLoop)); }, updateSetTimeout: function () { this.game.update(Date.now()), (this._timeOutID = window.setTimeout(this._onLoop, this.game.time.timeToCall)); }, stop: function () { this._isSetTimeOut ? clearTimeout(this._timeOutID) : window.cancelAnimationFrame(this._timeOutID), (this.isRunning = !1); }, isSetTimeOut: function () { return this._isSetTimeOut; }, isRAF: function () { return this._isSetTimeOut === !1; }, }), (i.RequestAnimationFrame.prototype.constructor = i.RequestAnimationFrame), (i.RandomDataGenerator = function (t) { "undefined" == typeof t && (t = []), (this.c = 1), (this.s0 = 0), (this.s1 = 0), (this.s2 = 0), this.sow(t); }), (i.RandomDataGenerator.prototype = { rnd: function () { var t = 2091639 * this.s0 + 2.3283064365386963e-10 * this.c; return (this.c = 0 | t), (this.s0 = this.s1), (this.s1 = this.s2), (this.s2 = t - this.c), this.s2; }, sow: function (t) { "undefined" == typeof t && (t = []), (this.s0 = this.hash(" ")), (this.s1 = this.hash(this.s0)), (this.s2 = this.hash(this.s1)), (this.c = 1); for (var e, i = 0; (e = t[i++]); ) (this.s0 -= this.hash(e)), (this.s0 += ~~(this.s0 < 0)), (this.s1 -= this.hash(e)), (this.s1 += ~~(this.s1 < 0)), (this.s2 -= this.hash(e)), (this.s2 += ~~(this.s2 < 0)); }, hash: function (t) { var e, i, s; for (s = 4022871197, t = t.toString(), i = 0; i < t.length; i++) (s += t.charCodeAt(i)), (e = 0.02519603282416938 * s), (s = e >>> 0), (e -= s), (e *= s), (s = e >>> 0), (e -= s), (s += 4294967296 * e); return 2.3283064365386963e-10 * (s >>> 0); }, integer: function () { return 4294967296 * this.rnd.apply(this); }, frac: function () { return this.rnd.apply(this) + 1.1102230246251565e-16 * ((2097152 * this.rnd.apply(this)) | 0); }, real: function () { return this.integer() + this.frac(); }, integerInRange: function (t, e) { return Math.floor(this.realInRange(t, e)); }, realInRange: function (t, e) { return this.frac() * (e - t) + t; }, normal: function () { return 1 - 2 * this.frac(); }, uuid: function () { var t = "", e = ""; for (e = t = ""; t++ < 36; e += ~t % 5 | ((3 * t) & 4) ? (15 ^ t ? 8 ^ (this.frac() * (20 ^ t ? 16 : 4)) : 4).toString(16) : "-"); return e; }, pick: function (t) { return t[this.integerInRange(0, t.length)]; }, weightedPick: function (t) { return t[~~(Math.pow(this.frac(), 2) * t.length)]; }, timestamp: function (t, e) { return this.realInRange(t || 9466848e5, e || 1577862e6); }, angle: function () { return this.integerInRange(-180, 180); }, }), (i.RandomDataGenerator.prototype.constructor = i.RandomDataGenerator), (i.Math = { PI2: 2 * Math.PI, fuzzyEqual: function (t, e, i) { return "undefined" == typeof i && (i = 1e-4), Math.abs(t - e) < i; }, fuzzyLessThan: function (t, e, i) { return "undefined" == typeof i && (i = 1e-4), e + i > t; }, fuzzyGreaterThan: function (t, e, i) { return "undefined" == typeof i && (i = 1e-4), t > e - i; }, fuzzyCeil: function (t, e) { return "undefined" == typeof e && (e = 1e-4), Math.ceil(t - e); }, fuzzyFloor: function (t, e) { return "undefined" == typeof e && (e = 1e-4), Math.floor(t + e); }, average: function () { for (var t = [], e = 0; e < arguments.length - 0; e++) t[e] = arguments[e + 0]; for (var i = 0, s = 0; s < t.length; s++) i += t[s]; return i / t.length; }, truncate: function (t) { return t > 0 ? Math.floor(t) : Math.ceil(t); }, shear: function (t) { return t % 1; }, snapTo: function (t, e, i) { return "undefined" == typeof i && (i = 0), 0 === e ? t : ((t -= i), (t = e * Math.round(t / e)), i + t); }, snapToFloor: function (t, e, i) { return "undefined" == typeof i && (i = 0), 0 === e ? t : ((t -= i), (t = e * Math.floor(t / e)), i + t); }, snapToCeil: function (t, e, i) { return "undefined" == typeof i && (i = 0), 0 === e ? t : ((t -= i), (t = e * Math.ceil(t / e)), i + t); }, snapToInArray: function (t, e, i) { if (("undefined" == typeof i && (i = !0), i && e.sort(), t < e[0])) return e[0]; for (var s = 1; e[s] < t; ) s++; var n = e[s - 1], r = s < e.length ? e[s] : Number.POSITIVE_INFINITY; return t - n >= r - t ? r : n; }, roundTo: function (t, e, i) { "undefined" == typeof e && (e = 0), "undefined" == typeof i && (i = 10); var s = Math.pow(i, -e); return Math.round(t * s) / s; }, floorTo: function (t, e, i) { "undefined" == typeof e && (e = 0), "undefined" == typeof i && (i = 10); var s = Math.pow(i, -e); return Math.floor(t * s) / s; }, ceilTo: function (t, e, i) { "undefined" == typeof e && (e = 0), "undefined" == typeof i && (i = 10); var s = Math.pow(i, -e); return Math.ceil(t * s) / s; }, interpolateFloat: function (t, e, i) { return (e - t) * i + t; }, angleBetween: function (t, e, i, s) { return Math.atan2(s - e, i - t); }, reverseAngle: function (t) { return this.normalizeAngle(t + Math.PI, !0); }, normalizeAngle: function (t) { return (t %= 2 * Math.PI), t >= 0 ? t : t + 2 * Math.PI; }, normalizeLatitude: function (t) { return Math.max(-90, Math.min(90, t)); }, normalizeLongitude: function (t) { return t % 360 == 180 ? 180 : ((t %= 360), -180 > t ? t + 360 : t > 180 ? t - 360 : t); }, nearestAngleBetween: function (t, e, i) { "undefined" == typeof i && (i = !0); var s = i ? Math.PI : 180; return (t = this.normalizeAngle(t, i)), (e = this.normalizeAngle(e, i)), -s / 2 > t && e > s / 2 && (t += 2 * s), -s / 2 > e && t > s / 2 && (e += 2 * s), e - t; }, interpolateAngles: function (t, e, i, s, n) { return ( "undefined" == typeof s && (s = !0), "undefined" == typeof n && (n = null), (t = this.normalizeAngle(t, s)), (e = this.normalizeAngleToAnother(e, t, s)), "function" == typeof n ? n(i, t, e - t, 1) : this.interpolateFloat(t, e, i) ); }, chanceRoll: function (t) { return "undefined" == typeof t && (t = 50), 0 >= t ? !1 : t >= 100 ? !0 : 100 * Math.random() >= t ? !1 : !0; }, numberArray: function (t, e) { for (var i = [], s = t; e >= s; s++) i.push(s); return i; }, maxAdd: function (t, e, i) { return (t += e), t > i && (t = i), t; }, minSub: function (t, e, i) { return (t -= e), i > t && (t = i), t; }, wrap: function (t, e, i) { var s = i - e; if (0 >= s) return 0; var n = (t - e) % s; return 0 > n && (n += s), n + e; }, wrapValue: function (t, e, i) { var s; return (t = Math.abs(t)), (e = Math.abs(e)), (i = Math.abs(i)), (s = (t + e) % i); }, randomSign: function () { return Math.random() > 0.5 ? 1 : -1; }, isOdd: function (t) { return 1 & t; }, isEven: function (t) { return 1 & t ? !1 : !0; }, max: function () { for (var t = 1, e = 0, i = arguments.length; i > t; t++) arguments[e] < arguments[t] && (e = t); return arguments[e]; }, min: function () { if (1 === arguments.length && "object" == typeof arguments[0]) var t = arguments[0]; else var t = arguments; for (var e = 1, i = 0, s = t.length; s > e; e++) t[e] < t[i] && (i = e); return t[i]; }, max: function () { if (1 === arguments.length && "object" == typeof arguments[0]) var t = arguments[0]; else var t = arguments; for (var e = 1, i = 0, s = t.length; s > e; e++) t[e] > t[i] && (i = e); return t[i]; }, minProperty: function (t) { if (2 === arguments.length && "object" == typeof arguments[1]) var e = arguments[1]; else var e = arguments.slice(1); for (var i = 1, s = 0, n = e.length; n > i; i++) e[i][t] < e[s][t] && (s = i); return e[s][t]; }, maxProperty: function (t) { if (2 === arguments.length && "object" == typeof arguments[1]) var e = arguments[1]; else var e = arguments.slice(1); for (var i = 1, s = 0, n = e.length; n > i; i++) e[i][t] > e[s][t] && (s = i); return e[s][t]; }, wrapAngle: function (t) { return this.wrap(t, -180, 180); }, angleLimit: function (t, e, i) { var s = t; return t > i ? (s = i) : e > t && (s = e), s; }, linearInterpolation: function (t, e) { var i = t.length - 1, s = i * e, n = Math.floor(s); return 0 > e ? this.linear(t[0], t[1], s) : e > 1 ? this.linear(t[i], t[i - 1], i - s) : this.linear(t[n], t[n + 1 > i ? i : n + 1], s - n); }, bezierInterpolation: function (t, e) { for (var i = 0, s = t.length - 1, n = 0; s >= n; n++) i += Math.pow(1 - e, s - n) * Math.pow(e, n) * t[n] * this.bernstein(s, n); return i; }, catmullRomInterpolation: function (t, e) { var i = t.length - 1, s = i * e, n = Math.floor(s); return t[0] === t[i] ? (0 > e && (n = Math.floor((s = i * (1 + e)))), this.catmullRom(t[(n - 1 + i) % i], t[n], t[(n + 1) % i], t[(n + 2) % i], s - n)) : 0 > e ? t[0] - (this.catmullRom(t[0], t[0], t[1], t[1], -s) - t[0]) : e > 1 ? t[i] - (this.catmullRom(t[i], t[i], t[i - 1], t[i - 1], s - i) - t[i]) : this.catmullRom(t[n ? n - 1 : 0], t[n], t[n + 1 > i ? i : n + 1], t[n + 2 > i ? i : n + 2], s - n); }, linear: function (t, e, i) { return (e - t) * i + t; }, bernstein: function (t, e) { return this.factorial(t) / this.factorial(e) / this.factorial(t - e); }, catmullRom: function (t, e, i, s, n) { var r = 0.5 * (i - t), o = 0.5 * (s - e), a = n * n, h = n * a; return (2 * e - 2 * i + r + o) * h + (-3 * e + 3 * i - 2 * r - o) * a + r * n + e; }, difference: function (t, e) { return Math.abs(t - e); }, getRandom: function (t, e, i) { if (("undefined" == typeof e && (e = 0), "undefined" == typeof i && (i = 0), null != t)) { var s = i; if (((0 === s || s > t.length - e) && (s = t.length - e), s > 0)) return t[e + Math.floor(Math.random() * s)]; } return null; }, floor: function (t) { var e = 0 | t; return t > 0 ? e : e != t ? e - 1 : e; }, ceil: function (t) { var e = 0 | t; return t > 0 ? (e != t ? e + 1 : e) : e; }, sinCosGenerator: function (t, e, i, s) { "undefined" == typeof e && (e = 1), "undefined" == typeof i && (i = 1), "undefined" == typeof s && (s = 1); for (var n = e, r = i, o = (s * Math.PI) / t, a = [], h = [], l = 0; t > l; l++) (r -= n * o), (n += r * o), (a[l] = r), (h[l] = n); return { sin: h, cos: a, length: t }; }, shift: function (t) { var e = t.shift(); return t.push(e), e; }, shuffleArray: function (t) { for (var e = t.length - 1; e > 0; e--) { var i = Math.floor(Math.random() * (e + 1)), s = t[e]; (t[e] = t[i]), (t[i] = s); } return t; }, distance: function (t, e, i, s) { var n = t - i, r = e - s; return Math.sqrt(n * n + r * r); }, distancePow: function (t, e, i, s, n) { return "undefined" == typeof n && (n = 2), Math.sqrt(Math.pow(i - t, n) + Math.pow(s - e, n)); }, distanceRounded: function (t, e, s, n) { return Math.round(i.Math.distance(t, e, s, n)); }, clamp: function (t, e, i) { return e > t ? e : t > i ? i : t; }, clampBottom: function (t, e) { return e > t ? e : t; }, within: function (t, e, i) { return Math.abs(t - e) <= i; }, mapLinear: function (t, e, i, s, n) { return s + ((t - e) * (n - s)) / (i - e); }, smoothstep: function (t, e, i) { return e >= t ? 0 : t >= i ? 1 : ((t = (t - e) / (i - e)), t * t * (3 - 2 * t)); }, smootherstep: function (t, e, i) { return e >= t ? 0 : t >= i ? 1 : ((t = (t - e) / (i - e)), t * t * t * (t * (6 * t - 15) + 10)); }, sign: function (t) { return 0 > t ? -1 : t > 0 ? 1 : 0; }, degToRad: (function () { var t = Math.PI / 180; return function (e) { return e * t; }; })(), radToDeg: (function () { var t = 180 / Math.PI; return function (e) { return e * t; }; })(), }), (i.QuadTree = function (t, e, i, s, n, r, o) { (this.maxObjects = n || 10), (this.maxLevels = r || 4), (this.level = o || 0), (this.bounds = { x: Math.round(t), y: Math.round(e), width: i, height: s, subWidth: Math.floor(i / 2), subHeight: Math.floor(s / 2), right: Math.round(t) + Math.floor(i / 2), bottom: Math.round(e) + Math.floor(s / 2) }), (this.objects = []), (this.nodes = []); }), (i.QuadTree.prototype = { populate: function (t) { t.forEach(this.populateHandler, this, !0); }, populateHandler: function (t) { t.body && t.body.checkCollision.none === !1 && t.alive && this.insert(t.body); }, split: function () { this.level++, (this.nodes[0] = new i.QuadTree(this.bounds.right, this.bounds.y, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level)), (this.nodes[1] = new i.QuadTree(this.bounds.x, this.bounds.y, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level)), (this.nodes[2] = new i.QuadTree(this.bounds.x, this.bounds.bottom, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level)), (this.nodes[3] = new i.QuadTree(this.bounds.right, this.bounds.bottom, this.bounds.subWidth, this.bounds.subHeight, this.maxObjects, this.maxLevels, this.level)); }, insert: function (t) { var e, i = 0; if (null != this.nodes[0] && ((e = this.getIndex(t)), -1 !== e)) return void this.nodes[e].insert(t); if ((this.objects.push(t), this.objects.length > this.maxObjects && this.level < this.maxLevels)) for (null == this.nodes[0] && this.split(); i < this.objects.length; ) (e = this.getIndex(this.objects[i])), -1 !== e ? this.nodes[e].insert(this.objects.splice(i, 1)[0]) : i++; }, getIndex: function (t) { var e = -1; return ( t.x < this.bounds.right && t.right < this.bounds.right ? t.y < this.bounds.bottom && t.bottom < this.bounds.bottom ? (e = 1) : t.y > this.bounds.bottom && (e = 2) : t.x > this.bounds.right && (t.y < this.bounds.bottom && t.bottom < this.bounds.bottom ? (e = 0) : t.y > this.bounds.bottom && (e = 3)), e ); }, retrieve: function (t) { var e = this.objects; return ( (t.body.quadTreeIndex = this.getIndex(t.body)), this.nodes[0] && (-1 !== t.body.quadTreeIndex ? (e = e.concat(this.nodes[t.body.quadTreeIndex].retrieve(t))) : ((e = e.concat(this.nodes[0].retrieve(t))), (e = e.concat(this.nodes[1].retrieve(t))), (e = e.concat(this.nodes[2].retrieve(t))), (e = e.concat(this.nodes[3].retrieve(t))))), e ); }, clear: function () { this.objects = []; for (var t = 0, e = this.nodes.length; e > t; t++) this.nodes[t] && (this.nodes[t].clear(), delete this.nodes[t]); }, }), (i.QuadTree.prototype.constructor = i.QuadTree), (i.Circle = function (t, e, i) { (t = t || 0), (e = e || 0), (i = i || 0), (this.x = t), (this.y = e), (this._diameter = i), (this._radius = i > 0 ? 0.5 * i : 0); }), (i.Circle.prototype = { circumference: function () { return 2 * Math.PI * this._radius; }, setTo: function (t, e, i) { return (this.x = t), (this.y = e), (this._diameter = i), (this._radius = 0.5 * i), this; }, copyFrom: function (t) { return this.setTo(t.x, t.y, t.diameter); }, copyTo: function (t) { return (t.x = this.x), (t.y = this.y), (t.diameter = this._diameter), t; }, distance: function (t, e) { return "undefined" == typeof e && (e = !1), e ? i.Math.distanceRound(this.x, this.y, t.x, t.y) : i.Math.distance(this.x, this.y, t.x, t.y); }, clone: function (t) { return "undefined" == typeof t && (t = new i.Circle()), t.setTo(this.x, this.y, this.diameter); }, contains: function (t, e) { return i.Circle.contains(this, t, e); }, circumferencePoint: function (t, e, s) { return i.Circle.circumferencePoint(this, t, e, s); }, offset: function (t, e) { return (this.x += t), (this.y += e), this; }, offsetPoint: function (t) { return this.offset(t.x, t.y); }, toString: function () { return "[{Phaser.Circle (x=" + this.x + " y=" + this.y + " diameter=" + this.diameter + " radius=" + this.radius + ")}]"; }, }), (i.Circle.prototype.constructor = i.Circle), Object.defineProperty(i.Circle.prototype, "diameter", { get: function () { return this._diameter; }, set: function (t) { t > 0 && ((this._diameter = t), (this._radius = 0.5 * t)); }, }), Object.defineProperty(i.Circle.prototype, "radius", { get: function () { return this._radius; }, set: function (t) { t > 0 && ((this._radius = t), (this._diameter = 2 * t)); }, }), Object.defineProperty(i.Circle.prototype, "left", { get: function () { return this.x - this._radius; }, set: function (t) { t > this.x ? ((this._radius = 0), (this._diameter = 0)) : (this.radius = this.x - t); }, }), Object.defineProperty(i.Circle.prototype, "right", { get: function () { return this.x + this._radius; }, set: function (t) { t < this.x ? ((this._radius = 0), (this._diameter = 0)) : (this.radius = t - this.x); }, }), Object.defineProperty(i.Circle.prototype, "top", { get: function () { return this.y - this._radius; }, set: function (t) { t > this.y ? ((this._radius = 0), (this._diameter = 0)) : (this.radius = this.y - t); }, }), Object.defineProperty(i.Circle.prototype, "bottom", { get: function () { return this.y + this._radius; }, set: function (t) { t < this.y ? ((this._radius = 0), (this._diameter = 0)) : (this.radius = t - this.y); }, }), Object.defineProperty(i.Circle.prototype, "area", { get: function () { return this._radius > 0 ? Math.PI * this._radius * this._radius : 0; }, }), Object.defineProperty(i.Circle.prototype, "empty", { get: function () { return 0 === this._diameter; }, set: function (t) { t === !0 && this.setTo(0, 0, 0); }, }), (i.Circle.contains = function (t, e, i) { if (e >= t.left && e <= t.right && i >= t.top && i <= t.bottom) { var s = (t.x - e) * (t.x - e), n = (t.y - i) * (t.y - i); return s + n <= t.radius * t.radius; } return !1; }), (i.Circle.equals = function (t, e) { return t.x == e.x && t.y == e.y && t.diameter == e.diameter; }), (i.Circle.intersects = function (t, e) { return i.Math.distance(t.x, t.y, e.x, e.y) <= t.radius + e.radius; }), (i.Circle.circumferencePoint = function (t, e, s, n) { return "undefined" == typeof s && (s = !1), "undefined" == typeof n && (n = new i.Point()), s === !0 && (e = i.Math.radToDeg(e)), (n.x = t.x + t.radius * Math.cos(e)), (n.y = t.y + t.radius * Math.sin(e)), n; }), (i.Circle.intersectsRectangle = function (t, e) { var i = Math.abs(t.x - e.x - e.halfWidth), s = e.halfWidth + t.radius; if (i > s) return !1; var n = Math.abs(t.y - e.y - e.halfHeight), r = e.halfHeight + t.radius; if (n > r) return !1; if (i <= e.halfWidth || n <= e.halfHeight) return !0; var o = i - e.halfWidth, a = n - e.halfHeight, h = o * o, l = a * a, c = t.radius * t.radius; return c >= h + l; }), (i.Point = function (t, e) { (t = t || 0), (e = e || 0), (this.x = t), (this.y = e); }), (i.Point.prototype = { copyFrom: function (t) { return this.setTo(t.x, t.y); }, invert: function () { return this.setTo(this.y, this.x); }, setTo: function (t, e) { return (this.x = t), (this.y = e), this; }, add: function (t, e) { return (this.x += t), (this.y += e), this; }, subtract: function (t, e) { return (this.x -= t), (this.y -= e), this; }, multiply: function (t, e) { return (this.x *= t), (this.y *= e), this; }, divide: function (t, e) { return (this.x /= t), (this.y /= e), this; }, clampX: function (t, e) { return (this.x = i.Math.clamp(this.x, t, e)), this; }, clampY: function (t, e) { return (this.y = i.Math.clamp(this.y, t, e)), this; }, clamp: function (t, e) { return (this.x = i.Math.clamp(this.x, t, e)), (this.y = i.Math.clamp(this.y, t, e)), this; }, clone: function (t) { return "undefined" == typeof t && (t = new i.Point()), t.setTo(this.x, this.y); }, copyTo: function (t) { return (t.x = this.x), (t.y = this.y), t; }, distance: function (t, e) { return i.Point.distance(this, t, e); }, equals: function (t) { return t.x == this.x && t.y == this.y; }, rotate: function (t, e, s, n, r) { return i.Point.rotate(this, t, e, s, n, r); }, getMagnitude: function () { return Math.sqrt(this.x * this.x + this.y * this.y); }, setMagnitude: function (t) { return this.normalize().multiply(t, t); }, normalize: function () { if (!this.isZero()) { var t = this.getMagnitude(); (this.x /= t), (this.y /= t); } return this; }, isZero: function () { return 0 === this.x && 0 === this.y; }, toString: function () { return "[{Point (x=" + this.x + " y=" + this.y + ")}]"; }, }), (i.Point.prototype.constructor = i.Point), (i.Point.add = function (t, e, s) { return "undefined" == typeof s && (s = new i.Point()), (s.x = t.x + e.x), (s.y = t.y + e.y), s; }), (i.Point.subtract = function (t, e, s) { return "undefined" == typeof s && (s = new i.Point()), (s.x = t.x - e.x), (s.y = t.y - e.y), s; }), (i.Point.multiply = function (t, e, s) { return "undefined" == typeof s && (s = new i.Point()), (s.x = t.x * e.x), (s.y = t.y * e.y), s; }), (i.Point.divide = function (t, e, s) { return "undefined" == typeof s && (s = new i.Point()), (s.x = t.x / e.x), (s.y = t.y / e.y), s; }), (i.Point.equals = function (t, e) { return t.x == e.x && t.y == e.y; }), (i.Point.distance = function (t, e, s) { return "undefined" == typeof s && (s = !1), s ? i.Math.distanceRound(t.x, t.y, e.x, e.y) : i.Math.distance(t.x, t.y, e.x, e.y); }), (i.Point.rotate = function (t, e, s, n, r, o) { return (r = r || !1), (o = o || null), r && (n = i.Math.degToRad(n)), null === o && (o = Math.sqrt((e - t.x) * (e - t.x) + (s - t.y) * (s - t.y))), t.setTo(e + o * Math.cos(n), s + o * Math.sin(n)); }), (i.Rectangle = function (t, e, i, s) { (t = t || 0), (e = e || 0), (i = i || 0), (s = s || 0), (this.x = t), (this.y = e), (this.width = i), (this.height = s); }), (i.Rectangle.prototype = { offset: function (t, e) { return (this.x += t), (this.y += e), this; }, offsetPoint: function (t) { return this.offset(t.x, t.y); }, setTo: function (t, e, i, s) { return (this.x = t), (this.y = e), (this.width = i), (this.height = s), this; }, floor: function () { (this.x = Math.floor(this.x)), (this.y = Math.floor(this.y)); }, floorAll: function () { (this.x = Math.floor(this.x)), (this.y = Math.floor(this.y)), (this.width = Math.floor(this.width)), (this.height = Math.floor(this.height)); }, copyFrom: function (t) { return this.setTo(t.x, t.y, t.width, t.height); }, copyTo: function (t) { return (t.x = this.x), (t.y = this.y), (t.width = this.width), (t.height = this.height), t; }, inflate: function (t, e) { return i.Rectangle.inflate(this, t, e); }, size: function (t) { return i.Rectangle.size(this, t); }, clone: function (t) { return i.Rectangle.clone(this, t); }, contains: function (t, e) { return i.Rectangle.contains(this, t, e); }, containsRect: function (t) { return i.Rectangle.containsRect(this, t); }, equals: function (t) { return i.Rectangle.equals(this, t); }, intersection: function (t, e) { return i.Rectangle.intersection(this, t, e); }, intersects: function (t, e) { return i.Rectangle.intersects(this, t, e); }, intersectsRaw: function (t, e, s, n, r) { return i.Rectangle.intersectsRaw(this, t, e, s, n, r); }, union: function (t, e) { return i.Rectangle.union(this, t, e); }, toString: function () { return "[{Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + " empty=" + this.empty + ")}]"; }, }), (i.Rectangle.prototype.constructor = i.Rectangle), Object.defineProperty(i.Rectangle.prototype, "halfWidth", { get: function () { return Math.round(this.width / 2); }, }), Object.defineProperty(i.Rectangle.prototype, "halfHeight", { get: function () { return Math.round(this.height / 2); }, }), Object.defineProperty(i.Rectangle.prototype, "bottom", { get: function () { return this.y + this.height; }, set: function (t) { this.height = t <= this.y ? 0 : this.y - t; }, }), Object.defineProperty(i.Rectangle.prototype, "bottomRight", { get: function () { return new i.Point(this.right, this.bottom); }, set: function (t) { (this.right = t.x), (this.bottom = t.y); }, }), Object.defineProperty(i.Rectangle.prototype, "left", { get: function () { return this.x; }, set: function (t) { (this.width = t >= this.right ? 0 : this.right - t), (this.x = t); }, }), Object.defineProperty(i.Rectangle.prototype, "right", { get: function () { return this.x + this.width; }, set: function (t) { this.width = t <= this.x ? 0 : this.x + t; }, }), Object.defineProperty(i.Rectangle.prototype, "volume", { get: function () { return this.width * this.height; }, }), Object.defineProperty(i.Rectangle.prototype, "perimeter", { get: function () { return 2 * this.width + 2 * this.height; }, }), Object.defineProperty(i.Rectangle.prototype, "centerX", { get: function () { return this.x + this.halfWidth; }, set: function (t) { this.x = t - this.halfWidth; }, }), Object.defineProperty(i.Rectangle.prototype, "centerY", { get: function () { return this.y + this.halfHeight; }, set: function (t) { this.y = t - this.halfHeight; }, }), Object.defineProperty(i.Rectangle.prototype, "top", { get: function () { return this.y; }, set: function (t) { t >= this.bottom ? ((this.height = 0), (this.y = t)) : (this.height = this.bottom - t); }, }), Object.defineProperty(i.Rectangle.prototype, "topLeft", { get: function () { return new i.Point(this.x, this.y); }, set: function (t) { (this.x = t.x), (this.y = t.y); }, }), Object.defineProperty(i.Rectangle.prototype, "empty", { get: function () { return !this.width || !this.height; }, set: function (t) { t === !0 && this.setTo(0, 0, 0, 0); }, }), (i.Rectangle.inflate = function (t, e, i) { return (t.x -= e), (t.width += 2 * e), (t.y -= i), (t.height += 2 * i), t; }), (i.Rectangle.inflatePoint = function (t, e) { return i.Rectangle.inflate(t, e.x, e.y); }), (i.Rectangle.size = function (t, e) { return "undefined" == typeof e && (e = new i.Point()), e.setTo(t.width, t.height); }), (i.Rectangle.clone = function (t, e) { return "undefined" == typeof e && (e = new i.Rectangle()), e.setTo(t.x, t.y, t.width, t.height); }), (i.Rectangle.contains = function (t, e, i) { return e >= t.x && e <= t.right && i >= t.y && i <= t.bottom; }), (i.Rectangle.containsRaw = function (t, e, i, s, n, r) { return n >= t && t + i >= n && r >= e && e + s >= r; }), (i.Rectangle.containsPoint = function (t, e) { return i.Rectangle.contains(t, e.x, e.y); }), (i.Rectangle.containsRect = function (t, e) { return t.volume > e.volume ? !1 : t.x >= e.x && t.y >= e.y && t.right <= e.right && t.bottom <= e.bottom; }), (i.Rectangle.equals = function (t, e) { return t.x == e.x && t.y == e.y && t.width == e.width && t.height == e.height; }), (i.Rectangle.intersection = function (t, e, s) { return (s = s || new i.Rectangle()), i.Rectangle.intersects(t, e) && ((s.x = Math.max(t.x, e.x)), (s.y = Math.max(t.y, e.y)), (s.width = Math.min(t.right, e.right) - s.x), (s.height = Math.min(t.bottom, e.bottom) - s.y)), s; }), (i.Rectangle.intersects = function (t, e) { return t.width <= 0 || t.height <= 0 || e.width <= 0 || e.height <= 0 ? !1 : !(t.right < e.x || t.bottom < e.y || t.x > e.right || t.y > e.bottom); }), (i.Rectangle.intersectsRaw = function (t, e, i, s, n, r) { return "undefined" == typeof r && (r = 0), !(e > t.right + r || i < t.left - r || s > t.bottom + r || n < t.top - r); }), (i.Rectangle.union = function (t, e, s) { return "undefined" == typeof s && (s = new i.Rectangle()), s.setTo(Math.min(t.x, e.x), Math.min(t.y, e.y), Math.max(t.right, e.right) - Math.min(t.left, e.left), Math.max(t.bottom, e.bottom) - Math.min(t.top, e.top)); }), (i.Polygon = function (t) { e.Polygon.call(this, t), (this.type = i.POLYGON); }), (i.Polygon.prototype = Object.create(e.Polygon.prototype)), (i.Polygon.prototype.constructor = i.Polygon), (i.Net = function (t) { this.game = t; }), (i.Net.prototype = { getHostName: function () { return window.location && window.location.hostname ? window.location.hostname : null; }, checkDomainName: function (t) { return -1 !== window.location.hostname.indexOf(t); }, updateQueryString: function (t, e, i, s) { "undefined" == typeof i && (i = !1), ("undefined" == typeof s || "" === s) && (s = window.location.href); var n = "", r = new RegExp("([?|&])" + t + "=.*?(&|#|$)(.*)", "gi"); if (r.test(s)) n = "undefined" != typeof e && null !== e ? s.replace(r, "$1" + t + "=" + e + "$2$3") : s.replace(r, "$1$3").replace(/(&|\?)$/, ""); else if ("undefined" != typeof e && null !== e) { var o = -1 !== s.indexOf("?") ? "&" : "?", a = s.split("#"); (s = a[0] + o + t + "=" + e), a[1] && (s += "#" + a[1]), (n = s); } else n = s; return i ? void (window.location.href = n) : n; }, getQueryString: function (t) { "undefined" == typeof t && (t = ""); var e = {}, i = location.search.substring(1).split("&"); for (var s in i) { var n = i[s].split("="); if (n.length > 1) { if (t && t == this.decodeURI(n[0])) return this.decodeURI(n[1]); e[this.decodeURI(n[0])] = this.decodeURI(n[1]); } } return e; }, decodeURI: function (t) { return decodeURIComponent(t.replace(/\+/g, " ")); }, }), (i.Net.prototype.constructor = i.Net), (i.TweenManager = function (t) { (this.game = t), (this._tweens = []), (this._add = []), this.game.onPause.add(this.pauseAll, this), this.game.onResume.add(this.resumeAll, this); }), (i.TweenManager.prototype = { getAll: function () { return this._tweens; }, removeAll: function () { for (var t = 0; t < this._tweens.length; t++) this._tweens[t].pendingDelete = !0; this._add = []; }, add: function (t) { this._add.push(t); }, create: function (t) { return new i.Tween(t, this.game); }, remove: function (t) { var e = this._tweens.indexOf(t); -1 !== e && (this._tweens[e].pendingDelete = !0); }, update: function () { if (0 === this._tweens.length && 0 === this._add.length) return !1; for (var t = 0, e = this._tweens.length; e > t; ) this._tweens[t].update(this.game.time.now) ? t++ : (this._tweens.splice(t, 1), e--); return this._add.length > 0 && ((this._tweens = this._tweens.concat(this._add)), (this._add.length = 0)), !0; }, isTweening: function (t) { return this._tweens.some(function (e) { return e._object === t; }); }, pauseAll: function () { for (var t = this._tweens.length - 1; t >= 0; t--) this._tweens[t].pause(); }, resumeAll: function () { for (var t = this._tweens.length - 1; t >= 0; t--) this._tweens[t].resume(); }, }), (i.TweenManager.prototype.constructor = i.TweenManager), (i.Tween = function (t, e) { (this._object = t), (this.game = e), (this._manager = this.game.tweens), (this._valuesStart = {}), (this._valuesEnd = {}), (this._valuesStartRepeat = {}), (this._duration = 1e3), (this._repeat = 0), (this._yoyo = !1), (this._reversed = !1), (this._delayTime = 0), (this._startTime = null), (this._easingFunction = i.Easing.Linear.None), (this._interpolationFunction = i.Math.linearInterpolation), (this._chainedTweens = []), (this._onStartCallbackFired = !1), (this._onUpdateCallback = null), (this._onUpdateCallbackContext = null), (this._pausedTime = 0), (this.pendingDelete = !1); for (var s in t) this._valuesStart[s] = parseFloat(t[s], 10); (this.onStart = new i.Signal()), (this.onLoop = new i.Signal()), (this.onComplete = new i.Signal()), (this.isRunning = !1); }), (i.Tween.prototype = { to: function (t, e, i, s, n, r, o) { (e = e || 1e3), (i = i || null), (s = s || !1), (n = n || 0), (r = r || 0), (o = o || !1); var a; return ( this._parent ? ((a = this._manager.create(this._object)), this._lastChild.chain(a), (this._lastChild = a)) : ((a = this), (this._parent = this), (this._lastChild = this)), (a._repeat = r), (a._duration = e), (a._valuesEnd = t), null !== i && (a._easingFunction = i), n > 0 && (a._delayTime = n), (a._yoyo = o), s ? this.start() : this ); }, start: function () { if (null !== this.game && null !== this._object) { this._manager.add(this), (this.isRunning = !0), (this._onStartCallbackFired = !1), (this._startTime = this.game.time.now + this._delayTime); for (var t in this._valuesEnd) { if (this._valuesEnd[t] instanceof Array) { if (0 === this._valuesEnd[t].length) continue; this._valuesEnd[t] = [this._object[t]].concat(this._valuesEnd[t]); } (this._valuesStart[t] = this._object[t]), this._valuesStart[t] instanceof Array == !1 && (this._valuesStart[t] *= 1), (this._valuesStartRepeat[t] = this._valuesStart[t] || 0); } return this; } }, stop: function () { return (this.isRunning = !1), (this._onUpdateCallback = null), this._manager.remove(this), this; }, delay: function (t) { return (this._delayTime = t), this; }, repeat: function (t) { return (this._repeat = t), this; }, yoyo: function (t) { return (this._yoyo = t), this; }, easing: function (t) { return (this._easingFunction = t), this; }, interpolation: function (t) { return (this._interpolationFunction = t), this; }, chain: function () { return (this._chainedTweens = arguments), this; }, loop: function () { return this._lastChild.chain(this), this; }, onUpdateCallback: function (t, e) { return (this._onUpdateCallback = t), (this._onUpdateCallbackContext = e), this; }, pause: function () { (this._paused = !0), (this._pausedTime = this.game.time.now); }, resume: function () { (this._paused = !1), (this._startTime += this.game.time.now - this._pausedTime); }, update: function (t) { if (this.pendingDelete) return !1; if (this._paused || t < this._startTime) return !0; var e; if (t < this._startTime) return !0; this._onStartCallbackFired === !1 && (this.onStart.dispatch(this._object), (this._onStartCallbackFired = !0)); var i = (t - this._startTime) / this._duration; i = i > 1 ? 1 : i; var s = this._easingFunction(i); for (e in this._valuesEnd) { var n = this._valuesStart[e] || 0, r = this._valuesEnd[e]; r instanceof Array ? (this._object[e] = this._interpolationFunction(r, s)) : ("string" == typeof r && (r = n + parseFloat(r, 10)), "number" == typeof r && (this._object[e] = n + (r - n) * s)); } if ((null !== this._onUpdateCallback && this._onUpdateCallback.call(this._onUpdateCallbackContext, this, s), 1 == i)) { if (this._repeat > 0) { isFinite(this._repeat) && this._repeat--; for (e in this._valuesStartRepeat) { if (("string" == typeof this._valuesEnd[e] && (this._valuesStartRepeat[e] = this._valuesStartRepeat[e] + parseFloat(this._valuesEnd[e], 10)), this._yoyo)) { var o = this._valuesStartRepeat[e]; (this._valuesStartRepeat[e] = this._valuesEnd[e]), (this._valuesEnd[e] = o), (this._reversed = !this._reversed); } this._valuesStart[e] = this._valuesStartRepeat[e]; } return (this._startTime = t + this._delayTime), this.onLoop.dispatch(this._object), !0; } (this.isRunning = !1), this.onComplete.dispatch(this._object); for (var a = 0, h = this._chainedTweens.length; h > a; a++) this._chainedTweens[a].start(t); return !1; } return !0; }, }), (i.Tween.prototype.constructor = i.Tween), (i.Easing = { Linear: { None: function (t) { return t; }, }, Quadratic: { In: function (t) { return t * t; }, Out: function (t) { return t * (2 - t); }, InOut: function (t) { return (t *= 2) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1); }, }, Cubic: { In: function (t) { return t * t * t; }, Out: function (t) { return --t * t * t + 1; }, InOut: function (t) { return (t *= 2) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2); }, }, Quartic: { In: function (t) { return t * t * t * t; }, Out: function (t) { return 1 - --t * t * t * t; }, InOut: function (t) { return (t *= 2) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2); }, }, Quintic: { In: function (t) { return t * t * t * t * t; }, Out: function (t) { return --t * t * t * t * t + 1; }, InOut: function (t) { return (t *= 2) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2); }, }, Sinusoidal: { In: function (t) { return 1 - Math.cos((t * Math.PI) / 2); }, Out: function (t) { return Math.sin((t * Math.PI) / 2); }, InOut: function (t) { return 0.5 * (1 - Math.cos(Math.PI * t)); }, }, Exponential: { In: function (t) { return 0 === t ? 0 : Math.pow(1024, t - 1); }, Out: function (t) { return 1 === t ? 1 : 1 - Math.pow(2, -10 * t); }, InOut: function (t) { return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? 0.5 * Math.pow(1024, t - 1) : 0.5 * (-Math.pow(2, -10 * (t - 1)) + 2); }, }, Circular: { In: function (t) { return 1 - Math.sqrt(1 - t * t); }, Out: function (t) { return Math.sqrt(1 - --t * t); }, InOut: function (t) { return (t *= 2) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1); }, }, Elastic: { In: function (t) { var e, i = 0.1, s = 0.4; return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? ((i = 1), (e = s / 4)) : (e = (s * Math.asin(1 / i)) / (2 * Math.PI)), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin((2 * (t - e) * Math.PI) / s))); }, Out: function (t) { var e, i = 0.1, s = 0.4; return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? ((i = 1), (e = s / 4)) : (e = (s * Math.asin(1 / i)) / (2 * Math.PI)), i * Math.pow(2, -10 * t) * Math.sin((2 * (t - e) * Math.PI) / s) + 1); }, InOut: function (t) { var e, i = 0.1, s = 0.4; return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? ((i = 1), (e = s / 4)) : (e = (s * Math.asin(1 / i)) / (2 * Math.PI)), (t *= 2) < 1 ? -0.5 * i * Math.pow(2, 10 * (t -= 1)) * Math.sin((2 * (t - e) * Math.PI) / s) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((2 * (t - e) * Math.PI) / s) * 0.5 + 1); }, }, Back: { In: function (t) { var e = 1.70158; return t * t * ((e + 1) * t - e); }, Out: function (t) { var e = 1.70158; return --t * t * ((e + 1) * t + e) + 1; }, InOut: function (t) { var e = 2.5949095; return (t *= 2) < 1 ? 0.5 * t * t * ((e + 1) * t - e) : 0.5 * ((t -= 2) * t * ((e + 1) * t + e) + 2); }, }, Bounce: { In: function (t) { return 1 - i.Easing.Bounce.Out(1 - t); }, Out: function (t) { return 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 : 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375; }, InOut: function (t) { return 0.5 > t ? 0.5 * i.Easing.Bounce.In(2 * t) : 0.5 * i.Easing.Bounce.Out(2 * t - 1) + 0.5; }, }, }), (i.Time = function (t) { (this.game = t), (this.time = 0), (this.now = 0), (this.elapsed = 0), (this.pausedTime = 0), (this.fps = 0), (this.fpsMin = 1e3), (this.fpsMax = 0), (this.msMin = 1e3), (this.msMax = 0), (this.physicsElapsed = 0), (this.frames = 0), (this.pauseDuration = 0), (this.timeToCall = 0), (this.lastTime = 0), (this.events = new i.Timer(this.game, !1)), (this._started = 0), (this._timeLastSecond = 0), (this._pauseStarted = 0), (this._justResumed = !1), (this._timers = []), (this._len = 0), (this._i = 0), this.game.onPause.add(this.gamePaused, this), this.game.onResume.add(this.gameResumed, this); }), (i.Time.prototype = { boot: function () { this.events.start(); }, create: function (t) { "undefined" == typeof t && (t = !0); var e = new i.Timer(this.game, t); return this._timers.push(e), e; }, removeAll: function () { for (var t = 0; t < this._timers.length; t++) this._timers[t].destroy(); this._timers = []; }, update: function (t) { if (((this.now = t), this._justResumed)) { (this.time = this.now), (this._justResumed = !1), this.events.resume(); for (var e = 0; e < this._timers.length; e++) this._timers[e].resume(); } if ( ((this.timeToCall = this.game.math.max(0, 16 - (t - this.lastTime))), (this.elapsed = this.now - this.time), (this.msMin = this.game.math.min(this.msMin, this.elapsed)), (this.msMax = this.game.math.max(this.msMax, this.elapsed)), this.frames++, this.now > this._timeLastSecond + 1e3 && ((this.fps = Math.round((1e3 * this.frames) / (this.now - this._timeLastSecond))), (this.fpsMin = this.game.math.min(this.fpsMin, this.fps)), (this.fpsMax = this.game.math.max(this.fpsMax, this.fps)), (this._timeLastSecond = this.now), (this.frames = 0)), (this.time = this.now), (this.lastTime = t + this.timeToCall), (this.physicsElapsed = 1 * (this.elapsed / 1e3)), this.physicsElapsed > 0.05 && (this.physicsElapsed = 0.05), this.game.paused) ) this.pausedTime = this.now - this._pauseStarted; else for (this.events.update(this.now), this._i = 0, this._len = this._timers.length; this._i < this._len; ) this._timers[this._i].update(this.now) ? this._i++ : (this._timers.splice(this._i, 1), this._len--); }, gamePaused: function () { (this._pauseStarted = this.now), this.events.pause(); for (var t = 0; t < this._timers.length; t++) this._timers[t].pause(); }, gameResumed: function () { (this.time = Date.now()), (this.pauseDuration = this.pausedTime), (this._justResumed = !0); }, totalElapsedSeconds: function () { return 0.001 * (this.now - this._started); }, elapsedSince: function (t) { return this.now - t; }, elapsedSecondsSince: function (t) { return 0.001 * (this.now - t); }, reset: function () { this._started = this.now; }, }), (i.Time.prototype.constructor = i.Time), (i.Timer = function (t, e) { "undefined" == typeof e && (e = !0), (this.game = t), (this.running = !1), (this.autoDestroy = e), (this.expired = !1), (this.events = []), (this.onComplete = new i.Signal()), (this.nextTick = 0), (this.paused = !1), (this._started = 0), (this._pauseStarted = 0), (this._now = 0), (this._len = 0), (this._i = 0); }), (i.Timer.MINUTE = 6e4), (i.Timer.SECOND = 1e3), (i.Timer.HALF = 500), (i.Timer.QUARTER = 250), (i.Timer.prototype = { create: function (t, e, s, n, r, o) { var a = t; this.running && (a += this._now); var h = new i.TimerEvent(this, t, a, s, e, n, r, o); return this.events.push(h), this.order(), (this.expired = !1), h; }, add: function (t, e, i) { return this.create(t, !1, 0, e, i, Array.prototype.splice.call(arguments, 3)); }, repeat: function (t, e, i, s) { return this.create(t, !1, e, i, s, Array.prototype.splice.call(arguments, 4)); }, loop: function (t, e, i) { return this.create(t, !0, 0, e, i, Array.prototype.splice.call(arguments, 3)); }, start: function () { (this._started = this.game.time.now), (this.running = !0); }, stop: function () { (this.running = !1), (this.events.length = 0); }, remove: function (t) { for (var e = 0; e < this.events.length; e++) if (this.events[e] === t) return this.events.splice(e, 1), !0; return !1; }, order: function () { this.events.length > 0 && (this.events.sort(this.sortHandler), (this.nextTick = this.events[0].tick)); }, sortHandler: function (t, e) { return t.tick < e.tick ? -1 : t.tick > e.tick ? 1 : 0; }, update: function (t) { if (this.paused) return !0; if (((this._now = t - this._started), (this._len = this.events.length), this.running && this._now >= this.nextTick && this._len > 0)) { for (this._i = 0; this._i < this._len && this._now >= this.events[this._i].tick; ) this.events[this._i].loop === !0 ? ((this.events[this._i].tick += this.events[this._i].delay - (this._now - this.events[this._i].tick)), this.events[this._i].callback.apply(this.events[this._i].callbackContext, this.events[this._i].args)) : this.events[this._i].repeatCount > 0 ? (this.events[this._i].repeatCount--, (this.events[this._i].tick += this.events[this._i].delay - (this._now - this.events[this._i].tick)), this.events[this._i].callback.apply(this.events[this._i].callbackContext, this.events[this._i].args)) : (this.events[this._i].callback.apply(this.events[this._i].callbackContext, this.events[this._i].args), this.events.splice(this._i, 1), this._len--), this._i++; this.events.length > 0 ? this.order() : ((this.expired = !0), this.onComplete.dispatch(this)); } return this.expired && this.autoDestroy ? !1 : !0; }, pause: function () { (this._pauseStarted = this.game.time.now), (this.paused = !0); }, resume: function () { for (var t = this.game.time.now - this._pauseStarted, e = 0; e < this.events.length; e++) this.events[e].tick += t; (this.nextTick += t), (this.paused = !1); }, destroy: function () { this.onComplete.removeAll(), (this.running = !1), (this.events = []); }, }), Object.defineProperty(i.Timer.prototype, "next", { get: function () { return this.nextTick; }, }), Object.defineProperty(i.Timer.prototype, "duration", { get: function () { return this.running && this.nextTick > this._now ? this.nextTick - this._now : 0; }, }), Object.defineProperty(i.Timer.prototype, "length", { get: function () { return this.events.length; }, }), Object.defineProperty(i.Timer.prototype, "ms", { get: function () { return this._now; }, }), Object.defineProperty(i.Timer.prototype, "seconds", { get: function () { return 0.001 * this._now; }, }), (i.Timer.prototype.constructor = i.Timer), (i.TimerEvent = function (t, e, i, s, n, r, o, a) { (this.timer = t), (this.delay = e), (this.tick = i), (this.repeatCount = s - 1), (this.loop = n), (this.callback = r), (this.callbackContext = o), (this.args = a); }), (i.TimerEvent.prototype.constructor = i.TimerEvent), (i.AnimationManager = function (t) { (this.sprite = t), (this.game = t.game), (this.currentFrame = null), (this.updateIfVisible = !0), (this.isLoaded = !1), (this._frameData = null), (this._anims = {}), (this._outputFrames = []); }), (i.AnimationManager.prototype = { loadFrameData: function (t) { (this._frameData = t), (this.frame = 0), (this.isLoaded = !0); }, add: function (t, s, n, r, o) { return null == this._frameData ? void console.warn("No FrameData available for Phaser.Animation " + t) : ((n = n || 60), "undefined" == typeof r && (r = !1), "undefined" == typeof o && (o = s && "number" == typeof s[0] ? !0 : !1), null == this.sprite.events.onAnimationStart && ((this.sprite.events.onAnimationStart = new i.Signal()), (this.sprite.events.onAnimationComplete = new i.Signal()), (this.sprite.events.onAnimationLoop = new i.Signal())), (this._outputFrames.length = 0), this._frameData.getFrameIndexes(s, o, this._outputFrames), (this._anims[t] = new i.Animation(this.game, this.sprite, t, this._frameData, this._outputFrames, n, r)), (this.currentAnim = this._anims[t]), (this.currentFrame = this.currentAnim.currentFrame), this.sprite.setTexture(e.TextureCache[this.currentFrame.uuid]), this._anims[t]); }, validateFrames: function (t, e) { "undefined" == typeof e && (e = !0); for (var i = 0; i < t.length; i++) if (e === !0) { if (t[i] > this._frameData.total) return !1; } else if (this._frameData.checkFrameName(t[i]) === !1) return !1; return !0; }, play: function (t, e, i, s) { if (this._anims[t]) { if (this.currentAnim != this._anims[t]) return (this.currentAnim = this._anims[t]), (this.currentAnim.paused = !1), this.currentAnim.play(e, i, s); if (this.currentAnim.isPlaying === !1) return (this.currentAnim.paused = !1), this.currentAnim.play(e, i, s); } }, stop: function (t, e) { "undefined" == typeof e && (e = !1), "string" == typeof t ? this._anims[t] && ((this.currentAnim = this._anims[t]), this.currentAnim.stop(e)) : this.currentAnim && this.currentAnim.stop(e); }, update: function () { return this.updateIfVisible && this.sprite.visible === !1 ? !1 : this.currentAnim && this.currentAnim.update() === !0 ? ((this.currentFrame = this.currentAnim.currentFrame), (this.sprite.currentFrame = this.currentFrame), !0) : !1; }, getAnimation: function (t) { return "string" == typeof t && this._anims[t] ? this._anims[t] : null; }, refreshFrame: function () { (this.sprite.currentFrame = this.currentFrame), this.sprite.setTexture(e.TextureCache[this.currentFrame.uuid]); }, destroy: function () { (this._anims = {}), (this._frameData = null), (this._frameIndex = 0), (this.currentAnim = null), (this.currentFrame = null); }, }), (i.AnimationManager.prototype.constructor = i.AnimationManager), Object.defineProperty(i.AnimationManager.prototype, "frameData", { get: function () { return this._frameData; }, }), Object.defineProperty(i.AnimationManager.prototype, "frameTotal", { get: function () { return this._frameData ? this._frameData.total : -1; }, }), Object.defineProperty(i.AnimationManager.prototype, "paused", { get: function () { return this.currentAnim.isPaused; }, set: function (t) { this.currentAnim.paused = t; }, }), Object.defineProperty(i.AnimationManager.prototype, "frame", { get: function () { return this.currentFrame ? this._frameIndex : void 0; }, set: function (t) { "number" == typeof t && this._frameData && null !== this._frameData.getFrame(t) && ((this.currentFrame = this._frameData.getFrame(t)), (this._frameIndex = t), (this.sprite.currentFrame = this.currentFrame), this.sprite.setTexture(e.TextureCache[this.currentFrame.uuid])); }, }), Object.defineProperty(i.AnimationManager.prototype, "frameName", { get: function () { return this.currentFrame ? this.currentFrame.name : void 0; }, set: function (t) { "string" == typeof t && this._frameData && null !== this._frameData.getFrameByName(t) ? ((this.currentFrame = this._frameData.getFrameByName(t)), (this._frameIndex = this.currentFrame.index), (this.sprite.currentFrame = this.currentFrame), this.sprite.setTexture(e.TextureCache[this.currentFrame.uuid])) : console.warn("Cannot set frameName: " + t); }, }), (i.Animation = function (t, e, i, s, n, r, o) { (this.game = t), (this._parent = e), (this._frameData = s), (this.name = i), (this._frames = []), (this._frames = this._frames.concat(n)), (this.delay = 1e3 / r), (this.looped = o), (this.killOnComplete = !1), (this.isFinished = !1), (this.isPlaying = !1), (this.isPaused = !1), (this._pauseStartTime = 0), (this._frameIndex = 0), (this._frameDiff = 0), (this._frameSkip = 1), (this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex])); }), (i.Animation.prototype = { play: function (t, i, s) { return ( "number" == typeof t && (this.delay = 1e3 / t), "boolean" == typeof i && (this.looped = i), "undefined" != typeof s && (this.killOnComplete = s), (this.isPlaying = !0), (this.isFinished = !1), (this.paused = !1), (this._timeLastFrame = this.game.time.now), (this._timeNextFrame = this.game.time.now + this.delay), (this._frameIndex = 0), (this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex])), this._parent.setTexture(e.TextureCache[this.currentFrame.uuid]), this._parent.events && this._parent.events.onAnimationStart.dispatch(this._parent, this), this ); }, restart: function () { (this.isPlaying = !0), (this.isFinished = !1), (this.paused = !1), (this._timeLastFrame = this.game.time.now), (this._timeNextFrame = this.game.time.now + this.delay), (this._frameIndex = 0), (this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex])); }, stop: function (t) { "undefined" == typeof t && (t = !1), (this.isPlaying = !1), (this.isFinished = !0), (this.paused = !1), t && (this.currentFrame = this._frameData.getFrame(this._frames[0])); }, update: function () { return this.isPaused ? !1 : this.isPlaying === !0 && this.game.time.now >= this._timeNextFrame ? ((this._frameSkip = 1), (this._frameDiff = this.game.time.now - this._timeNextFrame), (this._timeLastFrame = this.game.time.now), this._frameDiff > this.delay && ((this._frameSkip = Math.floor(this._frameDiff / this.delay)), (this._frameDiff -= this._frameSkip * this.delay)), (this._timeNextFrame = this.game.time.now + (this.delay - this._frameDiff)), (this._frameIndex += this._frameSkip), this._frameIndex >= this._frames.length ? this.looped ? ((this._frameIndex %= this._frames.length), (this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex])), this.currentFrame && this._parent.setTexture(e.TextureCache[this.currentFrame.uuid]), this._parent.events.onAnimationLoop.dispatch(this._parent, this)) : this.onComplete() : ((this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex])), this.currentFrame && this._parent.setTexture(e.TextureCache[this.currentFrame.uuid])), !0) : !1; }, destroy: function () { (this.game = null), (this._parent = null), (this._frames = null), (this._frameData = null), (this.currentFrame = null), (this.isPlaying = !1); }, onComplete: function () { (this.isPlaying = !1), (this.isFinished = !0), (this.paused = !1), this._parent.events && this._parent.events.onAnimationComplete.dispatch(this._parent, this), this.killOnComplete && this._parent.kill(); }, }), (i.Animation.prototype.constructor = i.Animation), Object.defineProperty(i.Animation.prototype, "paused", { get: function () { return this.isPaused; }, set: function (t) { (this.isPaused = t), t ? (this._pauseStartTime = this.game.time.now) : this.isPlaying && (this._timeNextFrame = this.game.time.now + this.delay); }, }), Object.defineProperty(i.Animation.prototype, "frameTotal", { get: function () { return this._frames.length; }, }), Object.defineProperty(i.Animation.prototype, "frame", { get: function () { return null !== this.currentFrame ? this.currentFrame.index : this._frameIndex; }, set: function (t) { (this.currentFrame = this._frameData.getFrame(t)), null !== this.currentFrame && ((this._frameIndex = t), this._parent.setTexture(e.TextureCache[this.currentFrame.uuid])); }, }), (i.Animation.generateFrameNames = function (t, e, s, n, r) { "undefined" == typeof n && (n = ""); var o = [], a = ""; if (s > e) for (var h = e; s >= h; h++) (a = "number" == typeof r ? i.Utils.pad(h.toString(), r, "0", 1) : h.toString()), (a = t + a + n), o.push(a); else for (var h = e; h >= s; h--) (a = "number" == typeof r ? i.Utils.pad(h.toString(), r, "0", 1) : h.toString()), (a = t + a + n), o.push(a); return o; }), (i.Frame = function (t, e, s, n, r, o, a) { (this.index = t), (this.x = e), (this.y = s), (this.width = n), (this.height = r), (this.name = o), (this.uuid = a), (this.centerX = Math.floor(n / 2)), (this.centerY = Math.floor(r / 2)), (this.distance = i.Math.distance(0, 0, n, r)), (this.rotated = !1), (this.rotationDirection = "cw"), (this.trimmed = !1), (this.sourceSizeW = n), (this.sourceSizeH = r), (this.spriteSourceSizeX = 0), (this.spriteSourceSizeY = 0), (this.spriteSourceSizeW = 0), (this.spriteSourceSizeH = 0); }), (i.Frame.prototype = { setTrim: function (t, e, i, s, n, r, o) { (this.trimmed = t), t && ((this.width = e), (this.height = i), (this.sourceSizeW = e), (this.sourceSizeH = i), (this.centerX = Math.floor(e / 2)), (this.centerY = Math.floor(i / 2)), (this.spriteSourceSizeX = s), (this.spriteSourceSizeY = n), (this.spriteSourceSizeW = r), (this.spriteSourceSizeH = o)); }, }), (i.Frame.prototype.constructor = i.Frame), (i.FrameData = function () { (this._frames = []), (this._frameNames = []); }), (i.FrameData.prototype = { addFrame: function (t) { return (t.index = this._frames.length), this._frames.push(t), "" !== t.name && (this._frameNames[t.name] = t.index), t; }, getFrame: function (t) { return this._frames.length > t ? this._frames[t] : null; }, getFrameByName: function (t) { return "number" == typeof this._frameNames[t] ? this._frames[this._frameNames[t]] : null; }, checkFrameName: function (t) { return null == this._frameNames[t] ? !1 : !0; }, getFrameRange: function (t, e, i) { "undefined" == typeof i && (i = []); for (var s = t; e >= s; s++) i.push(this._frames[s]); return i; }, getFrames: function (t, e, i) { if (("undefined" == typeof e && (e = !0), "undefined" == typeof i && (i = []), "undefined" == typeof t || 0 === t.length)) for (var s = 0; s < this._frames.length; s++) i.push(this._frames[s]); else for (var s = 0, n = t.length; n > s; s++) i.push(e ? this.getFrame(t[s]) : this.getFrameByName(t[s])); return i; }, getFrameIndexes: function (t, e, i) { if (("undefined" == typeof e && (e = !0), "undefined" == typeof i && (i = []), "undefined" == typeof t || 0 === t.length)) for (var s = 0, n = this._frames.length; n > s; s++) i.push(this._frames[s].index); else for (var s = 0, n = t.length; n > s; s++) e ? i.push(t[s]) : this.getFrameByName(t[s]) && i.push(this.getFrameByName(t[s]).index); return i; }, }), (i.FrameData.prototype.constructor = i.FrameData), Object.defineProperty(i.FrameData.prototype, "total", { get: function () { return this._frames.length; }, }), (i.AnimationParser = { spriteSheet: function (t, s, n, r, o, a, h) { var l = t.cache.getImage(s); if (null == l) return null; var c = l.width, u = l.height; 0 >= n && (n = Math.floor(-c / Math.min(-1, n))), 0 >= r && (r = Math.floor(-u / Math.min(-1, r))); var d = Math.round(c / n), p = Math.round(u / r), f = d * p; if ((-1 !== o && (f = o), 0 === c || 0 === u || n > c || r > u || 0 === f)) return console.warn("Phaser.AnimationParser.spriteSheet: width/height zero or width/height < given frameWidth/frameHeight"), null; for (var g = new i.FrameData(), m = a, y = a, _ = 0; f > _; _++) { var x = t.rnd.uuid(); g.addFrame(new i.Frame(_, m, y, n, r, "", x)), (e.TextureCache[x] = new e.Texture(e.BaseTextureCache[s], { x: m, y: y, width: n, height: r })), (m += n + h), m === c && ((m = a), (y += r + h)); } return g; }, JSONData: function (t, s, n) { if (!s.frames) return console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"), void console.log(s); for (var r, o = new i.FrameData(), a = s.frames, h = 0; h < a.length; h++) { var l = t.rnd.uuid(); (r = o.addFrame(new i.Frame(h, a[h].frame.x, a[h].frame.y, a[h].frame.w, a[h].frame.h, a[h].filename, l))), (e.TextureCache[l] = new e.Texture(e.BaseTextureCache[n], { x: a[h].frame.x, y: a[h].frame.y, width: a[h].frame.w, height: a[h].frame.h })), a[h].trimmed && (r.setTrim(a[h].trimmed, a[h].sourceSize.w, a[h].sourceSize.h, a[h].spriteSourceSize.x, a[h].spriteSourceSize.y, a[h].spriteSourceSize.w, a[h].spriteSourceSize.h), (e.TextureCache[l].trimmed = !0), (e.TextureCache[l].trim.x = a[h].spriteSourceSize.x), (e.TextureCache[l].trim.y = a[h].spriteSourceSize.y)); } return o; }, JSONDataHash: function (t, s, n) { if (!s.frames) return console.warn("Phaser.AnimationParser.JSONDataHash: Invalid Texture Atlas JSON given, missing 'frames' object"), void console.log(s); var r, o = new i.FrameData(), a = s.frames, h = 0; for (var l in a) { var c = t.rnd.uuid(); (r = o.addFrame(new i.Frame(h, a[l].frame.x, a[l].frame.y, a[l].frame.w, a[l].frame.h, l, c))), (e.TextureCache[c] = new e.Texture(e.BaseTextureCache[n], { x: a[l].frame.x, y: a[l].frame.y, width: a[l].frame.w, height: a[l].frame.h })), a[l].trimmed && (r.setTrim(a[l].trimmed, a[l].sourceSize.w, a[l].sourceSize.h, a[l].spriteSourceSize.x, a[l].spriteSourceSize.y, a[l].spriteSourceSize.w, a[l].spriteSourceSize.h), (e.TextureCache[c].trimmed = !0), (e.TextureCache[c].trim.x = a[l].spriteSourceSize.x), (e.TextureCache[c].trim.y = a[l].spriteSourceSize.y)), h++; } return o; }, XMLData: function (t, s, n) { if (!s.getElementsByTagName("TextureAtlas")) return void console.warn("Phaser.AnimationParser.XMLData: Invalid Texture Atlas XML given, missing tag"); for (var r, o, a, h, l, c, u, d, p, f, g, m, y = new i.FrameData(), _ = s.getElementsByTagName("SubTexture"), x = 0; x < _.length; x++) (o = t.rnd.uuid()), (h = _[x].attributes), (a = h.name.nodeValue), (l = parseInt(h.x.nodeValue, 10)), (c = parseInt(h.y.nodeValue, 10)), (u = parseInt(h.width.nodeValue, 10)), (d = parseInt(h.height.nodeValue, 10)), (p = null), (f = null), h.frameX && ((p = Math.abs(parseInt(h.frameX.nodeValue, 10))), (f = Math.abs(parseInt(h.frameY.nodeValue, 10))), (g = parseInt(h.frameWidth.nodeValue, 10)), (m = parseInt(h.frameHeight.nodeValue, 10))), (r = y.addFrame(new i.Frame(x, l, c, u, d, a, o))), (e.TextureCache[o] = new e.Texture(e.BaseTextureCache[n], { x: l, y: c, width: u, height: d })), (null !== p || null !== f) && (r.setTrim(!0, u, d, p, f, g, m), (e.TextureCache[o].realSize = { x: p, y: f, w: g, h: m }), (e.TextureCache[o].trimmed = !0), (e.TextureCache[o].trim.x = p), (e.TextureCache[o].trim.y = f)); return y; }, }), (i.Cache = function (t) { (this.game = t), (this._canvases = {}), (this._images = {}), (this._textures = {}), (this._sounds = {}), (this._text = {}), (this._tilemaps = {}), (this._binary = {}), (this._bitmapDatas = {}), this.addDefaultImage(), this.addMissingImage(), (this.onSoundUnlock = new i.Signal()); }), (i.Cache.prototype = { addCanvas: function (t, e, i) { this._canvases[t] = { canvas: e, context: i }; }, addBinary: function (t, e) { this._binary[t] = e; }, addBitmapData: function (t, e) { return (this._bitmapDatas[t] = e), e; }, addRenderTexture: function (t, e) { var s = new i.Frame(0, 0, 0, e.width, e.height, "", ""); this._textures[t] = { texture: e, frame: s }; }, addSpriteSheet: function (t, s, n, r, o, a, h, l) { (this._images[t] = { url: s, data: n, spriteSheet: !0, frameWidth: r, frameHeight: o, margin: h, spacing: l }), (e.BaseTextureCache[t] = new e.BaseTexture(n)), (e.TextureCache[t] = new e.Texture(e.BaseTextureCache[t])), (this._images[t].frameData = i.AnimationParser.spriteSheet(this.game, t, r, o, a, h, l)); }, addTilemap: function (t, e, i, s) { this._tilemaps[t] = { url: e, data: i, format: s }; }, addTextureAtlas: function (t, s, n, r, o) { (this._images[t] = { url: s, data: n, spriteSheet: !0 }), (e.BaseTextureCache[t] = new e.BaseTexture(n)), (e.TextureCache[t] = new e.Texture(e.BaseTextureCache[t])), o == i.Loader.TEXTURE_ATLAS_JSON_ARRAY ? (this._images[t].frameData = i.AnimationParser.JSONData(this.game, r, t)) : o == i.Loader.TEXTURE_ATLAS_JSON_HASH ? (this._images[t].frameData = i.AnimationParser.JSONDataHash(this.game, r, t)) : o == i.Loader.TEXTURE_ATLAS_XML_STARLING && (this._images[t].frameData = i.AnimationParser.XMLData(this.game, r, t)); }, addBitmapFont: function (t, s, n, r) { (this._images[t] = { url: s, data: n, spriteSheet: !0 }), (e.BaseTextureCache[t] = new e.BaseTexture(n)), (e.TextureCache[t] = new e.Texture(e.BaseTextureCache[t])), i.LoaderParser.bitmapFont(this.game, r, t); }, addDefaultImage: function () { var t = new Image(); (t.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg=="), (this._images.__default = { url: null, data: t, spriteSheet: !1 }), (this._images.__default.frame = new i.Frame(0, 0, 0, 32, 32, "", "")), (e.BaseTextureCache.__default = new e.BaseTexture(t)), (e.TextureCache.__default = new e.Texture(e.BaseTextureCache.__default)); }, addMissingImage: function () { var t = new Image(); (t.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg=="), (this._images.__missing = { url: null, data: t, spriteSheet: !1 }), (this._images.__missing.frame = new i.Frame(0, 0, 0, 32, 32, "", "")), (e.BaseTextureCache.__missing = new e.BaseTexture(t)), (e.TextureCache.__missing = new e.Texture(e.BaseTextureCache.__missing)); }, addText: function (t, e, i) { this._text[t] = { url: e, data: i }; }, addImage: function (t, s, n) { (this._images[t] = { url: s, data: n, spriteSheet: !1 }), (this._images[t].frame = new i.Frame(0, 0, 0, n.width, n.height, t, this.game.rnd.uuid())), (e.BaseTextureCache[t] = new e.BaseTexture(n)), (e.TextureCache[t] = new e.Texture(e.BaseTextureCache[t])); }, addSound: function (t, e, i, s, n) { (s = s || !0), (n = n || !1); var r = !1; n && (r = !0), (this._sounds[t] = { url: e, data: i, isDecoding: !1, decoded: r, webAudio: s, audioTag: n, locked: this.game.sound.touchLocked }); }, reloadSound: function (t) { var e = this; this._sounds[t] && ((this._sounds[t].data.src = this._sounds[t].url), this._sounds[t].data.addEventListener( "canplaythrough", function () { return e.reloadSoundComplete(t); }, !1 ), this._sounds[t].data.load()); }, reloadSoundComplete: function (t) { this._sounds[t] && ((this._sounds[t].locked = !1), this.onSoundUnlock.dispatch(t)); }, updateSound: function (t, e, i) { this._sounds[t] && (this._sounds[t][e] = i); }, decodedSound: function (t, e) { (this._sounds[t].data = e), (this._sounds[t].decoded = !0), (this._sounds[t].isDecoding = !1); }, getCanvas: function (t) { return this._canvases[t] ? this._canvases[t].canvas : void console.warn('Phaser.Cache.getCanvas: Invalid key: "' + t + '"'); }, getBitmapData: function (t) { return this._bitmapDatas[t] ? this._bitmapDatas[t] : void console.warn('Phaser.Cache.getBitmapData: Invalid key: "' + t + '"'); }, checkImageKey: function (t) { return this._images[t] ? !0 : !1; }, getImage: function (t) { return this._images[t] ? this._images[t].data : void console.warn('Phaser.Cache.getImage: Invalid key: "' + t + '"'); }, getTilemapData: function (t) { return this._tilemaps[t] ? this._tilemaps[t] : void console.warn('Phaser.Cache.getTilemapData: Invalid key: "' + t + '"'); }, getFrameData: function (t) { return this._images[t] && this._images[t].frameData ? this._images[t].frameData : null; }, getFrameByIndex: function (t, e) { return this._images[t] && this._images[t].frameData ? this._images[t].frameData.getFrame(e) : null; }, getFrameByName: function (t, e) { return this._images[t] && this._images[t].frameData ? this._images[t].frameData.getFrameByName(e) : null; }, getFrame: function (t) { return this._images[t] && this._images[t].spriteSheet === !1 ? this._images[t].frame : null; }, getTextureFrame: function (t) { return this._textures[t] ? this._textures[t].frame : null; }, getTexture: function (t) { return this._textures[t] ? this._textures[t] : void console.warn('Phaser.Cache.getTexture: Invalid key: "' + t + '"'); }, getSound: function (t) { return this._sounds[t] ? this._sounds[t] : void console.warn('Phaser.Cache.getSound: Invalid key: "' + t + '"'); }, getSoundData: function (t) { return this._sounds[t] ? this._sounds[t].data : void console.warn('Phaser.Cache.getSoundData: Invalid key: "' + t + '"'); }, isSoundDecoded: function (t) { return this._sounds[t] ? this._sounds[t].decoded : void 0; }, isSoundReady: function (t) { return this._sounds[t] && this._sounds[t].decoded && this.game.sound.touchLocked === !1; }, isSpriteSheet: function (t) { return this._images[t] ? this._images[t].spriteSheet : !1; }, getText: function (t) { return this._text[t] ? this._text[t].data : void console.warn('Phaser.Cache.getText: Invalid key: "' + t + '"'); }, getBinary: function (t) { return this._binary[t] ? this._binary[t] : void console.warn('Phaser.Cache.getBinary: Invalid key: "' + t + '"'); }, getKeys: function (t) { var e = []; for (var i in t) "__default" !== i && "__missing" !== i && e.push(i); return e; }, getImageKeys: function () { return this.getKeys(this._images); }, getSoundKeys: function () { return this.getKeys(this._sounds); }, getTextKeys: function () { return this.getKeys(this._text); }, removeCanvas: function (t) { delete this._canvases[t]; }, removeImage: function (t) { delete this._images[t]; }, removeSound: function (t) { delete this._sounds[t]; }, removeText: function (t) { delete this._text[t]; }, destroy: function () { for (var t in this._canvases) delete this._canvases[t.key]; for (var t in this._images) delete this._images[t.key]; for (var t in this._sounds) delete this._sounds[t.key]; for (var t in this._text) delete this._text[t.key]; }, }), (i.Cache.prototype.constructor = i.Cache), (i.Loader = function (t) { (this.game = t), (this._fileList = []), (this._fileIndex = 0), (this._progressChunk = 0), (this._xhr = new XMLHttpRequest()), (this.isLoading = !1), (this.hasLoaded = !1), (this.progress = 0), (this.progressFloat = 0), (this.preloadSprite = null), (this.crossOrigin = ""), (this.baseURL = ""), (this.onFileComplete = new i.Signal()), (this.onFileError = new i.Signal()), (this.onLoadStart = new i.Signal()), (this.onLoadComplete = new i.Signal()); }), (i.Loader.TEXTURE_ATLAS_JSON_ARRAY = 0), (i.Loader.TEXTURE_ATLAS_JSON_HASH = 1), (i.Loader.TEXTURE_ATLAS_XML_STARLING = 2), (i.Loader.prototype = { setPreloadSprite: function (t, e) { (e = e || 0), (this.preloadSprite = { sprite: t, direction: e, width: t.width, height: t.height, crop: null }), (this.preloadSprite.crop = 0 === e ? new i.Rectangle(0, 0, 1, t.height) : new i.Rectangle(0, 0, t.width, 1)), (t.crop = this.preloadSprite.crop), (t.cropEnabled = !0); }, checkKeyExists: function (t, e) { if (this._fileList.length > 0) for (var i = 0; i < this._fileList.length; i++) if (this._fileList[i].type === t && this._fileList[i].key === e) return !0; return !1; }, getAsset: function (t, e) { if (this._fileList.length > 0) for (var i = 0; i < this._fileList.length; i++) if (this._fileList[i].type === t && this._fileList[i].key === e) return { index: i, file: this._fileList[i] }; return !1; }, reset: function () { (this.preloadSprite = null), (this.isLoading = !1), (this._fileList.length = 0), (this._fileIndex = 0); }, addToFileList: function (t, e, i, s) { var n = { type: t, key: e, url: i, data: null, error: !1, loaded: !1 }; if ("undefined" != typeof s) for (var r in s) n[r] = s[r]; this.checkKeyExists(t, e) === !1 && this._fileList.push(n); }, replaceInFileList: function (t, e, i, s) { var n = { type: t, key: e, url: i, data: null, error: !1, loaded: !1 }; if ("undefined" != typeof s) for (var r in s) n[r] = s[r]; this.checkKeyExists(t, e) === !1 && this._fileList.push(n); }, image: function (t, e, i) { return "undefined" == typeof i && (i = !1), i ? this.replaceInFileList("image", t, e) : this.addToFileList("image", t, e), this; }, text: function (t, e, i) { return "undefined" == typeof i && (i = !1), i ? this.replaceInFileList("text", t, e) : this.addToFileList("text", t, e), this; }, script: function (t, e) { return this.addToFileList("script", t, e), this; }, binary: function (t, e, i, s) { return "undefined" == typeof i && (i = !1), i !== !1 && "undefined" == typeof s && (s = i), this.addToFileList("binary", t, e, { callback: i, callbackContext: s }), this; }, spritesheet: function (t, e, i, s, n, r, o) { return ( "undefined" == typeof n && (n = -1), "undefined" == typeof r && (r = 0), "undefined" == typeof o && (o = 0), this.addToFileList("spritesheet", t, e, { frameWidth: i, frameHeight: s, frameMax: n, margin: r, spacing: o }), this ); }, audio: function (t, e, i) { return "undefined" == typeof i && (i = !0), this.addToFileList("audio", t, e, { buffer: null, autoDecode: i }), this; }, tilemap: function (t, e, s, n) { if (("undefined" == typeof e && (e = null), "undefined" == typeof s && (s = null), "undefined" == typeof n && (n = i.Tilemap.CSV), null == e && null == s)) return console.warn("Phaser.Loader.tilemap - Both mapDataURL and mapData are null. One must be set."), this; if (s) { switch (n) { case i.Tilemap.CSV: break; case i.Tilemap.TILED_JSON: "string" == typeof s && (s = JSON.parse(s)); } this.game.cache.addTilemap(t, null, s, n); } else this.addToFileList("tilemap", t, e, { format: n }); return this; }, bitmapFont: function (t, e, i, s) { if (("undefined" == typeof i && (i = null), "undefined" == typeof s && (s = null), i)) this.addToFileList("bitmapfont", t, e, { xmlURL: i }); else if ("string" == typeof s) { var n; try { if (window.DOMParser) { var r = new DOMParser(); n = r.parseFromString(s, "text/xml"); } else (n = new ActiveXObject("Microsoft.XMLDOM")), (n.async = "false"), n.loadXML(s); } catch (o) { n = void 0; } if (!n || !n.documentElement || n.getElementsByTagName("parsererror").length) throw new Error("Phaser.Loader. Invalid Bitmap Font XML given"); this.addToFileList("bitmapfont", t, e, { xmlURL: null, xmlData: n }); } return this; }, atlasJSONArray: function (t, e, s, n) { return this.atlas(t, e, s, n, i.Loader.TEXTURE_ATLAS_JSON_ARRAY); }, atlasJSONHash: function (t, e, s, n) { return this.atlas(t, e, s, n, i.Loader.TEXTURE_ATLAS_JSON_HASH); }, atlasXML: function (t, e, s, n) { return this.atlas(t, e, s, n, i.Loader.TEXTURE_ATLAS_XML_STARLING); }, atlas: function (t, e, s, n, r) { if (("undefined" == typeof s && (s = null), "undefined" == typeof n && (n = null), "undefined" == typeof r && (r = i.Loader.TEXTURE_ATLAS_JSON_ARRAY), s)) this.addToFileList("textureatlas", t, e, { atlasURL: s, format: r }); else { switch (r) { case i.Loader.TEXTURE_ATLAS_JSON_ARRAY: "string" == typeof n && (n = JSON.parse(n)); break; case i.Loader.TEXTURE_ATLAS_XML_STARLING: if ("string" == typeof n) { var o; try { if (window.DOMParser) { var a = new DOMParser(); o = a.parseFromString(n, "text/xml"); } else (o = new ActiveXObject("Microsoft.XMLDOM")), (o.async = "false"), o.loadXML(n); } catch (h) { o = void 0; } if (!o || !o.documentElement || o.getElementsByTagName("parsererror").length) throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); n = o; } } this.addToFileList("textureatlas", t, e, { atlasURL: null, atlasData: n, format: r }); } return this; }, removeFile: function (t, e) { var i = this.getAsset(t, e); i !== !1 && this._fileList.splice(i.index, 1); }, removeAll: function () { this._fileList.length = 0; }, start: function () { this.isLoading || ((this.progress = 0), (this.progressFloat = 0), (this.hasLoaded = !1), (this.isLoading = !0), this.onLoadStart.dispatch(this._fileList.length), this._fileList.length > 0 ? ((this._fileIndex = 0), (this._progressChunk = 100 / this._fileList.length), this.loadFile()) : ((this.progress = 100), (this.progressFloat = 100), (this.hasLoaded = !0), this.onLoadComplete.dispatch())); }, loadFile: function () { if (!this._fileList[this._fileIndex]) return void console.warn("Phaser.Loader loadFile invalid index " + this._fileIndex); var t = this._fileList[this._fileIndex], e = this; switch (t.type) { case "image": case "spritesheet": case "textureatlas": case "bitmapfont": (t.data = new Image()), (t.data.name = t.key), (t.data.onload = function () { return e.fileComplete(e._fileIndex); }), (t.data.onerror = function () { return e.fileError(e._fileIndex); }), (t.data.crossOrigin = this.crossOrigin), (t.data.src = this.baseURL + t.url); break; case "audio": (t.url = this.getAudioURL(t.url)), null !== t.url ? this.game.sound.usingWebAudio ? (this._xhr.open("GET", this.baseURL + t.url, !0), (this._xhr.responseType = "arraybuffer"), (this._xhr.onload = function () { return e.fileComplete(e._fileIndex); }), (this._xhr.onerror = function () { return e.fileError(e._fileIndex); }), this._xhr.send()) : this.game.sound.usingAudioTag && (this.game.sound.touchLocked ? ((t.data = new Audio()), (t.data.name = t.key), (t.data.preload = "auto"), (t.data.src = this.baseURL + t.url), this.fileComplete(this._fileIndex)) : ((t.data = new Audio()), (t.data.name = t.key), (t.data.onerror = function () { return e.fileError(e._fileIndex); }), (t.data.preload = "auto"), (t.data.src = this.baseURL + t.url), t.data.addEventListener("canplaythrough", i.GAMES[this.game.id].load.fileComplete(this._fileIndex), !1), t.data.load())) : this.fileError(this._fileIndex); break; case "tilemap": if ((this._xhr.open("GET", this.baseURL + t.url, !0), (this._xhr.responseType = "text"), t.format === i.Tilemap.TILED_JSON)) this._xhr.onload = function () { return e.jsonLoadComplete(e._fileIndex); }; else { if (t.format !== i.Tilemap.CSV) throw new Error("Phaser.Loader. Invalid Tilemap format: " + t.format); this._xhr.onload = function () { return e.csvLoadComplete(e._fileIndex); }; } (this._xhr.onerror = function () { return e.dataLoadError(e._fileIndex); }), this._xhr.send(); break; case "text": case "script": this._xhr.open("GET", this.baseURL + t.url, !0), (this._xhr.responseType = "text"), (this._xhr.onload = function () { return e.fileComplete(e._fileIndex); }), (this._xhr.onerror = function () { return e.fileError(e._fileIndex); }), this._xhr.send(); break; case "binary": this._xhr.open("GET", this.baseURL + t.url, !0), (this._xhr.responseType = "arraybuffer"), (this._xhr.onload = function () { return e.fileComplete(e._fileIndex); }), (this._xhr.onerror = function () { return e.fileError(e._fileIndex); }), this._xhr.send(); } }, getAudioURL: function (t) { var e; "string" == typeof t && (t = [t]); for (var i = 0; i < t.length; i++) if (((e = t[i].toLowerCase()), (e = e.substr((Math.max(0, e.lastIndexOf(".")) || 1 / 0) + 1)), this.game.device.canPlayAudio(e))) return t[i]; return null; }, fileError: function (t) { (this._fileList[t].loaded = !0), (this._fileList[t].error = !0), this.onFileError.dispatch(this._fileList[t].key, this._fileList[t]), console.warn("Phaser.Loader error loading file: " + this._fileList[t].key + " from URL " + this._fileList[t].url), this.nextFile(t, !1); }, fileComplete: function (t) { if (!this._fileList[t]) return void console.warn("Phaser.Loader fileComplete invalid index " + t); var e = this._fileList[t]; e.loaded = !0; var s = !0, n = this; switch (e.type) { case "image": this.game.cache.addImage(e.key, e.url, e.data); break; case "spritesheet": this.game.cache.addSpriteSheet(e.key, e.url, e.data, e.frameWidth, e.frameHeight, e.frameMax, e.margin, e.spacing); break; case "textureatlas": if (null == e.atlasURL) this.game.cache.addTextureAtlas(e.key, e.url, e.data, e.atlasData, e.format); else { if (((s = !1), this._xhr.open("GET", this.baseURL + e.atlasURL, !0), (this._xhr.responseType = "text"), e.format == i.Loader.TEXTURE_ATLAS_JSON_ARRAY || e.format == i.Loader.TEXTURE_ATLAS_JSON_HASH)) this._xhr.onload = function () { return n.jsonLoadComplete(t); }; else { if (e.format != i.Loader.TEXTURE_ATLAS_XML_STARLING) throw new Error("Phaser.Loader. Invalid Texture Atlas format: " + e.format); this._xhr.onload = function () { return n.xmlLoadComplete(t); }; } (this._xhr.onerror = function () { return n.dataLoadError(t); }), this._xhr.send(); } break; case "bitmapfont": null == e.xmlURL ? this.game.cache.addBitmapFont(e.key, e.url, e.data, e.xmlData) : ((s = !1), this._xhr.open("GET", this.baseURL + e.xmlURL, !0), (this._xhr.responseType = "text"), (this._xhr.onload = function () { return n.xmlLoadComplete(t); }), (this._xhr.onerror = function () { return n.dataLoadError(t); }), this._xhr.send()); break; case "audio": if (this.game.sound.usingWebAudio) { if (((e.data = this._xhr.response), this.game.cache.addSound(e.key, e.url, e.data, !0, !1), e.autoDecode)) { this.game.cache.updateSound(o, "isDecoding", !0); var r = this, o = e.key; this.game.sound.context.decodeAudioData(e.data, function (t) { t && (r.game.cache.decodedSound(o, t), r.game.sound.onSoundDecode.dispatch(o, r.game.cache.getSound(o))); }); } } else e.data.removeEventListener("canplaythrough", i.GAMES[this.game.id].load.fileComplete), this.game.cache.addSound(e.key, e.url, e.data, !1, !0); break; case "text": (e.data = this._xhr.responseText), this.game.cache.addText(e.key, e.url, e.data); break; case "script": (e.data = document.createElement("script")), (e.data.language = "javascript"), (e.data.type = "text/javascript"), (e.data.defer = !1), (e.data.text = this._xhr.responseText), document.head.appendChild(e.data); break; case "binary": (e.data = e.callback ? e.callback.call(e.callbackContext, e.key, this._xhr.response) : this._xhr.response), this.game.cache.addBinary(e.key, e.data); } s && this.nextFile(t, !0); }, jsonLoadComplete: function (t) { if (!this._fileList[t]) return void console.warn("Phaser.Loader jsonLoadComplete invalid index " + t); var e = this._fileList[t], i = JSON.parse(this._xhr.responseText); (e.loaded = !0), "tilemap" === e.type ? this.game.cache.addTilemap(e.key, e.url, i, e.format) : this.game.cache.addTextureAtlas(e.key, e.url, e.data, i, e.format), this.nextFile(t, !0); }, csvLoadComplete: function (t) { if (!this._fileList[t]) return void console.warn("Phaser.Loader csvLoadComplete invalid index " + t); var e = this._fileList[t], i = this._xhr.responseText; (e.loaded = !0), this.game.cache.addTilemap(e.key, e.url, i, e.format), this.nextFile(t, !0); }, dataLoadError: function (t) { var e = this._fileList[t]; (e.loaded = !0), (e.error = !0), console.warn("Phaser.Loader dataLoadError: " + e.key), this.nextFile(t, !0); }, xmlLoadComplete: function (t) { var e, i = this._xhr.responseText; try { if (window.DOMParser) { var s = new DOMParser(); e = s.parseFromString(i, "text/xml"); } else (e = new ActiveXObject("Microsoft.XMLDOM")), (e.async = "false"), e.loadXML(i); } catch (n) { e = void 0; } if (!e || !e.documentElement || e.getElementsByTagName("parsererror").length) throw new Error("Phaser.Loader. Invalid XML given"); var r = this._fileList[t]; (r.loaded = !0), "bitmapfont" == r.type ? this.game.cache.addBitmapFont(r.key, r.url, r.data, e) : "textureatlas" == r.type && this.game.cache.addTextureAtlas(r.key, r.url, r.data, e, r.format), this.nextFile(t, !0); }, nextFile: function (t, e) { (this.progressFloat += this._progressChunk), (this.progress = Math.round(this.progressFloat)), this.progress > 100 && (this.progress = 100), null !== this.preloadSprite && (0 === this.preloadSprite.direction ? (this.preloadSprite.crop.width = Math.floor((this.preloadSprite.width / 100) * this.progress)) : (this.preloadSprite.crop.height = Math.floor((this.preloadSprite.height / 100) * this.progress)), (this.preloadSprite.sprite.crop = this.preloadSprite.crop)), this.onFileComplete.dispatch(this.progress, this._fileList[t].key, e, this.totalLoadedFiles(), this._fileList.length), this.totalQueuedFiles() > 0 ? (this._fileIndex++, this.loadFile()) : ((this.hasLoaded = !0), (this.isLoading = !1), this.removeAll(), this.onLoadComplete.dispatch()); }, totalLoadedFiles: function () { for (var t = 0, e = 0; e < this._fileList.length; e++) this._fileList[e].loaded && t++; return t; }, totalQueuedFiles: function () { for (var t = 0, e = 0; e < this._fileList.length; e++) this._fileList[e].loaded === !1 && t++; return t; }, }), (i.Loader.prototype.constructor = i.Loader), (i.LoaderParser = { bitmapFont: function (t, i, s) { if (!i.getElementsByTagName("font")) return void console.warn("Phaser.LoaderParser.bitmapFont: Invalid XML given, missing tag"); var n = e.TextureCache[s], r = {}, o = i.getElementsByTagName("info")[0], a = i.getElementsByTagName("common")[0]; (r.font = o.attributes.getNamedItem("face").nodeValue), (r.size = parseInt(o.attributes.getNamedItem("size").nodeValue, 10)), (r.lineHeight = parseInt(a.attributes.getNamedItem("lineHeight").nodeValue, 10)), (r.chars = {}); for (var h = i.getElementsByTagName("char"), l = 0; l < h.length; l++) { var c = parseInt(h[l].attributes.getNamedItem("id").nodeValue, 10), u = { x: parseInt(h[l].attributes.getNamedItem("x").nodeValue, 10), y: parseInt(h[l].attributes.getNamedItem("y").nodeValue, 10), width: parseInt(h[l].attributes.getNamedItem("width").nodeValue, 10), height: parseInt(h[l].attributes.getNamedItem("height").nodeValue, 10), }; (e.TextureCache[c] = new e.Texture(n, u)), (r.chars[c] = { xOffset: parseInt(h[l].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(h[l].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(h[l].attributes.getNamedItem("xadvance").nodeValue, 10), kerning: {}, texture: new e.Texture(n, u), }); } var d = i.getElementsByTagName("kerning"); for (l = 0; l < d.length; l++) { var p = parseInt(d[l].attributes.getNamedItem("first").nodeValue, 10), f = parseInt(d[l].attributes.getNamedItem("second").nodeValue, 10), g = parseInt(d[l].attributes.getNamedItem("amount").nodeValue, 10); r.chars[f].kerning[p] = g; } e.BitmapText.fonts[r.font] = r; }, }), (i.Sound = function (t, e, s, n, r) { "undefined" == typeof s && (s = 1), "undefined" == typeof n && (n = !1), "undefined" == typeof r && (r = t.sound.connectToMaster), (this.game = t), (this.name = e), (this.key = e), (this.loop = n), (this._volume = s), (this.markers = {}), (this.context = null), (this._buffer = null), (this._muted = !1), (this.autoplay = !1), (this.totalDuration = 0), (this.startTime = 0), (this.currentTime = 0), (this.duration = 0), (this.stopTime = 0), (this.paused = !1), (this.pausedPosition = 0), (this.pausedTime = 0), (this.isPlaying = !1), (this.currentMarker = ""), (this.pendingPlayback = !1), (this.override = !1), (this.usingWebAudio = this.game.sound.usingWebAudio), (this.usingAudioTag = this.game.sound.usingAudioTag), (this.externalNode = null), this.usingWebAudio ? ((this.context = this.game.sound.context), (this.masterGainNode = this.game.sound.masterGain), (this.gainNode = "undefined" == typeof this.context.createGain ? this.context.createGainNode() : this.context.createGain()), (this.gainNode.gain.value = s * this.game.sound.volume), r && this.gainNode.connect(this.masterGainNode)) : this.game.cache.getSound(e) && this.game.cache.isSoundReady(e) ? ((this._sound = this.game.cache.getSoundData(e)), (this.totalDuration = 0), this._sound.duration && (this.totalDuration = this._sound.duration)) : this.game.cache.onSoundUnlock.add(this.soundHasUnlocked, this), (this.onDecoded = new i.Signal()), (this.onPlay = new i.Signal()), (this.onPause = new i.Signal()), (this.onResume = new i.Signal()), (this.onLoop = new i.Signal()), (this.onStop = new i.Signal()), (this.onMute = new i.Signal()), (this.onMarkerComplete = new i.Signal()); }), (i.Sound.prototype = { soundHasUnlocked: function (t) { t == this.key && ((this._sound = this.game.cache.getSoundData(this.key)), (this.totalDuration = this._sound.duration)); }, addMarker: function (t, e, i, s, n) { (s = s || 1), "undefined" == typeof n && (n = !1), (this.markers[t] = { name: t, start: e, stop: e + i, volume: s, duration: i, durationMS: 1e3 * i, loop: n }); }, removeMarker: function (t) { delete this.markers[t]; }, update: function () { this.pendingPlayback && this.game.cache.isSoundReady(this.key) && ((this.pendingPlayback = !1), this.play(this._tempMarker, this._tempPosition, this._tempVolume, this._tempLoop)), this.isPlaying && ((this.currentTime = this.game.time.now - this.startTime), this.currentTime >= this.durationMS && (this.usingWebAudio ? this.loop ? (this.onLoop.dispatch(this), "" === this.currentMarker ? ((this.currentTime = 0), (this.startTime = this.game.time.now)) : this.play(this.currentMarker, 0, this.volume, !0, !0)) : this.stop() : this.loop ? (this.onLoop.dispatch(this), this.play(this.currentMarker, 0, this.volume, !0, !0)) : this.stop())); }, play: function (t, e, i, s, n) { if (((t = t || ""), (e = e || 0), "undefined" == typeof i && (i = this._volume), "undefined" == typeof s && (s = !1), "undefined" == typeof n && (n = !0), this.isPlaying !== !0 || n !== !1 || this.override !== !1)) { if ( (this.isPlaying && this.override && (this.usingWebAudio ? ("undefined" == typeof this._sound.stop ? this._sound.noteOff(0) : this._sound.stop(0)) : this.usingAudioTag && (this._sound.pause(), (this._sound.currentTime = 0))), (this.currentMarker = t), "" !== t) ) { if (!this.markers[t]) return void console.warn("Phaser.Sound.play: audio marker " + t + " doesn't exist"); (this.position = this.markers[t].start), (this.volume = this.markers[t].volume), (this.loop = this.markers[t].loop), (this.duration = this.markers[t].duration), (this.durationMS = this.markers[t].durationMS), (this._tempMarker = t), (this._tempPosition = this.position), (this._tempVolume = this.volume), (this._tempLoop = this.loop); } else (this.position = e), (this.volume = i), (this.loop = s), (this.duration = 0), (this.durationMS = 0), (this._tempMarker = t), (this._tempPosition = e), (this._tempVolume = i), (this._tempLoop = s); this.usingWebAudio ? this.game.cache.isSoundDecoded(this.key) ? (null == this._buffer && (this._buffer = this.game.cache.getSoundData(this.key)), (this._sound = this.context.createBufferSource()), (this._sound.buffer = this._buffer), this._sound.connect(this.externalNode ? this.externalNode.input : this.gainNode), (this.totalDuration = this._sound.buffer.duration), 0 === this.duration && ((this.duration = this.totalDuration), (this.durationMS = 1e3 * this.totalDuration)), this.loop && "" === t && (this._sound.loop = !0), "undefined" == typeof this._sound.start ? this._sound.noteGrainOn(0, this.position, this.duration) : this._sound.start(0, this.position, this.duration), (this.isPlaying = !0), (this.startTime = this.game.time.now), (this.currentTime = 0), (this.stopTime = this.startTime + this.durationMS), this.onPlay.dispatch(this)) : ((this.pendingPlayback = !0), this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).isDecoding === !1 && this.game.sound.decode(this.key, this)) : this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).locked ? (this.game.cache.reloadSound(this.key), (this.pendingPlayback = !0)) : this._sound && (this.game.device.cocoonJS || 4 === this._sound.readyState) ? (this._sound.play(), (this.totalDuration = this._sound.duration), 0 === this.duration && ((this.duration = this.totalDuration), (this.durationMS = 1e3 * this.totalDuration)), (this._sound.currentTime = this.position), (this._sound.muted = this._muted), (this._sound.volume = this._muted ? 0 : this._volume), (this.isPlaying = !0), (this.startTime = this.game.time.now), (this.currentTime = 0), (this.stopTime = this.startTime + this.durationMS), this.onPlay.dispatch(this)) : (this.pendingPlayback = !0); } }, restart: function (t, e, i, s) { (t = t || ""), (e = e || 0), (i = i || 1), "undefined" == typeof s && (s = !1), this.play(t, e, i, s, !0); }, pause: function () { this.isPlaying && this._sound && (this.stop(), (this.isPlaying = !1), (this.paused = !0), (this.pausedPosition = this.currentTime), (this.pausedTime = this.game.time.now), this.onPause.dispatch(this)); }, resume: function () { if (this.paused && this._sound) { if (this.usingWebAudio) { var t = this.position + this.pausedPosition / 1e3; (this._sound = this.context.createBufferSource()), (this._sound.buffer = this._buffer), this._sound.connect(this.externalNode ? this.externalNode.input : this.gainNode), this.loop && (this._sound.loop = !0), "undefined" == typeof this._sound.start ? this._sound.noteGrainOn(0, t, this.duration) : this._sound.start(0, t, this.duration); } else this._sound.play(); (this.isPlaying = !0), (this.paused = !1), (this.startTime += this.game.time.now - this.pausedTime), this.onResume.dispatch(this); } }, stop: function () { this.isPlaying && this._sound && (this.usingWebAudio ? ("undefined" == typeof this._sound.stop ? this._sound.noteOff(0) : this._sound.stop(0)) : this.usingAudioTag && (this._sound.pause(), (this._sound.currentTime = 0))), (this.isPlaying = !1); var t = this.currentMarker; (this.currentMarker = ""), this.onStop.dispatch(this, t); }, }), (i.Sound.prototype.constructor = i.Sound), Object.defineProperty(i.Sound.prototype, "isDecoding", { get: function () { return this.game.cache.getSound(this.key).isDecoding; }, }), Object.defineProperty(i.Sound.prototype, "isDecoded", { get: function () { return this.game.cache.isSoundDecoded(this.key); }, }), Object.defineProperty(i.Sound.prototype, "mute", { get: function () { return this._muted; }, set: function (t) { (t = t || null), t ? ((this._muted = !0), this.usingWebAudio ? ((this._muteVolume = this.gainNode.gain.value), (this.gainNode.gain.value = 0)) : this.usingAudioTag && this._sound && ((this._muteVolume = this._sound.volume), (this._sound.volume = 0))) : ((this._muted = !1), this.usingWebAudio ? (this.gainNode.gain.value = this._muteVolume) : this.usingAudioTag && this._sound && (this._sound.volume = this._muteVolume)), this.onMute.dispatch(this); }, }), Object.defineProperty(i.Sound.prototype, "volume", { get: function () { return this._volume; }, set: function (t) { this.usingWebAudio ? ((this._volume = t), (this.gainNode.gain.value = t)) : this.usingAudioTag && this._sound && t >= 0 && 1 >= t && ((this._volume = t), (this._sound.volume = t)); }, }), (i.SoundManager = function (t) { (this.game = t), (this.onSoundDecode = new i.Signal()), (this._muted = !1), (this._unlockSource = null), (this._volume = 1), (this._sounds = []), (this.context = null), (this.usingWebAudio = !0), (this.usingAudioTag = !1), (this.noAudio = !1), (this.connectToMaster = !0), (this.touchLocked = !1), (this.channels = 32); }), (i.SoundManager.prototype = { boot: function () { if ( (this.game.device.iOS && this.game.device.webAudio === !1 && (this.channels = 1), this.game.device.iOS || (window.PhaserGlobal && window.PhaserGlobal.fakeiOSTouchLock) ? ((this.game.input.touch.callbackContext = this), (this.game.input.touch.touchStartCallback = this.unlock), (this.game.input.mouse.callbackContext = this), (this.game.input.mouse.mouseDownCallback = this.unlock), (this.touchLocked = !0)) : (this.touchLocked = !1), window.PhaserGlobal) ) { if (window.PhaserGlobal.disableAudio === !0) return (this.usingWebAudio = !1), void (this.noAudio = !0); if (window.PhaserGlobal.disableWebAudio === !0) return (this.usingWebAudio = !1), (this.usingAudioTag = !0), void (this.noAudio = !1); } window.AudioContext ? (this.context = new window.AudioContext()) : window.webkitAudioContext ? (this.context = new window.webkitAudioContext()) : window.Audio ? ((this.usingWebAudio = !1), (this.usingAudioTag = !0)) : ((this.usingWebAudio = !1), (this.noAudio = !0)), null !== this.context && ((this.masterGain = "undefined" == typeof this.context.createGain ? this.context.createGainNode() : this.context.createGain()), (this.masterGain.gain.value = 1), this.masterGain.connect(this.context.destination)); }, unlock: function () { if (this.touchLocked !== !1) if (this.game.device.webAudio === !1 || (window.PhaserGlobal && window.PhaserGlobal.disableWebAudio === !0)) (this.touchLocked = !1), (this._unlockSource = null), (this.game.input.touch.callbackContext = null), (this.game.input.touch.touchStartCallback = null), (this.game.input.mouse.callbackContext = null), (this.game.input.mouse.mouseDownCallback = null); else { var t = this.context.createBuffer(1, 1, 22050); (this._unlockSource = this.context.createBufferSource()), (this._unlockSource.buffer = t), this._unlockSource.connect(this.context.destination), this._unlockSource.noteOn(0); } }, stopAll: function () { for (var t = 0; t < this._sounds.length; t++) this._sounds[t] && this._sounds[t].stop(); }, pauseAll: function () { for (var t = 0; t < this._sounds.length; t++) this._sounds[t] && this._sounds[t].pause(); }, resumeAll: function () { for (var t = 0; t < this._sounds.length; t++) this._sounds[t] && this._sounds[t].resume(); }, decode: function (t, e) { e = e || null; var i = this.game.cache.getSoundData(t); if (i && this.game.cache.isSoundDecoded(t) === !1) { this.game.cache.updateSound(t, "isDecoding", !0); var s = this; this.context.decodeAudioData(i, function (i) { s.game.cache.decodedSound(t, i), e && s.onSoundDecode.dispatch(t, e); }); } }, update: function () { this.touchLocked && this.game.device.webAudio && null !== this._unlockSource && (this._unlockSource.playbackState === this._unlockSource.PLAYING_STATE || this._unlockSource.playbackState === this._unlockSource.FINISHED_STATE) && ((this.touchLocked = !1), (this._unlockSource = null), (this.game.input.touch.callbackContext = null), (this.game.input.touch.touchStartCallback = null)); for (var t = 0; t < this._sounds.length; t++) this._sounds[t].update(); }, add: function (t, e, s, n) { "undefined" == typeof e && (e = 1), "undefined" == typeof s && (s = !1), "undefined" == typeof n && (n = this.connectToMaster); var r = new i.Sound(this.game, t, e, s, n); return this._sounds.push(r), r; }, play: function (t, e, i, s) { "undefined" == typeof s && (s = !1); var n = this.add(t, e, i); return n.play(), n; }, }), (i.SoundManager.prototype.constructor = i.SoundManager), Object.defineProperty(i.SoundManager.prototype, "mute", { get: function () { return this._muted; }, set: function (t) { if ((t = t || null)) { if (this._muted) return; (this._muted = !0), this.usingWebAudio && ((this._muteVolume = this.masterGain.gain.value), (this.masterGain.gain.value = 0)); for (var e = 0; e < this._sounds.length; e++) this._sounds[e].usingAudioTag && (this._sounds[e].mute = !0); } else { if (this._muted === !1) return; (this._muted = !1), this.usingWebAudio && (this.masterGain.gain.value = this._muteVolume); for (var e = 0; e < this._sounds.length; e++) this._sounds[e].usingAudioTag && (this._sounds[e].mute = !1); } }, }), Object.defineProperty(i.SoundManager.prototype, "volume", { get: function () { return this.usingWebAudio ? this.masterGain.gain.value : this._volume; }, set: function (t) { (t = this.game.math.clamp(t, 1, 0)), (this._volume = t), this.usingWebAudio && (this.masterGain.gain.value = t); for (var e = 0; e < this._sounds.length; e++) this._sounds[e].usingAudioTag && (this._sounds[e].volume = this._sounds[e].volume * t); }, }), (i.Utils.Debug = function (t) { (this.game = t), (this.context = t.context), (this.font = "14px Courier"), (this.columnWidth = 100), (this.lineHeight = 16), (this.renderShadow = !0), (this.currentX = 0), (this.currentY = 0), (this.currentAlpha = 1); }), (i.Utils.Debug.prototype = { start: function (t, e, i, s) { null != this.context && ("number" != typeof t && (t = 0), "number" != typeof e && (e = 0), (i = i || "rgb(255,255,255)"), "undefined" == typeof s && (s = 0), (this.currentX = t), (this.currentY = e), (this.currentColor = i), (this.currentAlpha = this.context.globalAlpha), (this.columnWidth = s), this.context.save(), this.context.setTransform(1, 0, 0, 1, 0, 0), (this.context.strokeStyle = i), (this.context.fillStyle = i), (this.context.font = this.font), (this.context.globalAlpha = 1)); }, stop: function () { this.context.restore(), (this.context.globalAlpha = this.currentAlpha); }, line: function (t, e, i) { null != this.context && ("undefined" != typeof e && (this.currentX = e), "undefined" != typeof i && (this.currentY = i), this.renderShadow && ((this.context.fillStyle = "rgb(0,0,0)"), this.context.fillText(t, this.currentX + 1, this.currentY + 1), (this.context.fillStyle = this.currentColor)), this.context.fillText(t, this.currentX, this.currentY), (this.currentY += this.lineHeight)); }, splitline: function () { if (null != this.context) { for (var t = this.currentX, e = 0; e < arguments.length; e++) this.renderShadow && ((this.context.fillStyle = "rgb(0,0,0)"), this.context.fillText(arguments[e], t + 1, this.currentY + 1), (this.context.fillStyle = this.currentColor)), this.context.fillText(arguments[e], t, this.currentY), (t += this.columnWidth); this.currentY += this.lineHeight; } }, renderQuadTree: function (t, e) { (e = e || "rgba(255,0,0,0.3)"), this.start(); var i = t.bounds; if (0 === t.nodes.length) { (this.context.strokeStyle = e), this.context.strokeRect(i.x, i.y, i.width, i.height), this.renderText(t.ID + " / " + t.objects.length, i.x + 4, i.y + 16, "rgb(0,200,0)", "12px Courier"), (this.context.strokeStyle = "rgb(0,255,0)"); for (var s = 0; s < t.objects.length; s++) this.context.strokeRect(t.objects[s].x, t.objects[s].y, t.objects[s].width, t.objects[s].height); } else for (var s = 0; s < t.nodes.length; s++) this.renderQuadTree(t.nodes[s]); this.stop(); }, renderSpriteCorners: function (t, e, i, s) { null != this.context && ((e = e || !1), (i = i || !1), (s = s || "rgb(255,255,255)"), this.start(0, 0, s), i && (this.context.beginPath(), (this.context.strokeStyle = "rgba(0, 255, 0, 0.7)"), this.context.strokeRect(t.bounds.x, t.bounds.y, t.bounds.width, t.bounds.height), this.context.closePath(), this.context.stroke()), this.context.beginPath(), this.context.moveTo(t.topLeft.x, t.topLeft.y), this.context.lineTo(t.topRight.x, t.topRight.y), this.context.lineTo(t.bottomRight.x, t.bottomRight.y), this.context.lineTo(t.bottomLeft.x, t.bottomLeft.y), this.context.closePath(), (this.context.strokeStyle = "rgba(255, 0, 255, 0.7)"), this.context.stroke(), this.renderPoint(t.offset), this.renderPoint(t.center), this.renderPoint(t.topLeft), this.renderPoint(t.topRight), this.renderPoint(t.bottomLeft), this.renderPoint(t.bottomRight), e && ((this.currentColor = s), this.line("x: " + Math.floor(t.topLeft.x) + " y: " + Math.floor(t.topLeft.y), t.topLeft.x, t.topLeft.y), this.line("x: " + Math.floor(t.topRight.x) + " y: " + Math.floor(t.topRight.y), t.topRight.x, t.topRight.y), this.line("x: " + Math.floor(t.bottomLeft.x) + " y: " + Math.floor(t.bottomLeft.y), t.bottomLeft.x, t.bottomLeft.y), this.line("x: " + Math.floor(t.bottomRight.x) + " y: " + Math.floor(t.bottomRight.y), t.bottomRight.x, t.bottomRight.y)), this.stop()); }, renderSoundInfo: function (t, e, i, s) { null != this.context && ((s = s || "rgb(255,255,255)"), this.start(e, i, s), this.line("Sound: " + t.key + " Locked: " + t.game.sound.touchLocked), this.line("Is Ready?: " + this.game.cache.isSoundReady(t.key) + " Pending Playback: " + t.pendingPlayback), this.line("Decoded: " + t.isDecoded + " Decoding: " + t.isDecoding), this.line("Total Duration: " + t.totalDuration + " Playing: " + t.isPlaying), this.line("Time: " + t.currentTime), this.line("Volume: " + t.volume + " Muted: " + t.mute), this.line("WebAudio: " + t.usingWebAudio + " Audio: " + t.usingAudioTag), "" !== t.currentMarker && (this.line("Marker: " + t.currentMarker + " Duration: " + t.duration), this.line("Start: " + t.markers[t.currentMarker].start + " Stop: " + t.markers[t.currentMarker].stop), this.line("Position: " + t.position)), this.stop()); }, renderCameraInfo: function (t, e, i, s) { null != this.context && ((s = s || "rgb(255,255,255)"), this.start(e, i, s), this.line("Camera (" + t.width + " x " + t.height + ")"), this.line("X: " + t.x + " Y: " + t.y), this.line("Bounds x: " + t.bounds.x + " Y: " + t.bounds.y + " w: " + t.bounds.width + " h: " + t.bounds.height), this.line("View x: " + t.view.x + " Y: " + t.view.y + " w: " + t.view.width + " h: " + t.view.height), this.stop()); }, renderPointer: function (t, e, i, s, n) { null != this.context && null != t && ("undefined" == typeof e && (e = !1), (i = i || "rgba(0,255,0,0.5)"), (s = s || "rgba(255,0,0,0.5)"), (n = n || "rgb(255,255,255)"), (e !== !0 || t.isUp !== !0) && (this.start(t.x, t.y - 100, n), this.context.beginPath(), this.context.arc(t.x, t.y, t.circle.radius, 0, 2 * Math.PI), (this.context.fillStyle = t.active ? i : s), this.context.fill(), this.context.closePath(), this.context.beginPath(), this.context.moveTo(t.positionDown.x, t.positionDown.y), this.context.lineTo(t.position.x, t.position.y), (this.context.lineWidth = 2), this.context.stroke(), this.context.closePath(), this.line("ID: " + t.id + " Active: " + t.active), this.line("World X: " + t.worldX + " World Y: " + t.worldY), this.line("Screen X: " + t.x + " Screen Y: " + t.y), this.line("Duration: " + t.duration + " ms"), this.stop())); }, renderSpriteInputInfo: function (t, e, i, s) { (s = s || "rgb(255,255,255)"), this.start(e, i, s), this.line("Sprite Input: (" + t.width + " x " + t.height + ")"), this.line("x: " + t.input.pointerX().toFixed(1) + " y: " + t.input.pointerY().toFixed(1)), this.line("over: " + t.input.pointerOver() + " duration: " + t.input.overDuration().toFixed(0)), this.line("down: " + t.input.pointerDown() + " duration: " + t.input.downDuration().toFixed(0)), this.line("just over: " + t.input.justOver() + " just out: " + t.input.justOut()), this.stop(); }, renderBodyInfo: function (t, e, i, s) { (s = s || "rgb(255,255,255)"), this.start(e, i, s, 210), this.splitline("x: " + t.body.x.toFixed(2), "y: " + t.body.y.toFixed(2), "width: " + t.width, "height: " + t.height), this.splitline("speed: " + t.body.speed.toFixed(2), "angle: " + t.body.angle.toFixed(2), "linear damping: " + t.body.linearDamping), this.splitline("blocked left: " + t.body.blocked.left, "right: " + t.body.blocked.right, "up: " + t.body.blocked.up, "down: " + t.body.blocked.down), this.splitline("touching left: " + t.body.touching.left, "right: " + t.body.touching.right, "up: " + t.body.touching.up, "down: " + t.body.touching.down), this.splitline("gravity x: " + t.body.gravity.x, "y: " + t.body.gravity.y, "world gravity x: " + this.game.physics.gravity.x, "y: " + this.game.physics.gravity.y), this.splitline("acceleration x: " + t.body.acceleration.x.toFixed(2), "y: " + t.body.acceleration.y.toFixed(2)), this.splitline("velocity x: " + t.body.velocity.x.toFixed(2), "y: " + t.body.velocity.y.toFixed(2), "deltaX: " + t.body.deltaX().toFixed(2), "deltaY: " + t.body.deltaY().toFixed(2)), this.splitline("bounce x: " + t.body.bounce.x.toFixed(2), "y: " + t.body.bounce.y.toFixed(2)), this.stop(); }, renderInputInfo: function (t, e, i) { null != this.context && ((i = i || "rgb(255,255,0)"), this.start(t, e, i), this.line("Input"), this.line("X: " + this.game.input.x + " Y: " + this.game.input.y), this.line("World X: " + this.game.input.worldX + " World Y: " + this.game.input.worldY), this.line("Scale X: " + this.game.input.scale.x.toFixed(1) + " Scale Y: " + this.game.input.scale.x.toFixed(1)), this.line("Screen X: " + this.game.input.activePointer.screenX + " Screen Y: " + this.game.input.activePointer.screenY), this.stop()); }, renderSpriteInfo: function (t, e, i, s) { null != this.context && ((s = s || "rgb(255, 255, 255)"), this.start(e, i, s), this.line("Sprite: (" + t.width + " x " + t.height + ") anchor: " + t.anchor.x + " x " + t.anchor.y), this.line("x: " + t.x.toFixed(1) + " y: " + t.y.toFixed(1)), this.line("angle: " + t.angle.toFixed(1) + " rotation: " + t.rotation.toFixed(1)), this.line("visible: " + t.visible + " in camera: " + t.inCamera), this.line("body x: " + t.body.x.toFixed(1) + " y: " + t.body.y.toFixed(1)), this.line("id: " + t._id), this.line("scale x: " + t.worldTransform[0]), this.line("scale y: " + t.worldTransform[4]), this.line("tx: " + t.worldTransform[2]), this.line("ty: " + t.worldTransform[5]), this.line("skew x: " + t.worldTransform[3]), this.line("skew y: " + t.worldTransform[1]), this.line("sdx: " + t.deltaX), this.line("sdy: " + t.deltaY), this.stop()); }, renderSpriteCoords: function (t, e, i, s) { null != this.context && ((s = s || "rgb(255, 255, 255)"), this.start(e, i, s, 100), t.name && this.line(t.name), this.splitline("x:", t.x.toFixed(2), "y:", t.y.toFixed(2)), this.splitline("pos x:", t.position.x.toFixed(2), "pos y:", t.position.y.toFixed(2)), this.splitline("world x:", t.world.x.toFixed(2), "world y:", t.world.y.toFixed(2)), this.stop()); }, renderLine: function (t, e) { null != this.context && ((e = e || "rgb(255, 255, 255)"), this.start(0, 0, e), (this.context.lineWidth = 1), this.context.beginPath(), this.context.moveTo(t.start.x + 0.5, t.start.y + 0.5), this.context.lineTo(t.end.x + 0.5, t.end.y + 0.5), this.context.closePath(), this.context.stroke(), this.stop()); }, renderLineInfo: function (t, e, i, s) { null != this.context && ((s = s || "rgb(255, 255, 255)"), this.start(e, i, s, 80), this.splitline("start.x:", t.start.x.toFixed(2), "start.y:", t.start.y.toFixed(2)), this.splitline("end.x:", t.end.x.toFixed(2), "end.y:", t.end.y.toFixed(2)), this.splitline("length:", t.length.toFixed(2), "angle:", t.angle), this.stop()); }, renderPointInfo: function (t, e, i, s) { null != this.context && ((s = s || "rgb(255, 255, 255)"), this.start(e, i, s), this.line("px: " + t.x.toFixed(1) + " py: " + t.y.toFixed(1)), this.stop()); }, renderSpriteBody: function (t, e, i) { null != this.context && ((e = e || "rgb(255,0,255)"), "undefined" == typeof i && (i = !1), this.start(0, 0, e), i ? ((this.context.fillStyle = e), this.context.fillRect(t.body.left, t.body.top, t.body.width, t.body.height)) : ((this.context.strokeStyle = e), this.context.strokeRect(t.body.left, t.body.top, t.body.width, t.body.height), this.context.stroke()), this.stop()); }, renderSpriteBounds: function (t, e, i) { null != this.context && ((e = e || "rgb(255,0,255)"), "undefined" == typeof i && (i = !1), this.start(0, 0, e), i ? ((this.context.fillStyle = e), this.context.fillRect(t.bounds.x, t.bounds.y, t.bounds.width, t.bounds.height)) : ((this.context.strokeStyle = e), this.context.strokeRect(t.bounds.x, t.bounds.y, t.bounds.width, t.bounds.height), this.context.stroke()), this.stop()); }, renderPixel: function (t, e, i) { null != this.context && ((i = i || "rgba(0,255,0,1)"), this.start(), (this.context.fillStyle = i), this.context.fillRect(t, e, 2, 2), this.stop()); }, renderPoint: function (t, e) { null != this.context && ((e = e || "rgba(0,255,0,1)"), this.start(), (this.context.fillStyle = e), this.context.fillRect(t.x, t.y, 4, 4), this.stop()); }, renderRectangle: function (t, e) { null != this.context && ((e = e || "rgba(0,255,0,0.3)"), this.start(), (this.context.fillStyle = e), this.context.fillRect(t.x, t.y, t.width, t.height), this.stop()); }, renderCircle: function (t, e) { null != this.context && ((e = e || "rgba(0,255,0,0.3)"), this.start(), this.context.beginPath(), (this.context.fillStyle = e), this.context.arc(t.x, t.y, t.radius, 0, 2 * Math.PI, !1), this.context.fill(), this.context.closePath(), this.stop()); }, renderText: function (t, e, i, s, n) { null != this.context && ((s = s || "rgb(255,255,255)"), (n = n || "16px Courier"), this.start(), (this.context.font = n), (this.context.fillStyle = s), this.context.fillText(t, e, i), this.stop()); }, renderPhysicsBody: function (t, e, s) { if (null !== this.context || null !== s) { e = e || "rgb(255,255,255)"; var n = t.x - this.game.camera.x, r = t.y - this.game.camera.y; if (t.type === i.Physics.Arcade.CIRCLE) this.start(0, 0, e), this.context.beginPath(), (this.context.strokeStyle = e), this.context.arc(n, r, t.shape.r, 0, 2 * Math.PI, !1), this.context.stroke(), this.context.closePath(), this.stop(); else { var o = t.polygon.points; this.start(0, 0, e), this.context.beginPath(), this.context.moveTo(n + o[0].x, r + o[0].y); for (var a = 1; a < o.length; a++) this.context.lineTo(n + o[a].x, r + o[a].y); this.context.closePath(), (this.context.strokeStyle = e), this.context.stroke(), (this.context.fillStyle = "rgb(255,0,0)"), this.context.fillRect(n + o[0].x - 2, r + o[0].y - 2, 5, 5); for (var a = 1; a < o.length; a++) (this.context.fillStyle = "rgb(255," + 40 * a + ",0)"), this.context.fillRect(n + o[a].x - 2, r + o[a].y - 2, 5, 5); this.stop(); } } }, renderPolygon: function (t, e, i) { if (null !== this.context || null !== i) { e = e || "rgb(255,255,255)"; var s = t.points, n = t.pos.x, r = t.pos.y; this.start(0, 0, e), this.context.beginPath(), this.context.moveTo(n + s[0].x, r + s[0].y); for (var o = 1; o < s.length; o++) this.context.lineTo(n + s[o].x, r + s[o].y); this.context.closePath(), (this.context.strokeStyle = e), this.context.stroke(), this.stop(); } }, }), (i.Utils.Debug.prototype.constructor = i.Utils.Debug), (i.Color = { getColor32: function (t, e, i, s) { return (t << 24) | (e << 16) | (i << 8) | s; }, getColor: function (t, e, i) { return (t << 16) | (e << 8) | i; }, hexToRGB: function (t) { var e = "#" == t.charAt(0) ? t.substring(1, 7) : t; 3 == e.length && (e = e.charAt(0) + e.charAt(0) + e.charAt(1) + e.charAt(1) + e.charAt(2) + e.charAt(2)); var i = parseInt(e.substring(0, 2), 16), s = parseInt(e.substring(2, 4), 16), n = parseInt(e.substring(4, 6), 16); return (i << 16) | (s << 8) | n; }, getColorInfo: function (t) { var e = i.Color.getRGB(t), s = i.Color.RGBtoHSV(t), n = i.Color.RGBtoHexstring(t) + "\n"; return (n = n.concat("Alpha: " + e.alpha + " Red: " + e.red + " Green: " + e.green + " Blue: " + e.blue) + "\n"), (n = n.concat("Hue: " + s.hue + " Saturation: " + s.saturation + " Lightnes: " + s.lightness)); }, RGBtoHexstring: function (t) { var e = i.Color.getRGB(t); return "0x" + i.Color.colorToHexstring(e.alpha) + i.Color.colorToHexstring(e.red) + i.Color.colorToHexstring(e.green) + i.Color.colorToHexstring(e.blue); }, RGBtoWebstring: function (t) { var e = i.Color.getRGB(t); return "#" + i.Color.colorToHexstring(e.red) + i.Color.colorToHexstring(e.green) + i.Color.colorToHexstring(e.blue); }, colorToHexstring: function (t) { var e = "0123456789ABCDEF", i = t % 16, s = (t - i) / 16, n = e.charAt(s) + e.charAt(i); return n; }, interpolateColor: function (t, e, s, n, r) { "undefined" == typeof r && (r = 255); var o = i.Color.getRGB(t), a = i.Color.getRGB(e), h = ((a.red - o.red) * n) / s + o.red, l = ((a.green - o.green) * n) / s + o.green, c = ((a.blue - o.blue) * n) / s + o.blue; return i.Color.getColor32(r, h, l, c); }, interpolateColorWithRGB: function (t, e, s, n, r, o) { var a = i.Color.getRGB(t), h = ((e - a.red) * o) / r + a.red, l = ((s - a.green) * o) / r + a.green, c = ((n - a.blue) * o) / r + a.blue; return i.Color.getColor(h, l, c); }, interpolateRGB: function (t, e, s, n, r, o, a, h) { var l = ((n - t) * h) / a + t, c = ((r - e) * h) / a + e, u = ((o - s) * h) / a + s; return i.Color.getColor(l, c, u); }, getRandomColor: function (t, e, s) { if (("undefined" == typeof t && (t = 0), "undefined" == typeof e && (e = 255), "undefined" == typeof s && (s = 255), e > 255)) return i.Color.getColor(255, 255, 255); if (t > e) return i.Color.getColor(255, 255, 255); var n = t + Math.round(Math.random() * (e - t)), r = t + Math.round(Math.random() * (e - t)), o = t + Math.round(Math.random() * (e - t)); return i.Color.getColor32(s, n, r, o); }, getRGB: function (t) { return { alpha: t >>> 24, red: (t >> 16) & 255, green: (t >> 8) & 255, blue: 255 & t }; }, getWebRGB: function (t) { var e = (t >>> 24) / 255, i = (t >> 16) & 255, s = (t >> 8) & 255, n = 255 & t; return "rgba(" + i.toString() + "," + s.toString() + "," + n.toString() + "," + e.toString() + ")"; }, getAlpha: function (t) { return t >>> 24; }, getAlphaFloat: function (t) { return (t >>> 24) / 255; }, getRed: function (t) { return (t >> 16) & 255; }, getGreen: function (t) { return (t >> 8) & 255; }, getBlue: function (t) { return 255 & t; }, }), (function (t, e) { "use strict"; "function" == typeof define && define.amd ? define(e) : "object" == typeof exports ? (module.exports = e()) : (t.SAT = e()); })(this, function () { "use strict"; function t(t, e) { (this.x = t || 0), (this.y = e || 0); } function e(e, i) { (this.pos = e || new t()), (this.r = i || 0); } function i(e, i) { (this.pos = e || new t()), (this.points = i || []), this.recalc(); } function s(e, i, s) { (this.pos = e || new t()), (this.w = i || 0), (this.h = s || 0); } function n() { (this.a = null), (this.b = null), (this.overlapN = new t()), (this.overlapV = new t()), this.clear(); } function r(t, e, i) { for (var s = Number.MAX_VALUE, n = -Number.MAX_VALUE, r = t.length, o = 0; r > o; o++) { var a = t[o].dot(e); s > a && (s = a), a > n && (n = a); } (i[0] = s), (i[1] = n); } function o(t, e, i, s, n, o) { var a = g.pop(), h = g.pop(), l = p.pop().copy(e).sub(t), c = l.dot(n); if ((r(i, n, a), r(s, n, h), (h[0] += c), (h[1] += c), a[0] > h[1] || h[0] > a[1])) return p.push(l), g.push(a), g.push(h), !0; if (o) { var u = 0; if (a[0] < h[0]) if (((o.aInB = !1), a[1] < h[1])) (u = a[1] - h[0]), (o.bInA = !1); else { var d = a[1] - h[0], f = h[1] - a[0]; u = f > d ? d : -f; } else if (((o.bInA = !1), a[1] > h[1])) (u = a[0] - h[1]), (o.aInB = !1); else { var d = a[1] - h[0], f = h[1] - a[0]; u = f > d ? d : -f; } var m = Math.abs(u); m < o.overlap && ((o.overlap = m), o.overlapN.copy(n), 0 > u && o.overlapN.reverse()); } return p.push(l), g.push(a), g.push(h), !1; } function a(t, e) { var i = t.len2(), s = e.dot(t); return 0 > s ? m : s > i ? _ : y; } function h(t, e, i) { var s = p.pop().copy(e.pos).sub(t.pos), n = t.r + e.r, r = n * n, o = s.len2(); if (o > r) return p.push(s), !1; if (i) { var a = Math.sqrt(o); (i.a = t), (i.b = e), (i.overlap = n - a), i.overlapN.copy(s.normalize()), i.overlapV.copy(s).scale(i.overlap), (i.aInB = t.r <= e.r && a <= e.r - t.r), (i.bInA = e.r <= t.r && a <= t.r - e.r); } return p.push(s), !0; } function l(t, e, i) { for (var s = p.pop().copy(e.pos).sub(t.pos), n = e.r, r = n * n, o = t.points, h = o.length, l = p.pop(), c = p.pop(), u = 0; h > u; u++) { var d = u === h - 1 ? 0 : u + 1, f = 0 === u ? h - 1 : u - 1, g = 0, y = null; l.copy(t.edges[u]), c.copy(s).sub(o[u]), i && c.len2() > r && (i.aInB = !1); var x = a(l, c); if (x === m) { l.copy(t.edges[f]); var v = p.pop().copy(s).sub(o[f]); if (((x = a(l, v)), x === _)) { var b = c.len(); if (b > n) return p.push(s), p.push(l), p.push(c), p.push(v), !1; i && ((i.bInA = !1), (y = c.normalize()), (g = n - b)); } p.push(v); } else if (x === _) { if ((l.copy(t.edges[d]), c.copy(s).sub(o[d]), (x = a(l, c)), x === m)) { var b = c.len(); if (b > n) return p.push(s), p.push(l), p.push(c), !1; i && ((i.bInA = !1), (y = c.normalize()), (g = n - b)); } } else { var w = l.perp().normalize(), b = c.dot(w), T = Math.abs(b); if (b > 0 && T > n) return p.push(s), p.push(w), p.push(c), !1; i && ((y = w), (g = n - b), (b >= 0 || 2 * n > g) && (i.bInA = !1)); } y && i && Math.abs(g) < Math.abs(i.overlap) && ((i.overlap = g), i.overlapN.copy(y)); } return i && ((i.a = t), (i.b = e), i.overlapV.copy(i.overlapN).scale(i.overlap)), p.push(s), p.push(l), p.push(c), !0; } function c(t, e, i) { var s = l(e, t, i); if (s && i) { var n = i.a, r = i.aInB; i.overlapN.reverse(), i.overlapV.reverse(), (i.a = i.b), (i.b = n), (i.aInB = i.bInA), (i.bInA = r); } return s; } function u(t, e, i) { for (var s = t.points, n = s.length, r = e.points, a = r.length, h = 0; n > h; h++) if (o(t.pos, e.pos, s, r, t.normals[h], i)) return !1; for (var h = 0; a > h; h++) if (o(t.pos, e.pos, s, r, e.normals[h], i)) return !1; return i && ((i.a = t), (i.b = e), i.overlapV.copy(i.overlapN).scale(i.overlap)), !0; } var d = {}; (d.Vector = t), (d.V = t), (t.prototype.copy = t.prototype.copy = function (t) { return (this.x = t.x), (this.y = t.y), this; }), (t.prototype.perp = t.prototype.perp = function () { var t = this.x; return (this.x = this.y), (this.y = -t), this; }), (t.prototype.rotate = t.prototype.rotate = function (t) { var e = this.x, i = this.y; return (this.x = e * Math.cos(t) - i * Math.sin(t)), (this.y = e * Math.sin(t) + i * Math.cos(t)), this; }), (t.prototype.rotatePrecalc = t.prototype.rotatePrecalc = function (t, e) { var i = this.x, s = this.y; return (this.x = i * e - s * t), (this.y = i * t + s * e), this; }), (t.prototype.reverse = t.prototype.reverse = function () { return (this.x = -this.x), (this.y = -this.y), this; }), (t.prototype.normalize = t.prototype.normalize = function () { var t = this.len(); return t > 0 && ((this.x = this.x / t), (this.y = this.y / t)), this; }), (t.prototype.add = t.prototype.add = function (t) { return (this.x += t.x), (this.y += t.y), this; }), (t.prototype.sub = t.prototype.sub = function (t) { return (this.x -= t.x), (this.y -= t.y), this; }), (t.prototype.scale = t.prototype.scale = function (t, e) { return (this.x *= t), (this.y *= e || t), this; }), (t.prototype.project = t.prototype.project = function (t) { var e = this.dot(t) / t.len2(); return (this.x = e * t.x), (this.y = e * t.y), this; }), (t.prototype.projectN = t.prototype.projectN = function (t) { var e = this.dot(t); return (this.x = e * t.x), (this.y = e * t.y), this; }), (t.prototype.reflect = t.prototype.reflect = function (t) { var e = this.x, i = this.y; return this.project(t).scale(2), (this.x -= e), (this.y -= i), this; }), (t.prototype.reflectN = t.prototype.reflectN = function (t) { var e = this.x, i = this.y; return this.projectN(t).scale(2), (this.x -= e), (this.y -= i), this; }), (t.prototype.dot = t.prototype.dot = function (t) { return this.x * t.x + this.y * t.y; }), (t.prototype.len2 = t.prototype.len2 = function () { return this.dot(this); }), (t.prototype.len = t.prototype.len = function () { return Math.sqrt(this.len2()); }), (d.Circle = e), (d.Polygon = i), (i.prototype.recalc = i.prototype.recalc = function () { (this.edges = []), (this.normals = []); for (var e = this.points, i = e.length, s = 0; i > s; s++) { var n = e[s], r = i - 1 > s ? e[s + 1] : e[0], o = new t().copy(r).sub(n), a = new t().copy(o).perp().normalize(); this.edges.push(o), this.normals.push(a); } return this; }), (i.prototype.rotate = i.prototype.rotate = function (t) { var e, i = this.points, s = this.edges, n = this.normals, r = i.length, o = Math.cos(t), a = Math.sin(t); for (e = 0; r > e; e++) i[e].rotatePrecalc(a, o), s[e].rotatePrecalc(a, o), n[e].rotatePrecalc(a, o); return this; }), (i.prototype.scale = i.prototype.scale = function (t, e) { var i, s = this.points, n = this.edges, r = this.normals, o = s.length; for (i = 0; o > i; i++) s[i].scale(t, e), n[i].scale(t, e), r[i].scale(t, e); return this; }), (i.prototype.translate = i.prototype.translate = function (t, e) { var i, s = this.points, n = s.length; for (i = 0; n > i; i++) (s[i].x += t), (s[i].y += e); return this; }), (d.Box = s), (s.prototype.toPolygon = s.prototype.toPolygon = function () { var e = this.pos, s = this.w, n = this.h; return new i(new t(e.x, e.y), [new t(), new t(s, 0), new t(s, n), new t(0, n)]); }), (d.Response = n), (n.prototype.clear = n.prototype.clear = function () { return (this.aInB = !0), (this.bInA = !0), (this.overlap = Number.MAX_VALUE), this; }); for (var p = [], f = 0; 10 > f; f++) p.push(new t()); for (var g = [], f = 0; 5 > f; f++) g.push([]); var m = -1, y = 0, _ = 1; return (d.testCircleCircle = h), (d.testPolygonCircle = l), (d.testCirclePolygon = c), (d.testPolygonPolygon = u), d; }), (i.Physics = {}), (i.Physics.Arcade = function (t) { (this.game = t), (this.gravity = new i.Point()), (this.worldLeft = null), (this.worldRight = null), (this.worldTop = null), (this.worldBottom = null), (this.worldPolys = [null, null, null, null]), (this.quadTree = new i.QuadTree(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, this.maxObjects, this.maxLevels)), (this.maxObjects = 10), (this.maxLevels = 4), (this._mapData = []), (this._mapTiles = 0), (this._result = !1), (this._total = 0), (this._angle = 0), (this._drag = 0), (this._dx = 0), (this._dy = 0), (this._p = new i.Point(0, 0)), (this._intersection = [0, 0, 0, 0]), (this._gravityX = 0), (this._gravityY = 0), (this._response = new SAT.Response()), this.setBoundsToWorld(!0, !0, !0, !0); }), (i.Physics.Arcade.RECT = 0), (i.Physics.Arcade.CIRCLE = 1), (i.Physics.Arcade.POLYGON = 2), (i.Physics.Arcade.prototype = { checkBounds: function (t) { if (!t.collideWorldBounds || (!this.worldLeft && !this.worldRight && !this.worldTop && !this.worldBottom)) return !1; this._response.clear(); var e = SAT.testPolygonPolygon, s = t.polygon, n = !1; return ( t.type === i.Physics.Arcade.CIRCLE && ((e = SAT.testPolygonCircle), (s = t.shape)), this.worldLeft && e(this.worldPolys[0], s, this._response) ? ((t.blocked.left = !0), s.pos.add(this._response.overlapV), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (n = !0)) : this.worldRight && e(this.worldPolys[1], s, this._response) && ((t.blocked.right = !0), s.pos.add(this._response.overlapV), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (n = !0)), this._response.clear(), this.worldTop && e(this.worldPolys[2], s, this._response) ? ((t.blocked.up = !0), s.pos.add(this._response.overlapV), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (n = !0)) : this.worldBottom && e(this.worldPolys[3], s, this._response) && ((t.blocked.down = !0), s.pos.add(this._response.overlapV), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (n = !0)), n ); }, setBoundsToWorld: function (t, e, i, s) { this.setBounds(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, t, e, i, s); }, setBounds: function (t, e, i, s, n, r, o, a) { "undefined" == typeof n && (n = !0), "undefined" == typeof r && (r = !0), "undefined" == typeof o && (o = !0), "undefined" == typeof a && (a = !0); var h = 100; n ? ((this.worldLeft = new SAT.Box(new SAT.Vector(t - h, e), h, s)), (this.worldPolys[0] = this.worldLeft.toPolygon())) : ((this.worldLeft = null), (this.worldPolys[0] = null)), r ? ((this.worldRight = new SAT.Box(new SAT.Vector(t + i, e), h, s)), (this.worldPolys[1] = this.worldRight.toPolygon())) : ((this.worldRight = null), (this.worldPolys[1] = null)), o ? ((this.worldTop = new SAT.Box(new SAT.Vector(t, e - h), i, h)), (this.worldPolys[2] = this.worldTop.toPolygon())) : ((this.worldTop = null), (this.worldPolys[2] = null)), a ? ((this.worldBottom = new SAT.Box(new SAT.Vector(t, e + s), i, h)), (this.worldPolys[3] = this.worldBottom.toPolygon())) : ((this.worldBottom = null), (this.worldPolys[3] = null)); }, updateMotion: function (t) { return ( t.allowGravity ? ((this._gravityX = this.gravity.x + t.gravity.x), (this._gravityY = this.gravity.y + t.gravity.y)) : ((this._gravityX = t.gravity.x), (this._gravityY = t.gravity.y)), ((this._gravityX < 0 && t.blocked.left) || (this._gravityX > 0 && t.blocked.right)) && (this._gravityX = 0), ((this._gravityY < 0 && t.blocked.up) || (this._gravityY > 0 && t.blocked.down)) && (this._gravityY = 0), t.allowRotation && ((this._velocityDelta = t.angularAcceleration * this.game.time.physicsElapsed), 0 !== t.angularDrag && 0 === t.angularAcceleration && ((this._drag = t.angularDrag * this.game.time.physicsElapsed), t.angularVelocity > 0 ? (t.angularVelocity -= this._drag) : t.angularVelocity < 0 && (t.angularVelocity += this._drag)), (t.rotation += this.game.time.physicsElapsed * (t.angularVelocity + this._velocityDelta / 2)), (t.angularVelocity += this._velocityDelta), t.angularVelocity > t.maxAngular ? (t.angularVelocity = t.maxAngular) : t.angularVelocity < -t.maxAngular && (t.angularVelocity = -t.maxAngular)), this._p.setTo((t.acceleration.x + this._gravityX) * this.game.time.physicsElapsed, (t.acceleration.y + this._gravityY) * this.game.time.physicsElapsed), this._p ); }, overlap: function (t, e, i, s, n) { if (((i = i || null), (s = s || null), (n = n || i), (this._result = !1), (this._total = 0), Array.isArray(e))) for (var r = 0, o = e.length; o > r; r++) this.collideHandler(t, e[r], i, s, n, !0); else this.collideHandler(t, e, i, s, n, !0); return this._total > 0; }, collide: function (t, e, i, s, n) { if (((i = i || null), (s = s || null), (n = n || i), (this._result = !1), (this._total = 0), Array.isArray(e))) for (var r = 0, o = e.length; o > r; r++) this.collideHandler(t, e[r], i, s, n, !1); else this.collideHandler(t, e, i, s, n, !1); return this._total > 0; }, collideHandler: function (t, e, s, n, r, o) { return "undefined" != typeof e || (t.type !== i.GROUP && t.type !== i.EMITTER) ? void ( t && e && t.exists && e.exists && (t.type == i.SPRITE || t.type == i.TILESPRITE ? e.type == i.SPRITE || e.type == i.TILESPRITE ? this.collideSpriteVsSprite(t, e, s, n, r, o) : e.type == i.GROUP || e.type == i.EMITTER ? this.collideSpriteVsGroup(t, e, s, n, r, o) : e.type == i.TILEMAPLAYER && this.collideSpriteVsTilemapLayer(t, e, s, n, r) : t.type == i.GROUP ? e.type == i.SPRITE || e.type == i.TILESPRITE ? this.collideSpriteVsGroup(e, t, s, n, r, o) : e.type == i.GROUP || e.type == i.EMITTER ? this.collideGroupVsGroup(t, e, s, n, r, o) : e.type == i.TILEMAPLAYER && this.collideGroupVsTilemapLayer(t, e, s, n, r) : t.type == i.TILEMAPLAYER ? e.type == i.SPRITE || e.type == i.TILESPRITE ? this.collideSpriteVsTilemapLayer(e, t, s, n, r) : (e.type == i.GROUP || e.type == i.EMITTER) && this.collideGroupVsTilemapLayer(e, t, s, n, r) : t.type == i.EMITTER && (e.type == i.SPRITE || e.type == i.TILESPRITE ? this.collideSpriteVsGroup(e, t, s, n, r, o) : e.type == i.GROUP || e.type == i.EMITTER ? this.collideGroupVsGroup(t, e, s, n, r, o) : e.type == i.TILEMAPLAYER && this.collideGroupVsTilemapLayer(t, e, s, n, r))) ) : void this.collideGroupVsSelf(t, s, n, r, o); }, collideSpriteVsSprite: function (t, e, i, s, n, r) { this.separate(t.body, e.body, s, n, r) && (i && i.call(n, t, e), this._total++); }, collideSpriteVsGroup: function (t, e, s, n, r, o) { if (0 !== e.length) { this.quadTree.clear(), (this.quadTree = new i.QuadTree(this.game.world.bounds.x, this.game.world.bounds.y, this.game.world.bounds.width, this.game.world.bounds.height, this.maxObjects, this.maxLevels)), this.quadTree.populate(e), (this._potentials = this.quadTree.retrieve(t)); for (var a = 0, h = this._potentials.length; h > a; a++) this.separate(t.body, this._potentials[a], n, r, o) && (s && s.call(r, t, this._potentials[a].sprite), this._total++); } }, collideGroupVsSelf: function (t, e, i, s, n) { if (0 !== t.length) for (var r = t._container.children.length, o = 0; r > o; o++) for (var a = o + 1; r >= a; a++) t._container.children[o] && t._container.children[a] && t._container.children[o].exists && t._container.children[a].exists && this.collideSpriteVsSprite(t._container.children[o], t._container.children[a], e, i, s, n); }, collideGroupVsGroup: function (t, e, i, s, n, r) { if (0 !== t.length && 0 !== e.length && t._container.first._iNext) { var o = t._container.first._iNext; do o.exists && this.collideSpriteVsGroup(o, e, i, s, n, r), (o = o._iNext); while (o != t._container.last._iNext); } }, collideSpriteVsTilemapLayer: function (t, e, i, s, n) { if (((this._mapData = e.getTiles(t.body.left, t.body.top, t.body.width, t.body.height, !0)), 0 !== this._mapData.length)) if (this._mapData.length > 1) this.separateTiles(t.body, this._mapData); else { var r = 0; this.separateTile(t.body, this._mapData[r]) && (s ? s.call(n, t, this._mapData[r]) && (this._total++, i && i.call(n, t, this._mapData[r])) : (this._total++, i && i.call(n, t, this._mapData[r]))); } }, collideGroupVsTilemapLayer: function (t, e, i, s, n) { if (0 !== t.length && t._container.first._iNext) { var r = t._container.first._iNext; do r.exists && this.collideSpriteVsTilemapLayer(r, e, i, s, n), (r = r._iNext); while (r != t._container.last._iNext); } }, separate: function (t, e, i, s, n) { return t === e || this.intersects(t, e) === !1 ? !1 : i && i.call(s, t.sprite, e.sprite) === !1 ? !1 : (this._response.clear(), n ? t.overlap(e, this._response) : t.overlap(e, this._response) ? t.separate(e, this._response) : !1); }, intersects: function (t, e) { var i = !1; (t.width <= 0 || t.height <= 0 || e.width <= 0 || e.height <= 0) && (i = !1), (i = !(t.right < e.left || t.bottom < e.top || t.left > e.right || t.top > e.bottom)), !i && t.inContact(e) && t.removeContact(e); }, tileIntersects: function (t, e) { return t.width <= 0 || t.height <= 0 || e.width <= 0 || e.height <= 0 ? ((this._intersection[4] = 0), this._intersection) : t.right < e.x || t.bottom < e.y || t.left > e.right || t.top > e.bottom ? ((this._intersection[4] = 0), this._intersection) : ((this._intersection[0] = Math.max(t.left, e.x)), (this._intersection[1] = Math.max(t.top, e.y)), (this._intersection[2] = Math.min(t.right, e.right) - this._intersection[0]), (this._intersection[3] = Math.min(t.bottom, e.bottom) - this._intersection[1]), (this._intersection[4] = 1), this._intersection); }, separateTiles: function (t, e) { for (var i, s = !1, n = 0; n < e.length; n++) (i = e[n]), this.separateTile(t, i) && (s = !0); return s; }, separateTile: function (t, e) { if (((this._intersection = this.tileIntersects(t, e)), 0 === this._intersection[4] || 0 === this._intersection[2] || 0 === this._intersection[3])) return !1; if (e.tile.callback || e.layer.callbacks[e.tile.index]) { if (e.tile.callback && e.tile.callback.call(e.tile.callbackContext, t.sprite, e) === !1) return !1; if (e.layer.callbacks[e.tile.index] && e.layer.callbacks[e.tile.index].callback.call(e.layer.callbacks[e.tile.index].callbackContext, t.sprite, e) === !1) return !1; } (t.overlapX = 0), (t.overlapY = 0); var i = !1; return ( t.deltaX() < 0 && t.checkCollision.left && e.tile.faceRight && !t.blocked.left ? ((t.overlapX = t.left - e.right), t.overlapX < 0 ? (i = !0) : (t.overlapX = 0)) : t.deltaX() > 0 && t.checkCollision.right && e.tile.faceLeft && !t.blocked.right && ((t.overlapX = t.right - e.x), t.overlapX > 0 ? (i = !0) : (t.overlapX = 0)), t.deltaY() < 0 && t.checkCollision.up && e.tile.faceBottom && !t.blocked.up ? ((t.overlapY = t.top - e.bottom), t.overlapY < 0 ? (i = !0) : (t.overlapY = 0)) : t.deltaY() > 0 && t.checkCollision.down && e.tile.faceTop && !t.blocked.down && ((t.overlapY = t.bottom - e.y), t.overlapY > 0 ? (i = !0) : (t.overlapY = 0)), 0 !== t.overlapX && 0 !== t.overlapY && (Math.abs(t.overlapX) > Math.abs(t.overlapY) ? (t.overlapX = 0) : (t.overlapY = 0)), i ? this.processTileSeparation(t) : !1 ); }, processTileSeparation: function (t) { return ( t.overlapX < 0 ? ((t.x -= t.overlapX), (t.left -= t.overlapX), (t.right -= t.overlapX), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (t.blocked.left = !0)) : t.overlapX > 0 && ((t.x -= t.overlapX), (t.left -= t.overlapX), (t.right -= t.overlapX), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (t.blocked.right = !0)), t.overlapY < 0 ? ((t.y -= t.overlapY), (t.top -= t.overlapY), (t.bottom -= t.overlapY), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (t.blocked.up = !0)) : t.overlapY > 0 && ((t.y -= t.overlapY), (t.top -= t.overlapY), (t.bottom -= t.overlapY), (t.blocked.x = Math.floor(t.x)), (t.blocked.y = Math.floor(t.y)), (t.blocked.down = !0)), t.reboundCheck(t.overlapX, t.overlapY, !0), !0 ); }, moveToObject: function (t, e, i, s) { return ( "undefined" == typeof i && (i = 60), "undefined" == typeof s && (s = 0), (this._angle = Math.atan2(e.y - t.y, e.x - t.x)), s > 0 && (i = this.distanceBetween(t, e) / (s / 1e3)), (t.body.velocity.x = Math.cos(this._angle) * i), (t.body.velocity.y = Math.sin(this._angle) * i), this._angle ); }, moveToPointer: function (t, e, i, s) { return ( "undefined" == typeof e && (e = 60), (i = i || this.game.input.activePointer), "undefined" == typeof s && (s = 0), (this._angle = this.angleToPointer(t, i)), s > 0 && (e = this.distanceToPointer(t, i) / (s / 1e3)), (t.body.velocity.x = Math.cos(this._angle) * e), (t.body.velocity.y = Math.sin(this._angle) * e), this._angle ); }, moveToXY: function (t, e, i, s, n) { return ( "undefined" == typeof s && (s = 60), "undefined" == typeof n && (n = 0), (this._angle = Math.atan2(i - t.y, e - t.x)), n > 0 && (s = this.distanceToXY(t, e, i) / (n / 1e3)), (t.body.velocity.x = Math.cos(this._angle) * s), (t.body.velocity.y = Math.sin(this._angle) * s), this._angle ); }, velocityFromAngle: function (t, e, s) { return "undefined" == typeof e && (e = 60), (s = s || new i.Point()), s.setTo(Math.cos(this.game.math.degToRad(t)) * e, Math.sin(this.game.math.degToRad(t)) * e); }, velocityFromRotation: function (t, e, s) { return "undefined" == typeof e && (e = 60), (s = s || new i.Point()), s.setTo(Math.cos(t) * e, Math.sin(t) * e); }, accelerationFromRotation: function (t, e, s) { return "undefined" == typeof e && (e = 60), (s = s || new i.Point()), s.setTo(Math.cos(t) * e, Math.sin(t) * e); }, accelerateToObject: function (t, e, i, s, n) { return ( "undefined" == typeof i && (i = 60), "undefined" == typeof s && (s = 1e3), "undefined" == typeof n && (n = 1e3), (this._angle = this.angleBetween(t, e)), t.body.acceleration.setTo(Math.cos(this._angle) * i, Math.sin(this._angle) * i), t.body.maxVelocity.setTo(s, n), this._angle ); }, accelerateToPointer: function (t, e, i, s, n) { return ( "undefined" == typeof i && (i = 60), "undefined" == typeof e && (e = this.game.input.activePointer), "undefined" == typeof s && (s = 1e3), "undefined" == typeof n && (n = 1e3), (this._angle = this.angleToPointer(t, e)), t.body.acceleration.setTo(Math.cos(this._angle) * i, Math.sin(this._angle) * i), t.body.maxVelocity.setTo(s, n), this._angle ); }, accelerateToXY: function (t, e, i, s, n, r) { return ( "undefined" == typeof s && (s = 60), "undefined" == typeof n && (n = 1e3), "undefined" == typeof r && (r = 1e3), (this._angle = this.angleToXY(t, e, i)), t.body.acceleration.setTo(Math.cos(this._angle) * s, Math.sin(this._angle) * s), t.body.maxVelocity.setTo(n, r), this._angle ); }, distanceBetween: function (t, e) { return (this._dx = t.x - e.x), (this._dy = t.y - e.y), Math.sqrt(this._dx * this._dx + this._dy * this._dy); }, distanceToXY: function (t, e, i) { return (this._dx = t.x - e), (this._dy = t.y - i), Math.sqrt(this._dx * this._dx + this._dy * this._dy); }, distanceToPointer: function (t, e) { return (e = e || this.game.input.activePointer), (this._dx = t.x - e.x), (this._dy = t.y - e.y), Math.sqrt(this._dx * this._dx + this._dy * this._dy); }, angleBetween: function (t, e) { return (this._dx = e.x - t.x), (this._dy = e.y - t.y), Math.atan2(this._dy, this._dx); }, angleToXY: function (t, e, i) { return (this._dx = e - t.x), (this._dy = i - t.y), Math.atan2(this._dy, this._dx); }, angleToPointer: function (t, e) { return (e = e || this.game.input.activePointer), (this._dx = e.worldX - t.x), (this._dy = e.worldY - t.y), Math.atan2(this._dy, this._dx); }, }), (i.Physics.Arcade.prototype.constructor = i.Physics.Arcade), (i.Physics.Arcade.Body = function (t) { (this.sprite = t), (this.game = t.game), (this.offset = new i.Point()), (this.preX = t.world.x), (this.preY = t.world.y), (this.preRotation = t.angle), (this.velocity = new i.Point()), (this.acceleration = new i.Point()), (this.speed = 0), (this.angle = 0), (this.gravity = new i.Point()), (this.bounce = new i.Point()), (this.minVelocity = new i.Point()), (this.maxVelocity = new i.Point(1e3, 1e3)), (this.angularVelocity = 0), (this.angularAcceleration = 0), (this.angularDrag = 0), (this.maxAngular = 1e3), (this.mass = 1), (this.linearDamping = 0), (this.checkCollision = { none: !1, any: !0, up: !0, down: !0, left: !0, right: !0 }), (this.touching = { none: !0, up: !1, down: !1, left: !1, right: !1 }), (this.blocked = { x: 0, y: 0, up: !1, down: !1, left: !1, right: !1 }), (this.facing = i.NONE), (this.rebound = !0), (this.immovable = !1), (this.moves = !0), (this.rotation = 0), (this.allowRotation = !0), (this.allowGravity = !0), (this.customSeparateCallback = null), (this.customSeparateContext = null), (this.collideCallback = null), (this.collideCallbackContext = null), (this.collideWorldBounds = !1), (this.type = i.Physics.Arcade.RECT), (this.shape = null), (this.polygon = null), (this.left = 0), (this.right = 0), (this.top = 0), (this.bottom = 0), (this.width = 0), (this.height = 0), (this.contacts = []), (this.overlapX = 0), (this.overlapY = 0), (this._temp = null), (this._dx = 0), (this._dy = 0), (this._sx = t.scale.x), (this._sy = t.scale.y), (this._distances = [0, 0, 0, 0]), (this._vx = 0), (this._vy = 0), this.setRectangle(t.width, t.height, 0, 0), (this.sprite.events.onBeginContact = new i.Signal()), (this.sprite.events.onEndContact = new i.Signal()); }), (i.Physics.Arcade.Body.prototype = { updateScale: function () { this.polygon ? this.polygon.scale(this.sprite.scale.x / this._sx, this.sprite.scale.y / this._sy) : (this.shape.r *= Math.max(this.sprite.scale.x, this.sprite.scale.y)), (this._sx = this.sprite.scale.x), (this._sy = this.sprite.scale.y); }, preUpdate: function () { (this.x = this.sprite.world.x - this.sprite.anchor.x * this.sprite.width + this.offset.x), (this.y = this.sprite.world.y - this.sprite.anchor.y * this.sprite.height + this.offset.y), (this.preX = this.x), (this.preY = this.y), (this.preRotation = this.sprite.angle), (this.rotation = this.preRotation), (this.sprite.scale.x !== this._sx || this.sprite.scale.y !== this._sy) && this.updateScale(), this.checkBlocked(), (this.touching.none = !0), (this.touching.up = !1), (this.touching.down = !1), (this.touching.left = !1), (this.touching.right = !1), this.moves ? ((this._vx !== this.velocity.x || this._vy !== this.velocity.y) && ((this._vx = this.velocity.x), (this._vy = this.velocity.y), (this.speed = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y)), (this.angle = Math.atan2(this.velocity.y, this.velocity.x))), this.game.physics.checkBounds(this) && this.reboundCheck(!0, !0, !0), this.applyDamping(), this.integrateVelocity(), this.updateBounds(), this.checkBlocked()) : this.updateBounds(); }, checkBlocked: function () { (!this.blocked.left && !this.blocked.right) || (Math.floor(this.x) === this.blocked.x && Math.floor(this.y) === this.blocked.y) || ((this.blocked.left = !1), (this.blocked.right = !1)), (!this.blocked.up && !this.blocked.down) || (Math.floor(this.x) === this.blocked.x && Math.floor(this.y) === this.blocked.y) || ((this.blocked.up = !1), (this.blocked.down = !1)); }, updateBounds: function () { this.type === i.Physics.Arcade.CIRCLE ? ((this.left = this.shape.pos.x - this.shape.r), (this.right = this.shape.pos.x + this.shape.r), (this.top = this.shape.pos.y - this.shape.r), (this.bottom = this.shape.pos.y + this.shape.r)) : ((this.left = i.Math.minProperty("x", this.polygon.points) + this.polygon.pos.x), (this.right = i.Math.maxProperty("x", this.polygon.points) + this.polygon.pos.x), (this.top = i.Math.minProperty("y", this.polygon.points) + this.polygon.pos.y), (this.bottom = i.Math.maxProperty("y", this.polygon.points) + this.polygon.pos.y)), (this.width = this.right - this.left), (this.height = this.bottom - this.top); }, applyDamping: function () { this.linearDamping > 0 && this.acceleration.isZero() && (this.speed > this.linearDamping ? (this.speed -= this.linearDamping) : (this.speed = 0), this.speed > 0 && ((this.velocity.x = Math.cos(this.angle) * this.speed), (this.velocity.y = Math.sin(this.angle) * this.speed), (this.speed = Math.sqrt(this.velocity.x * this.velocity.x + this.velocity.y * this.velocity.y)), (this.angle = Math.atan2(this.velocity.y, this.velocity.x)))); }, reboundCheck: function (t, e, i) { if ( t && (i && 0 !== this.bounce.x && (this.blocked.left || this.blocked.right || this.touching.left || this.touching.right) && ((this._vx <= 0 && this.velocity.x > 0) || (this._vx >= 0 && this.velocity.x < 0) || ((this.velocity.x *= -this.bounce.x), (this.angle = Math.atan2(this.velocity.y, this.velocity.x)))), 0 === this.bounce.x || Math.abs(this.velocity.x) < this.minVelocity.x) ) { var s = this.getUpwardForce(); (((this.blocked.left || this.touching.left) && (0 > s || this.velocity.x < 0)) || ((this.blocked.right || this.touching.right) && (s > 0 || this.velocity.x > 0))) && (this.velocity.x = 0); } if ( e && (i && 0 !== this.bounce.y && (this.blocked.up || this.blocked.down || this.touching.up || this.touching.down) && ((this._vy <= 0 && this.velocity.y > 0) || (this._vy >= 0 && this.velocity.y < 0) || ((this.velocity.y *= -this.bounce.y), (this.angle = Math.atan2(this.velocity.y, this.velocity.x)))), 0 === this.bounce.y || Math.abs(this.velocity.y) < this.minVelocity.y) ) { var n = this.getDownwardForce(); (((this.blocked.up || this.touching.up) && (0 > n || this.velocity.y < 0)) || ((this.blocked.down || this.touching.down) && (n > 0 || this.velocity.y > 0))) && (this.velocity.y = 0); } }, getUpwardForce: function () { return this.allowGravity ? this.gravity.x + this.game.physics.gravity.x + this.velocity.x : this.gravity.x + this.velocity.x; }, getDownwardForce: function () { return this.allowGravity ? this.gravity.y + this.game.physics.gravity.y + this.velocity.y : this.gravity.y + this.velocity.y; }, sub: function (t) { (this.x -= t.x), (this.y -= t.y); }, add: function (t) { (this.x += t.x), (this.y += t.y); }, give: function (t, e) { this.add(e.overlapV), this.rebound && (this.processRebound(t), this.reboundCheck(!0, !0, !1), t.reboundCheck(!0, !0, !1)); }, take: function (t, e) { this.sub(e.overlapV), this.rebound && (this.processRebound(t), this.reboundCheck(!0, !0, !1), t.reboundCheck(!0, !0, !1)); }, split: function (t, e) { e.overlapV.scale(0.5), this.sub(e.overlapV), t.add(e.overlapV), this.rebound && (this.exchange(t), this.reboundCheck(!0, !0, !1), t.reboundCheck(!0, !0, !1)); }, exchange: function (t) { if (this.mass === t.mass && this.speed > 0 && t.speed > 0) (this._dx = t.velocity.x), (this._dy = t.velocity.y), (t.velocity.x = this.velocity.x * t.bounce.x), (t.velocity.y = this.velocity.y * t.bounce.x), (this.velocity.x = this._dx * this.bounce.x), (this.velocity.y = this._dy * this.bounce.y); else { var e = Math.sqrt((t.velocity.x * t.velocity.x * t.mass) / this.mass) * (t.velocity.x > 0 ? 1 : -1), i = Math.sqrt((this.velocity.x * this.velocity.x * this.mass) / t.mass) * (this.velocity.x > 0 ? 1 : -1), s = 0.5 * (e + i); (e -= s), (i -= s), (this.velocity.x = e), (t.velocity.x = i), (e = Math.sqrt((t.velocity.y * t.velocity.y * t.mass) / this.mass) * (t.velocity.y > 0 ? 1 : -1)), (i = Math.sqrt((this.velocity.y * this.velocity.y * this.mass) / t.mass) * (this.velocity.y > 0 ? 1 : -1)), (s = 0.5 * (e + i)), (e -= s), (i -= s), (this.velocity.y = e), (t.velocity.y = i); } }, processRebound: function (t) { (this._vx <= 0 && this.velocity.x > 0) || (this._vx >= 0 && this.velocity.x < 0) || (this.velocity.x = t.velocity.x - this.velocity.x * this.bounce.x), (this._vy <= 0 && this.velocity.y > 0) || (this._vy >= 0 && this.velocity.y < 0) || (this.velocity.y = t.velocity.y - this.velocity.y * this.bounce.y), (this.angle = Math.atan2(this.velocity.y, this.velocity.x)), this.reboundCheck(!0, !0, !1); }, overlap: function (t, e) { var s = !1; return ( (this.type !== i.Physics.Arcade.RECT && this.type !== i.Physics.Arcade.POLYGON) || (t.type !== i.Physics.Arcade.RECT && t.type !== i.Physics.Arcade.POLYGON) ? this.type === i.Physics.Arcade.CIRCLE && t.type === i.Physics.Arcade.CIRCLE ? (s = SAT.testCircleCircle(this.shape, t.shape, e)) : (this.type !== i.Physics.Arcade.RECT && this.type !== i.Physics.Arcade.POLYGON) || t.type !== i.Physics.Arcade.CIRCLE ? this.type !== i.Physics.Arcade.CIRCLE || (t.type !== i.Physics.Arcade.RECT && t.type !== i.Physics.Arcade.POLYGON) || (s = SAT.testCirclePolygon(this.shape, t.polygon, e)) : (s = SAT.testPolygonCircle(this.polygon, t.shape, e)) : (s = SAT.testPolygonPolygon(this.polygon, t.polygon, e)), s || this.removeContact(t), s ); }, inContact: function (t) { return -1 != this.contacts.indexOf(t); }, addContact: function (t) { return this.inContact(t) ? !1 : (this.contacts.push(t), this.sprite.events.onBeginContact.dispatch(this.sprite, t.sprite, this, t), t.addContact(this), !0); }, removeContact: function (t) { return this.inContact(t) ? (this.contacts.splice(this.contacts.indexOf(t), 1), this.sprite.events.onEndContact.dispatch(this.sprite, t.sprite, this, t), t.removeContact(this), !0) : !1; }, separate: function (t, e) { if (this.inContact(t)) return !1; if ( ((this._distances[0] = t.right - this.x), (this._distances[1] = this.right - t.x), (this._distances[2] = t.bottom - this.y), (this._distances[3] = this.bottom - t.y), !e.overlapN.x || (0 !== this._distances[0] && 0 !== this._distances[1]) ? !e.overlapN.y || (0 !== this._distances[2] && 0 !== this._distances[3]) || ((e.overlapN.x = !0), (e.overlapN.y = !1)) : ((e.overlapN.x = !1), (e.overlapN.y = !0)), this.customSeparateCallback) ) return this.customSeparateCallback.call(this.customSeparateContext, this, e, this._distances); var i = !1; return ( e.overlapN.x ? this._distances[0] < this._distances[1] ? (i = this.hitLeft(t, e)) : this._distances[1] < this._distances[0] && (i = this.hitRight(t, e)) : e.overlapN.y && (this._distances[2] < this._distances[3] ? (i = this.hitTop(t, e)) : this._distances[3] < this._distances[2] && (i = this.hitBottom(t, e))), i ? (this.game.physics.checkBounds(this), this.game.physics.checkBounds(t)) : this.addContact(t), i ); }, hitLeft: function (t, e) { return this.checkCollision.left && t.checkCollision.right ? void ( (!this.collideCallback || this.collideCallback.call(this.collideCallbackContext, i.LEFT, this, t, e)) && (!this.moves || this.immovable || this.blocked.right || this.touching.right ? t.give(this, e) : t.immovable || t.blocked.left || t.touching.left ? this.take(t, e) : this.split(t, e), (this.touching.left = !0), (t.touching.right = !0)) ) : !1; }, hitRight: function (t, e) { return this.checkCollision.right && t.checkCollision.left ? void ( (!this.collideCallback || this.collideCallback.call(this.collideCallbackContext, i.RIGHT, this, t)) && (!this.moves || this.immovable || this.blocked.left || this.touching.left ? t.give(this, e) : t.immovable || t.blocked.right || t.touching.right ? this.take(t, e) : this.split(t, e), (this.touching.right = !0), (t.touching.left = !0)) ) : !1; }, hitTop: function (t, e) { return this.checkCollision.up && t.checkCollision.down ? this.collideCallback && !this.collideCallback.call(this.collideCallbackContext, i.UP, this, t) ? !1 : (!this.moves || this.immovable || this.blocked.down || this.touching.down ? t.give(this, e) : t.immovable || t.blocked.up || t.touching.up ? this.take(t, e) : this.split(t, e), (this.touching.up = !0), (t.touching.down = !0), !0) : !1; }, hitBottom: function (t, e) { return this.checkCollision.down && t.checkCollision.up ? this.collideCallback && !this.collideCallback.call(this.collideCallbackContext, i.DOWN, this, t) ? !1 : (!this.moves || this.immovable || this.blocked.up || this.touching.up ? t.give(this, e) : t.immovable || t.blocked.down || t.touching.down ? this.take(t, e) : this.split(t, e), (this.touching.down = !0), (t.touching.up = !0), !0) : !1; }, integrateVelocity: function () { (this._temp = this.game.physics.updateMotion(this)), (this._dx = this.game.time.physicsElapsed * (this.velocity.x + this._temp.x / 2)), (this._dy = this.game.time.physicsElapsed * (this.velocity.y + this._temp.y / 2)), ((this._dx < 0 && !this.blocked.left && !this.touching.left) || (this._dx > 0 && !this.blocked.right && !this.touching.right)) && ((this.x += this._dx), (this.velocity.x += this._temp.x)), ((this._dy < 0 && !this.blocked.up && !this.touching.up) || (this._dy > 0 && !this.blocked.down && !this.touching.down)) && ((this.y += this._dy), (this.velocity.y += this._temp.y)), this.velocity.x > this.maxVelocity.x ? (this.velocity.x = this.maxVelocity.x) : this.velocity.x < -this.maxVelocity.x && (this.velocity.x = -this.maxVelocity.x), this.velocity.y > this.maxVelocity.y ? (this.velocity.y = this.maxVelocity.y) : this.velocity.y < -this.maxVelocity.y && (this.velocity.y = -this.maxVelocity.y); }, postUpdate: function () { this.moves && (this.game.physics.checkBounds(this), this.reboundCheck(!0, !0, !0), (this._dx = this.deltaX()), (this._dy = this.deltaY()), this._dx < 0 ? (this.facing = i.LEFT) : this._dx > 0 && (this.facing = i.RIGHT), this._dy < 0 ? (this.facing = i.UP) : this._dy > 0 && (this.facing = i.DOWN), (0 !== this._dx || 0 !== this._dy) && ((this.sprite.x += this._dx), (this.sprite.y += this._dy)), this.allowRotation && 0 !== this.deltaZ() && (this.sprite.angle += this.deltaZ()), (this.sprite.scale.x !== this._sx || this.sprite.scale.y !== this._sy) && this.updateScale()); }, reset: function (t) { "undefined" == typeof t && (t = !1), t && (this.gravity.setTo(0, 0), this.bounce.setTo(0, 0), this.minVelocity.setTo(5, 5), this.maxVelocity.setTo(1e3, 1e3), (this.angularDrag = 0), (this.maxAngular = 1e3), (this.mass = 1), (this.friction = 0), (this.checkCollision = { none: !1, any: !0, up: !0, down: !0, left: !0, right: !0 })), this.velocity.setTo(0, 0), this.acceleration.setTo(0, 0), (this.angularVelocity = 0), (this.angularAcceleration = 0), (this.blocked = { x: 0, y: 0, up: !1, down: !1, left: !1, right: !1 }), (this.x = this.sprite.world.x - this.sprite.anchor.x * this.sprite.width + this.offset.x), (this.y = this.sprite.world.y - this.sprite.anchor.y * this.sprite.height + this.offset.y), (this.preX = this.x), (this.preY = this.y), this.updateBounds(), (this.contacts.length = 0); }, destroy: function () { (this.sprite = null), (this.collideCallback = null), (this.collideCallbackContext = null), (this.customSeparateCallback = null), (this.customSeparateContext = null), (this.contacts.length = 0); }, setCircle: function (t, e, s) { "undefined" == typeof e && (e = this.sprite._cache.halfWidth), "undefined" == typeof s && (s = this.sprite._cache.halfHeight), (this.type = i.Physics.Arcade.CIRCLE), (this.shape = new SAT.Circle(new SAT.Vector(this.sprite.x, this.sprite.y), t)), (this.polygon = null), this.offset.setTo(e, s); }, setRectangle: function (t, e, s, n) { "undefined" == typeof t && (t = this.sprite.width), "undefined" == typeof e && (e = this.sprite.height), "undefined" == typeof s && (s = -this.sprite._cache.halfWidth), "undefined" == typeof n && (n = -this.sprite._cache.halfHeight), (this.type = i.Physics.Arcade.RECT), (this.shape = new SAT.Box(new SAT.Vector(this.sprite.world.x, this.sprite.world.y), t, e)), (this.polygon = this.shape.toPolygon()), this.polygon.translate(s, n), this.offset.setTo(0, 0); }, setPolygon: function (t) { if (((this.type = i.Physics.Arcade.POLYGON), (this.shape = null), Array.isArray(t) || (t = Array.prototype.slice.call(arguments)), "number" == typeof t[0])) { for (var e = [], s = 0, n = t.length; n > s; s += 2) e.push(new SAT.Vector(t[s], t[s + 1])); t = e; } (this.polygon = new SAT.Polygon(new SAT.Vector(this.sprite.center.x, this.sprite.center.y), t)), this.offset.setTo(0, 0); }, translate: function (t, e) { this.polygon && this.polygon.translate(t, e); }, onFloor: function () { return this.blocked.down; }, onWall: function () { return !this.blocked.down && (this.blocked.left || this.blocked.right); }, deltaX: function () { return this.x - this.preX; }, deltaY: function () { return this.y - this.preY; }, deltaZ: function () { return this.rotation - this.preRotation; }, }), (i.Physics.Arcade.Body.prototype.constructor = i.Physics.Arcade.Body), Object.defineProperty(i.Physics.Arcade.Body.prototype, "x", { get: function () { return this.type === i.Physics.Arcade.CIRCLE ? this.shape.pos.x : this.polygon.pos.x; }, set: function (t) { this.type === i.Physics.Arcade.CIRCLE ? (this.shape.pos.x = t) : (this.polygon.pos.x = t); }, }), Object.defineProperty(i.Physics.Arcade.Body.prototype, "y", { get: function () { return this.type === i.Physics.Arcade.CIRCLE ? this.shape.pos.y : this.polygon.pos.y; }, set: function (t) { this.type === i.Physics.Arcade.CIRCLE ? (this.shape.pos.y = t) : (this.polygon.pos.y = t); }, }), (i.Particles = function (t) { (this.game = t), (this.emitters = {}), (this.ID = 0); }), (i.Particles.prototype = { add: function (t) { return (this.emitters[t.name] = t), t; }, remove: function (t) { delete this.emitters[t.name]; }, update: function () { for (var t in this.emitters) this.emitters[t].exists && this.emitters[t].update(); }, }), (i.Particles.prototype.constructor = i.Particles), (i.Particles.Arcade = {}), (i.Particles.Arcade.Emitter = function (t, e, s, n) { (this.maxParticles = n || 50), i.Group.call(this, t), (this.name = "emitter" + this.game.particles.ID++), (this.type = i.EMITTER), (this.x = 0), (this.y = 0), (this.width = 1), (this.height = 1), (this.minParticleSpeed = new i.Point(-100, -100)), (this.maxParticleSpeed = new i.Point(100, 100)), (this.minParticleScale = 1), (this.maxParticleScale = 1), (this.minRotation = -360), (this.maxRotation = 360), (this.gravity = 100), (this.particleClass = null), (this.particleFriction = 0), (this.angularDrag = 0), (this.frequency = 100), (this.lifespan = 2e3), (this.bounce = new i.Point()), (this._quantity = 0), (this._timer = 0), (this._counter = 0), (this._explode = !0), (this.on = !1), (this.exists = !0), (this.emitX = e), (this.emitY = s); }), (i.Particles.Arcade.Emitter.prototype = Object.create(i.Group.prototype)), (i.Particles.Arcade.Emitter.prototype.constructor = i.Particles.Arcade.Emitter), (i.Particles.Arcade.Emitter.prototype.update = function () { if (this.on) if (this._explode) { this._counter = 0; do this.emitParticle(), this._counter++; while (this._counter < this._quantity); this.on = !1; } else this.game.time.now >= this._timer && (this.emitParticle(), this._counter++, this._quantity > 0 && this._counter >= this._quantity && (this.on = !1), (this._timer = this.game.time.now + this.frequency)); }), (i.Particles.Arcade.Emitter.prototype.makeParticles = function (t, e, s, n, r) { "undefined" == typeof e && (e = 0), "undefined" == typeof s && (s = this.maxParticles), "undefined" == typeof n && (n = !1), "undefined" == typeof r && (r = !1); for (var o, a = 0, h = t, l = e; s > a; ) null === this.particleClass && ("object" == typeof t && (h = this.game.rnd.pick(t)), "object" == typeof e && (l = this.game.rnd.pick(e)), (o = new i.Sprite(this.game, 0, 0, h, l))), n ? ((o.body.checkCollision.any = !0), (o.body.checkCollision.none = !1)) : (o.body.checkCollision.none = !0), (o.body.collideWorldBounds = r), (o.exists = !1), (o.visible = !1), o.anchor.setTo(0.5, 0.5), this.add(o), a++; return this; }), (i.Particles.Arcade.Emitter.prototype.kill = function () { (this.on = !1), (this.alive = !1), (this.exists = !1); }), (i.Particles.Arcade.Emitter.prototype.revive = function () { (this.alive = !0), (this.exists = !0); }), (i.Particles.Arcade.Emitter.prototype.start = function (t, e, i, s) { "undefined" == typeof t && (t = !0), "undefined" == typeof e && (e = 0), "undefined" == typeof i && (i = 250), "undefined" == typeof s && (s = 0), this.revive(), (this.visible = !0), (this.on = !0), (this._explode = t), (this.lifespan = e), (this.frequency = i), t ? (this._quantity = s) : (this._quantity += s), (this._counter = 0), (this._timer = this.game.time.now + i); }), (i.Particles.Arcade.Emitter.prototype.emitParticle = function () { var t = this.getFirstExists(!1); if (null != t) { if ( (this.width > 1 || this.height > 1 ? t.reset(this.game.rnd.integerInRange(this.left, this.right), this.game.rnd.integerInRange(this.top, this.bottom)) : t.reset(this.emitX, this.emitY), (t.lifespan = this.lifespan), t.body.bounce.setTo(this.bounce.x, this.bounce.y), (t.body.velocity.x = this.minParticleSpeed.x != this.maxParticleSpeed.x ? this.game.rnd.integerInRange(this.minParticleSpeed.x, this.maxParticleSpeed.x) : this.minParticleSpeed.x), (t.body.velocity.y = this.minParticleSpeed.y != this.maxParticleSpeed.y ? this.game.rnd.integerInRange(this.minParticleSpeed.y, this.maxParticleSpeed.y) : this.minParticleSpeed.y), (t.body.gravity.y = this.gravity), (t.body.angularVelocity = this.minRotation != this.maxRotation ? this.game.rnd.integerInRange(this.minRotation, this.maxRotation) : this.minRotation), 1 !== this.minParticleScale || 1 !== this.maxParticleScale) ) { var e = this.game.rnd.realInRange(this.minParticleScale, this.maxParticleScale); t.scale.setTo(e, e); } (t.body.friction = this.particleFriction), (t.body.angularDrag = this.angularDrag); } }), (i.Particles.Arcade.Emitter.prototype.setSize = function (t, e) { (this.width = t), (this.height = e); }), (i.Particles.Arcade.Emitter.prototype.setXSpeed = function (t, e) { (t = t || 0), (e = e || 0), (this.minParticleSpeed.x = t), (this.maxParticleSpeed.x = e); }), (i.Particles.Arcade.Emitter.prototype.setYSpeed = function (t, e) { (t = t || 0), (e = e || 0), (this.minParticleSpeed.y = t), (this.maxParticleSpeed.y = e); }), (i.Particles.Arcade.Emitter.prototype.setRotation = function (t, e) { (t = t || 0), (e = e || 0), (this.minRotation = t), (this.maxRotation = e); }), (i.Particles.Arcade.Emitter.prototype.at = function (t) { t.center && ((this.emitX = t.center.x), (this.emitY = t.center.y)); }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "alpha", { get: function () { return this._container.alpha; }, set: function (t) { this._container.alpha = t; }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "visible", { get: function () { return this._container.visible; }, set: function (t) { this._container.visible = t; }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "x", { get: function () { return this.emitX; }, set: function (t) { this.emitX = t; }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "y", { get: function () { return this.emitY; }, set: function (t) { this.emitY = t; }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "left", { get: function () { return Math.floor(this.x - this.width / 2); }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "right", { get: function () { return Math.floor(this.x + this.width / 2); }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "top", { get: function () { return Math.floor(this.y - this.height / 2); }, }), Object.defineProperty(i.Particles.Arcade.Emitter.prototype, "bottom", { get: function () { return Math.floor(this.y + this.height / 2); }, }), (i.Tile = function (t, e, i, s, n, r) { (this.layer = t), (this.index = e), (this.x = i), (this.y = s), (this.width = n), (this.height = r), (this.alpha = 1), (this.properties = {}), (this.scanned = !1), (this.faceTop = !1), (this.faceBottom = !1), (this.faceLeft = !1), (this.faceRight = !1), (this.collides = !1), (this.collideNone = !0), (this.collideLeft = !1), (this.collideRight = !1), (this.collideUp = !1), (this.collideDown = !1), (this.callback = null), (this.callbackContext = this); }), (i.Tile.prototype = { setCollisionCallback: function (t, e) { (this.collisionCallbackContext = e), (this.collisionCallback = t); }, destroy: function () { (this.collisionCallback = null), (this.collisionCallbackContext = null), (this.properties = null); }, setCollision: function (t, e, i, s) { (this.collideLeft = t), (this.collideRight = e), (this.collideUp = i), (this.collideDown = s), (this.collideNone = t || e || i || s ? !1 : !0); }, resetCollision: function () { (this.collideNone = !0), (this.collideLeft = !1), (this.collideRight = !1), (this.collideUp = !1), (this.collideDown = !1); }, copy: function (t) { (this.index = t.index), (this.alpha = t.alpha), (this.properties = t.properties), (this.collides = t.collides), (this.collideNone = t.collideNone), (this.collideUp = t.collideUp), (this.collideDown = t.collideDown), (this.collideLeft = t.collideLeft), (this.collideRight = t.collideRight), (this.collisionCallback = t.collisionCallback), (this.collisionCallbackContext = t.collisionCallbackContext); }, }), (i.Tile.prototype.constructor = i.Tile), Object.defineProperty(i.Tile.prototype, "canCollide", { get: function () { return this.collides || this.collisionCallback || this.layer.callbacks[this.index]; }, }), Object.defineProperty(i.Tile.prototype, "left", { get: function () { return this.x; }, }), Object.defineProperty(i.Tile.prototype, "right", { get: function () { return this.x + this.width; }, }), Object.defineProperty(i.Tile.prototype, "top", { get: function () { return this.y; }, }), Object.defineProperty(i.Tile.prototype, "bottom", { get: function () { return this.y + this.height; }, }), (i.Tilemap = function (t, e) { (this.game = t), (this.key = e); var s = i.TilemapParser.parse(this.game, e); null !== s && ((this.width = s.width), (this.height = s.height), (this.tileWidth = s.tileWidth), (this.tileHeight = s.tileHeight), (this.orientation = s.orientation), (this.version = s.version), (this.properties = s.properties), (this.widthInPixels = s.widthInPixels), (this.heightInPixels = s.heightInPixels), (this.layers = s.layers), (this.tilesets = s.tilesets), (this.tiles = s.tiles), (this.objects = s.objects), (this.images = s.images), (this.currentLayer = 0), (this.debugMap = []), (this._results = []), (this._tempA = 0), (this._tempB = 0)); }), (i.Tilemap.CSV = 0), (i.Tilemap.TILED_JSON = 1), (i.Tilemap.prototype = { create: function (t, e, s) { for (var n = [], r = 0; s > r; r++) { n[r] = []; for (var o = 0; e > o; o++) n[r][o] = 0; } this.layers.push({ name: t, width: e, height: s, alpha: 1, visible: !0, tileMargin: 0, tileSpacing: 0, format: i.Tilemap.CSV, data: n, indexes: [], dirty: !0 }), (this.currentLayer = this.layers.length - 1); }, addTilesetImage: function (t, e) { if ("undefined" == typeof e) { if ("string" != typeof t) return !1; e = t; } return "string" == typeof t && (t = this.getTilesetIndex(t)), this.tilesets[t] ? ((this.tilesets[t].image = this.game.cache.getImage(e)), !0) : !1; }, createFromTiles: function (t, e, i, s, n) { "undefined" == typeof n && (n = this.game.world); }, createFromObjects: function (t, e, i, s, n, r, o) { if (("undefined" == typeof n && (n = !0), "undefined" == typeof r && (r = !0), "undefined" == typeof o && (o = this.game.world), !this.objects[t])) return void console.warn("Tilemap.createFromObjects: Invalid objectgroup name given: " + t); for (var a, h = 0, l = this.objects[t].length; l > h; h++) if (this.objects[t][h].gid === e) { (a = o.create(this.objects[t][h].x, this.objects[t][h].y, i, s, n)), a.anchor.setTo(0, 1), (a.name = this.objects[t][h].name), (a.visible = this.objects[t][h].visible), (a.autoCull = r); for (property in this.objects[t][h].properties) o.set(a, property, this.objects[t][h].properties[property], !1, !1, 0); } }, createLayer: function (t, e, s, n) { "undefined" == typeof e && (e = this.game.width), "undefined" == typeof s && (s = this.game.height), "undefined" == typeof n && (n = this.game.world); var r = t; return "string" == typeof t && (r = this.getLayerIndex(t)), null === r || r > this.layers.length ? void console.warn("Tilemap.createLayer: Invalid layer ID given: " + r) : n.add(new i.TilemapLayer(this.game, this, r, e, s)); }, getIndex: function (t, e) { for (var i = 0; i < t.length; i++) if (t[i].name === e) return i; return null; }, getLayerIndex: function (t) { return this.getIndex(this.layers, t); }, getTilesetIndex: function (t) { return this.getIndex(this.tilesets, t); }, getImageIndex: function (t) { return this.getIndex(this.images, t); }, getObjectIndex: function (t) { return this.getIndex(this.objects, t); }, setTileIndexCallback: function (t, e, i, s) { if (((s = this.getLayer(s)), "number" == typeof t)) this.layers[s].callbacks[t] = { callback: e, callbackContext: i }; else for (var n = 0, r = t.length; r > n; n++) this.layers[s].callbacks[t[n]] = { callback: e, callbackContext: i }; }, setTileLocationCallback: function (t, e, i, s, n, r, o) { if (((o = this.getLayer(o)), this.copy(t, e, i, s, o), !(this._results.length < 2))) for (var a = 1; a < this._results.length; a++) this._results[a].setCollisionCallback(n, r); }, setCollision: function (t, e, i) { if (("undefined" == typeof e && (e = !0), (i = this.getLayer(i)), "number" == typeof t)) return this.setCollisionByIndex(t, e, i, !0); for (var s = 0, n = t.length; n > s; s++) this.setCollisionByIndex(t[s], e, i, !1); this.calculateFaces(i); }, setCollisionBetween: function (t, e, i, s) { if (("undefined" == typeof i && (i = !0), (s = this.getLayer(s)), !(t > e))) { for (var n = t; e >= n; n++) this.setCollisionByIndex(n, i, s, !1); this.calculateFaces(s); } }, setCollisionByExclusion: function (t, e, i) { "undefined" == typeof e && (e = !0), (i = this.getLayer(i)); for (var s = 0, n = this.tiles.length; n > s; s++) -1 === t.indexOf(s) && this.setCollisionByIndex(s, e, i, !1); this.calculateFaces(i); }, setCollisionByIndex: function (t, e, i, s) { "undefined" == typeof e && (e = !0), "undefined" == typeof i && (i = this.currentLayer), "undefined" == typeof s && (s = !0); for (var n = 0; n < this.layers[i].height; n++) for (var r = 0; r < this.layers[i].width; r++) { var o = this.layers[i].data[n][r]; o && o.index === t && ((o.collides = e), (o.faceTop = e), (o.faceBottom = e), (o.faceLeft = e), (o.faceRight = e)); } return s && this.calculateFaces(i), i; }, getLayer: function (t) { return "undefined" == typeof t ? (t = this.currentLayer) : "string" == typeof t ? (t = this.getLayerIndex(t)) : t instanceof i.TilemapLayer && (t = t.index), t; }, calculateFaces: function (t) { for (var e = null, i = null, s = null, n = null, r = 0, o = this.layers[t].height; o > r; r++) for (var a = 0, h = this.layers[t].width; h > a; a++) { var l = this.layers[t].data[r][a]; l && ((e = this.getTileAbove(t, a, r)), (i = this.getTileBelow(t, a, r)), (s = this.getTileLeft(t, a, r)), (n = this.getTileRight(t, a, r)), e && e.collides && (l.faceTop = !1), i && i.collides && (l.faceBottom = !1), s && s.collides && (l.faceLeft = !1), n && n.collides && (l.faceRight = !1)); } }, getTileAbove: function (t, e, i) { return i > 0 ? this.layers[t].data[i - 1][e] : null; }, getTileBelow: function (t, e, i) { return i < this.layers[t].height - 1 ? this.layers[t].data[i + 1][e] : null; }, getTileLeft: function (t, e, i) { return e > 0 ? this.layers[t].data[i][e - 1] : null; }, getTileRight: function (t, e, i) { return e < this.layers[t].width - 1 ? this.layers[t].data[i][e + 1] : null; }, setLayer: function (t) { (t = this.getLayer(t)), this.layers[t] && (this.currentLayer = t); }, putTile: function (t, e, s, n) { (n = this.getLayer(n)), e >= 0 && e < this.layers[n].width && s >= 0 && s < this.layers[n].height && (t instanceof i.Tile ? this.layers[n].data[s][e].copy(t) : (this.layers[n].data[s][e].index = t), (this.layers[n].dirty = !0), this.calculateFaces(n)); }, putTileWorldXY: function (t, e, i, s, n, r) { (r = this.getLayer(r)), (e = this.game.math.snapToFloor(e, s) / s), (i = this.game.math.snapToFloor(i, n) / n), this.putTile(t, e, i, r); }, getTile: function (t, e, i) { return (i = this.getLayer(i)), t >= 0 && t < this.layers[i].width && e >= 0 && e < this.layers[i].height ? this.layers[i].data[e][t] : void 0; }, getTileWorldXY: function (t, e, i, s, n) { return (n = this.getLayer(n)), (t = this.game.math.snapToFloor(t, i) / i), (e = this.game.math.snapToFloor(e, s) / s), this.getTile(t, e, n); }, copy: function (t, e, i, s, n) { if (((n = this.getLayer(n)), !this.layers[n])) return void (this._results.length = 0); "undefined" == typeof t && (t = 0), "undefined" == typeof e && (e = 0), "undefined" == typeof i && (i = this.layers[n].width), "undefined" == typeof s && (s = this.layers[n].height), 0 > t && (t = 0), 0 > e && (e = 0), i > this.layers[n].width && (i = this.layers[n].width), s > this.layers[n].height && (s = this.layers[n].height), (this._results.length = 0), this._results.push({ x: t, y: e, width: i, height: s, layer: n }); for (var r = e; e + s > r; r++) for (var o = t; t + i > o; o++) this._results.push(this.layers[n].data[r][o]); return this._results; }, paste: function (t, e, i, s) { if (("undefined" == typeof t && (t = 0), "undefined" == typeof e && (e = 0), (s = this.getLayer(s)), i && !(i.length < 2))) { for (var n = i[1].x - t, r = i[1].y - e, o = 1; o < i.length; o++) this.layers[s].data[r + i[o].y][n + i[o].x].copy(i[o]); (this.layers[s].dirty = !0), this.calculateFaces(s); } }, swap: function (t, e, i, s, n, r, o) { (o = this.getLayer(o)), this.copy(i, s, n, r, o), this._results.length < 2 || ((this._tempA = t), (this._tempB = e), this._results.forEach(this.swapHandler, this), this.paste(i, s, this._results, o)); }, swapHandler: function (t, e) { t.index === this._tempA ? (this._results[e].index = this._tempB) : t.index === this._tempB && (this._results[e].index = this._tempA); }, forEach: function (t, e, i, s, n, r, o) { (o = this.getLayer(o)), this.copy(i, s, n, r, o), this._results.length < 2 || (this._results.forEach(t, e), this.paste(i, s, this._results, o)); }, replace: function (t, e, i, s, n, r, o) { if (((o = this.getLayer(o)), this.copy(i, s, n, r, o), !(this._results.length < 2))) { for (var a = 1; a < this._results.length; a++) this._results[a].index === t && (this._results[a].index = e); this.paste(i, s, this._results, o); } }, random: function (t, e, i, s, n) { if (((n = this.getLayer(n)), this.copy(t, e, i, s, n), !(this._results.length < 2))) { for (var r = [], o = 1; o < this._results.length; o++) if (this._results[o].index) { var a = this._results[o].index; -1 === r.indexOf(a) && r.push(a); } for (var h = 1; h < this._results.length; h++) this._results[h].index = this.game.rnd.pick(r); this.paste(t, e, this._results, n); } }, shuffle: function (t, e, s, n, r) { if (((r = this.getLayer(r)), this.copy(t, e, s, n, r), !(this._results.length < 2))) { for (var o = [], a = 1; a < this._results.length; a++) this._results[a].index && o.push(this._results[a].index); i.Utils.shuffle(o); for (var h = 1; h < this._results.length; h++) this._results[h].index = o[h - 1]; this.paste(t, e, this._results, r); } }, fill: function (t, e, i, s, n, r) { if (((r = this.getLayer(r)), this.copy(e, i, s, n, r), !(this._results.length < 2))) { for (var o = 1; o < this._results.length; o++) this._results[o].index = t; this.paste(e, i, this._results, r); } }, removeAllLayers: function () { (this.layers.length = 0), (this.currentLayer = 0); }, dump: function () { for (var t = "", e = [""], i = 0; i < this.layers[this.currentLayer].height; i++) { for (var s = 0; s < this.layers[this.currentLayer].width; s++) (t += "%c "), e.push( this.layers[this.currentLayer].data[i][s] > 1 ? this.debugMap[this.layers[this.currentLayer].data[i][s]] ? "background: " + this.debugMap[this.layers[this.currentLayer].data[i][s]] : "background: #ffffff" : "background: rgb(0, 0, 0)" ); t += "\n"; } (e[0] = t), console.log.apply(console, e); }, destroy: function () { this.removeAllLayers(), (this.data = []), (this.game = null); }, }), (i.Tilemap.prototype.constructor = i.Tilemap), (i.TilemapLayer = function (t, s, n, r, o) { (this.game = t), (this.map = s), (this.index = n), (this.layer = s.layers[n]), (this.canvas = i.Canvas.create(r, o)), (this.context = this.canvas.getContext("2d")), (this.baseTexture = new e.BaseTexture(this.canvas)), (this.texture = new e.Texture(this.baseTexture)), (this.textureFrame = new i.Frame(0, 0, 0, r, o, "tilemapLayer", t.rnd.uuid())), i.Sprite.call(this, this.game, 0, 0, this.texture, this.textureFrame), (this.name = ""), (this.type = i.TILEMAPLAYER), (this.fixedToCamera = !0), (this.cameraOffset = new i.Point(0, 0)), (this.tileColor = "rgb(255, 255, 255)"), (this.debug = !1), (this.debugAlpha = 0.5), (this.debugColor = "rgba(0, 255, 0, 1)"), (this.debugFill = !1), (this.debugFillColor = "rgba(0, 255, 0, 0.2)"), (this.debugCallbackColor = "rgba(255, 0, 0, 1)"), (this.scrollFactorX = 1), (this.scrollFactorY = 1), (this.dirty = !0), (this._cw = s.tileWidth), (this._ch = s.tileHeight), (this._ga = 1), (this._dx = 0), (this._dy = 0), (this._dw = 0), (this._dh = 0), (this._tx = 0), (this._ty = 0), (this._tw = 0), (this._th = 0), (this._tl = 0), (this._maxX = 0), (this._maxY = 0), (this._startX = 0), (this._startY = 0), (this._results = []), (this._x = 0), (this._y = 0), (this._prevX = 0), (this._prevY = 0), this.updateMax(); }), (i.TilemapLayer.prototype = Object.create(i.Sprite.prototype)), (i.TilemapLayer.prototype = i.Utils.extend(!0, i.TilemapLayer.prototype, i.Sprite.prototype, e.Sprite.prototype)), (i.TilemapLayer.prototype.constructor = i.TilemapLayer), (i.TilemapLayer.prototype.postUpdate = function () { i.Sprite.prototype.postUpdate.call(this), (this.scrollX = this.game.camera.x * this.scrollFactorX), (this.scrollY = this.game.camera.y * this.scrollFactorY), this.render(); }), (i.TilemapLayer.prototype.resizeWorld = function () { this.game.world.setBounds(0, 0, this.layer.widthInPixels, this.layer.heightInPixels); }), (i.TilemapLayer.prototype._fixX = function (t) { return 0 > t && (t = 0), 1 === this.scrollFactorX ? t : this._x + (t - this._x / this.scrollFactorX); }), (i.TilemapLayer.prototype._unfixX = function (t) { return 1 === this.scrollFactorX ? t : this._x / this.scrollFactorX + (t - this._x); }), (i.TilemapLayer.prototype._fixY = function (t) { return 0 > t && (t = 0), 1 === this.scrollFactorY ? t : this._y + (t - this._y / this.scrollFactorY); }), (i.TilemapLayer.prototype._unfixY = function (t) { return 1 === this.scrollFactorY ? t : this._y / this.scrollFactorY + (t - this._y); }), (i.TilemapLayer.prototype.getTileX = function (t) { return this.game.math.snapToFloor(this._fixX(t), this.map.tileWidth) / this.map.tileWidth; }), (i.TilemapLayer.prototype.getTileY = function (t) { return this.game.math.snapToFloor(this._fixY(t), this.map.tileHeight) / this.map.tileHeight; }), (i.TilemapLayer.prototype.getTileXY = function (t, e, i) { return (i.x = this.getTileX(t)), (i.y = this.getTileY(e)), i; }), (i.TilemapLayer.prototype.getTiles = function (t, e, i, s, n) { "undefined" == typeof n && (n = !1), (t = this._fixX(t)), (e = this._fixY(e)), i > this.layer.widthInPixels && (i = this.layer.widthInPixels), s > this.layer.heightInPixels && (s = this.layer.heightInPixels), (this._tx = this.game.math.snapToFloor(t, this._cw) / this._cw), (this._ty = this.game.math.snapToFloor(e, this._ch) / this._ch), (this._tw = (this.game.math.snapToCeil(i, this._cw) + this._cw) / this._cw), (this._th = (this.game.math.snapToCeil(s, this._ch) + this._ch) / this._ch), (this._results.length = 0); for (var r = this._ty; r < this._ty + this._th; r++) for (var o = this._tx; o < this._tx + this._tw; o++) if (this.layer.data[r] && this.layer.data[r][o] && (n === !1 || (n && this.layer.data[r][o].canCollide))) { var a = this._unfixX(o * this._cw) / this._cw, h = this._unfixY(r * this._ch) / this._ch; this._results.push({ x: a * this._cw, y: h * this._ch, right: a * this._cw + this._cw, bottom: h * this._ch + this._ch, tile: this.layer.data[r][o], layer: this.layer.data[r][o].layer }); } return this._results; }), (i.TilemapLayer.prototype.updateMax = function () { (this._maxX = this.game.math.ceil(this.canvas.width / this.map.tileWidth) + 1), (this._maxY = this.game.math.ceil(this.canvas.height / this.map.tileHeight) + 1), this.layer && (this._maxX > this.layer.width && (this._maxX = this.layer.width), this._maxY > this.layer.height && (this._maxY = this.layer.height)), (this.dirty = !0); }), (i.TilemapLayer.prototype.render = function () { if ((this.layer.dirty && (this.dirty = !0), this.dirty && this.visible)) { (this._prevX = this._dx), (this._prevY = this._dy), (this._dx = -(this._x - this._startX * this.map.tileWidth)), (this._dy = -(this._y - this._startY * this.map.tileHeight)), (this._tx = this._dx), (this._ty = this._dy), this.context.clearRect(0, 0, this.canvas.width, this.canvas.height), (this.context.fillStyle = this.tileColor); var t, s; this.debug && (this.context.globalAlpha = this.debugAlpha); for (var n = this._startY, r = this._startY + this._maxY; r > n; n++) { this._column = this.layer.data[n]; for (var o = this._startX, a = this._startX + this._maxX; a > o; o++) this._column[o] && ((t = this._column[o]), this.map.tiles[t.index] && ((s = this.map.tilesets[this.map.tiles[t.index][2]]), s.image ? (this.debug === !1 && t.alpha !== this.context.globalAlpha && (this.context.globalAlpha = t.alpha), s.tileWidth !== this.map.tileWidth || s.tileHeight !== this.map.tileHeight ? this.context.drawImage( this.map.tilesets[this.map.tiles[t.index][2]].image, this.map.tiles[t.index][0], this.map.tiles[t.index][1], s.tileWidth, s.tileHeight, Math.floor(this._tx), Math.floor(this._ty) - (s.tileHeight - this.map.tileHeight), s.tileWidth, s.tileHeight ) : this.context.drawImage( this.map.tilesets[this.map.tiles[t.index][2]].image, this.map.tiles[t.index][0], this.map.tiles[t.index][1], this.map.tileWidth, this.map.tileHeight, Math.floor(this._tx), Math.floor(this._ty), this.map.tileWidth, this.map.tileHeight ), t.debug && ((this.context.fillStyle = "rgba(0, 255, 0, 0.4)"), this.context.fillRect(Math.floor(this._tx), Math.floor(this._ty), this.map.tileWidth, this.map.tileHeight))) : this.context.fillRect(Math.floor(this._tx), Math.floor(this._ty), this.map.tileWidth, this.map.tileHeight))), (this._tx += this.map.tileWidth); (this._tx = this._dx), (this._ty += this.map.tileHeight); } return this.debug && ((this.context.globalAlpha = 1), this.renderDebug()), this.game.renderType === i.WEBGL && e.texturesToUpdate.push(this.baseTexture), (this.dirty = !1), (this.layer.dirty = !1), !0; } }), (i.TilemapLayer.prototype.renderDebug = function () { (this._tx = this._dx), (this._ty = this._dy), (this.context.strokeStyle = this.debugColor), (this.context.fillStyle = this.debugFillColor); for (var t = this._startY, e = this._startY + this._maxY; e > t; t++) { this._column = this.layer.data[t]; for (var i = this._startX, s = this._startX + this._maxX; s > i; i++) { var n = this._column[i]; n && (n.faceTop || n.faceBottom || n.faceLeft || n.faceRight) && ((this._tx = Math.floor(this._tx)), this.debugFill && this.context.fillRect(this._tx, this._ty, this._cw, this._ch), this.context.beginPath(), n.faceTop && (this.context.moveTo(this._tx, this._ty), this.context.lineTo(this._tx + this._cw, this._ty)), n.faceBottom && (this.context.moveTo(this._tx, this._ty + this._ch), this.context.lineTo(this._tx + this._cw, this._ty + this._ch)), n.faceLeft && (this.context.moveTo(this._tx, this._ty), this.context.lineTo(this._tx, this._ty + this._ch)), n.faceRight && (this.context.moveTo(this._tx + this._cw, this._ty), this.context.lineTo(this._tx + this._cw, this._ty + this._ch)), this.context.stroke()), n && (n.collisionCallback || n.layer.callbacks[n.index]) && ((this.context.fillStyle = this.debugCallbackColor), this.context.fillRect(this._tx, this._ty, this._cw, this._ch), (this.context.fillStyle = this.debugFillColor)), (this._tx += this.map.tileWidth); } (this._tx = this._dx), (this._ty += this.map.tileHeight); } }), Object.defineProperty(i.TilemapLayer.prototype, "scrollX", { get: function () { return this._x; }, set: function (t) { t !== this._x && t >= 0 && this.layer.widthInPixels > this.width && ((this._x = t), this._x > this.layer.widthInPixels - this.width && (this._x = this.layer.widthInPixels - this.width), (this._startX = this.game.math.floor(this._x / this.map.tileWidth)), this._startX < 0 && (this._startX = 0), this._startX + this._maxX > this.layer.width && (this._startX = this.layer.width - this._maxX), (this.dirty = !0)); }, }), Object.defineProperty(i.TilemapLayer.prototype, "scrollY", { get: function () { return this._y; }, set: function (t) { t !== this._y && t >= 0 && this.layer.heightInPixels > this.height && ((this._y = t), this._y > this.layer.heightInPixels - this.height && (this._y = this.layer.heightInPixels - this.height), (this._startY = this.game.math.floor(this._y / this.map.tileHeight)), this._startY < 0 && (this._startY = 0), this._startY + this._maxY > this.layer.height && (this._startY = this.layer.height - this._maxY), (this.dirty = !0)); }, }), Object.defineProperty(i.TilemapLayer.prototype, "collisionWidth", { get: function () { return this._cw; }, set: function (t) { (this._cw = t), (this.dirty = !0); }, }), Object.defineProperty(i.TilemapLayer.prototype, "collisionHeight", { get: function () { return this._ch; }, set: function (t) { (this._ch = t), (this.dirty = !0); }, }), (i.TilemapParser = { tileset: function (t, e, s, n, r, o, a, h, l) { var c = t.cache.getTilesetImage(e); if (null === c) return console.warn("Phaser.TilemapParser.tileSet: Invalid image key given"), null; var u = c.width, d = c.height; return ( -1 === a && (a = Math.round(u / s)), -1 === h && (h = Math.round(d / n)), -1 === l && (l = a * h), 0 === u || 0 === d || s > u || n > d || 0 === l ? (console.warn("Phaser.TilemapParser.tileSet: width/height zero or width/height < given tileWidth/tileHeight"), null) : new i.Tileset(c, e, s, n, r, o, a, h, l) ); }, parse: function (t, e) { var s = t.cache.getTilemapData(e); return s ? (s.format === i.Tilemap.CSV ? this.parseCSV(s.data) : s.format === i.Tilemap.TILED_JSON ? this.parseTiledJSON(s.data) : void 0) : { layers: [], objects: [], images: [], tilesets: [] }; }, parseCSV: function (t) { t = t.trim(); for (var e = [], i = t.split("\n"), s = i.length, n = 0, r = 0; r < i.length; r++) { e[r] = []; for (var o = i[r].split(","), a = 0; a < o.length; a++) e[r][a] = parseInt(o[a], 10); 0 === n && (n = o.length); } return [{ name: "csv", width: n, height: s, alpha: 1, visible: !0, indexes: [], tileMargin: 0, tileSpacing: 0, data: e }]; }, parseTiledJSON: function (t) { if ("orthogonal" !== t.orientation) return console.warn("TilemapParser.parseTiledJSON: Only orthogonal map types are supported in this version of Phaser"), null; var e = {}; (e.width = t.width), (e.height = t.height), (e.tileWidth = t.tilewidth), (e.tileHeight = t.tileheight), (e.orientation = t.orientation), (e.version = t.version), (e.properties = t.properties), (e.widthInPixels = e.width * e.tileWidth), (e.heightInPixels = e.height * e.tileHeight); for (var s = [], n = 0; n < t.layers.length; n++) if ("tilelayer" === t.layers[n].type) { var r = { name: t.layers[n].name, x: t.layers[n].x, y: t.layers[n].y, width: t.layers[n].width, height: t.layers[n].height, widthInPixels: t.layers[n].width * t.tilewidth, heightInPixels: t.layers[n].height * t.tileheight, alpha: t.layers[n].opacity, visible: t.layers[n].visible, properties: {}, indexes: [], callbacks: [], }; t.layers[n].properties && (r.properties = t.layers[n].properties); for (var o = 0, a = [], h = [], l = 0, c = t.layers[n].data.length; c > l; l++) a.push(t.layers[n].data[l] > 0 ? new i.Tile(r, t.layers[n].data[l], o, h.length, t.tilewidth, t.tileheight) : null), o++, o === t.layers[n].width && (h.push(a), (o = 0), (a = [])); (r.data = h), s.push(r); } e.layers = s; for (var u = [], n = 0; n < t.layers.length; n++) if ("imagelayer" === t.layers[n].type) { var d = { name: t.layers[n].name, image: t.layers[n].image, x: t.layers[n].x, y: t.layers[n].y, alpha: t.layers[n].opacity, visible: t.layers[n].visible, properties: {} }; t.layers[n].properties && (d.properties = t.layers[n].properties), u.push(d); } e.images = u; for (var p = {}, n = 0; n < t.layers.length; n++) if ("objectgroup" === t.layers[n].type) { p[t.layers[n].name] = []; for (var f = 0, c = t.layers[n].objects.length; c > f; f++) if (t.layers[n].objects[f].gid) { var g = { gid: t.layers[n].objects[f].gid, name: t.layers[n].objects[f].name, x: t.layers[n].objects[f].x, y: t.layers[n].objects[f].y, visible: t.layers[n].objects[f].visible, properties: t.layers[n].objects[f].properties, }; p[t.layers[n].name].push(g); } } e.objects = p; for (var m = [], n = 0; n < t.tilesets.length; n++) { var y = t.tilesets[n], _ = new i.Tileset(y.name, y.firstgid, y.tilewidth, y.tileheight, y.margin, y.spacing, y.properties); y.tileproperties && (_.tileProperties = y.tileproperties), (_.rows = (y.imageheight - y.margin) / (y.tileheight + y.spacing)), (_.columns = (y.imagewidth - y.margin) / (y.tilewidth + y.spacing)), (_.total = _.rows * _.columns), m.push(_); } (e.tilesets = m), (e.tiles = []); for (var n = 0; n < e.tilesets.length; n++) for ( var y = e.tilesets[n], o = y.tileMargin, x = y.tileMargin, v = 0, b = 0, w = 0, l = y.firstgid; l < y.firstgid + y.total && ((e.tiles[l] = [o, x, n]), (o += y.tileWidth + y.tileSpacing), v++, v !== y.total) && (b++, b !== y.columns || ((o = y.tileMargin), (x += y.tileHeight + y.tileSpacing), (b = 0), w++, w !== y.rows)); l++ ); return e; }, }), (i.Tileset = function (t, e, i, s, n, r, o) { (this.name = t), (this.firstgid = e), (this.tileWidth = i), (this.tileHeight = s), (this.tileMargin = n), (this.tileSpacing = r), (this.properties = o), (this.image = null), (this.rows = 0), (this.columns = 0), (this.total = 0); }), (i.Tileset.prototype = { setSpacing: function (t, e) { (this.tileMargin = t), (this.tileSpacing = e); }, }), (i.Tileset.prototype.constructor = i.Tileset), (e.CanvasRenderer.prototype.render = function (t) { (e.texturesToUpdate.length = 0), (e.texturesToDestroy.length = 0), e.visibleCount++, t.updateTransform(), this.context.setTransform(1, 0, 0, 1, 0, 0), i.CANVAS_CLEAR_RECT && this.context.clearRect(0, 0, this.width, this.height), this.renderDisplayObject(t, !1), e.Texture.frameUpdates.length > 0 && (e.Texture.frameUpdates.length = 0); }), (e.CanvasRenderer.prototype.renderDisplayObject = function (t, s) { var n = t.last._iNext; t = t.first; do if (t.visible || s) if (t.renderable && 0 !== t.alpha) { if (t instanceof e.Sprite) t.texture.frame && ((this.context.globalAlpha = t.worldAlpha), i.CANVAS_PX_ROUND ? this.context.setTransform(t.worldTransform[0], t.worldTransform[3], t.worldTransform[1], t.worldTransform[4], Math.floor(t.worldTransform[2]), Math.floor(t.worldTransform[5])) : this.context.setTransform(t.worldTransform[0], t.worldTransform[3], t.worldTransform[1], t.worldTransform[4], t.worldTransform[2], t.worldTransform[5]), t.texture.trimmed && this.context.transform(1, 0, 0, 1, t.texture.trim.x, t.texture.trim.y), this.smoothProperty && this.scaleMode !== t.texture.baseTexture.scaleMode && ((this.scaleMode = t.texture.baseTexture.scaleMode), (this.context[this.smoothProperty] = this.scaleMode === e.BaseTexture.SCALE_MODE.LINEAR)), this.context.drawImage( t.texture.baseTexture.source, t.texture.frame.x, t.texture.frame.y, t.texture.frame.width, t.texture.frame.height, Math.floor(t.anchor.x * -t.texture.frame.width), Math.floor(t.anchor.y * -t.texture.frame.height), t.texture.frame.width, t.texture.frame.height )); else if (t instanceof e.Strip) this.context.setTransform(t.worldTransform[0], t.worldTransform[3], t.worldTransform[1], t.worldTransform[4], t.worldTransform[2], t.worldTransform[5]), this.renderStrip(t); else if (t instanceof e.TilingSprite) this.context.setTransform(t.worldTransform[0], t.worldTransform[3], t.worldTransform[1], t.worldTransform[4], t.worldTransform[2], t.worldTransform[5]), this.renderTilingSprite(t); else if (t instanceof e.CustomRenderable) t.renderCanvas(this); else if (t instanceof e.Graphics) this.context.setTransform(t.worldTransform[0], t.worldTransform[3], t.worldTransform[1], t.worldTransform[4], t.worldTransform[2], t.worldTransform[5]), e.CanvasGraphics.renderGraphics(t, this.context); else if (t instanceof e.FilterBlock) if (t.open) { this.context.save(); var r = t.mask.alpha, o = t.mask.worldTransform; this.context.setTransform(o[0], o[3], o[1], o[4], o[2], o[5]), (t.mask.worldAlpha = 0.5), (this.context.worldAlpha = 0), e.CanvasGraphics.renderGraphicsMask(t.mask, this.context), this.context.clip(), (t.mask.worldAlpha = r); } else this.context.restore(); t = t._iNext; } else t = t._iNext; else t = t.last._iNext; while (t != n); }), (e.WebGLBatch.prototype.update = function () { for (var t, i, s, n, r, o, a, h, l, c, u, d, p, f, g, m, y = 0, _ = this.head; _; ) { if (_.vcount === e.visibleCount) { if ( ((i = _.texture.frame.width), (s = _.texture.frame.height), (n = _.anchor.x), (r = _.anchor.y), (o = i * (1 - n)), (a = i * -n), (h = s * (1 - r)), (l = s * -r), (c = 8 * y), (t = _.worldTransform), (u = t[0]), (d = t[3]), (p = t[1]), (f = t[4]), (g = t[2]), (m = t[5]), _.texture.trimmed && ((g += _.texture.trim.x), (m += _.texture.trim.y)), (this.verticies[c + 0] = u * a + p * l + g), (this.verticies[c + 1] = f * l + d * a + m), (this.verticies[c + 2] = u * o + p * l + g), (this.verticies[c + 3] = f * l + d * o + m), (this.verticies[c + 4] = u * o + p * h + g), (this.verticies[c + 5] = f * h + d * o + m), (this.verticies[c + 6] = u * a + p * h + g), (this.verticies[c + 7] = f * h + d * a + m), _.updateFrame || _.texture.updateFrame) ) { this.dirtyUVS = !0; var x = _.texture, v = x.frame, b = x.baseTexture.width, w = x.baseTexture.height; (this.uvs[c + 0] = v.x / b), (this.uvs[c + 1] = v.y / w), (this.uvs[c + 2] = (v.x + v.width) / b), (this.uvs[c + 3] = v.y / w), (this.uvs[c + 4] = (v.x + v.width) / b), (this.uvs[c + 5] = (v.y + v.height) / w), (this.uvs[c + 6] = v.x / b), (this.uvs[c + 7] = (v.y + v.height) / w), (_.updateFrame = !1); } if (_.cacheAlpha != _.worldAlpha) { _.cacheAlpha = _.worldAlpha; var T = 4 * y; (this.colors[T] = this.colors[T + 1] = this.colors[T + 2] = this.colors[T + 3] = _.worldAlpha), (this.dirtyColors = !0); } } else (c = 8 * y), (this.verticies[c + 0] = 0), (this.verticies[c + 1] = 0), (this.verticies[c + 2] = 0), (this.verticies[c + 3] = 0), (this.verticies[c + 4] = 0), (this.verticies[c + 5] = 0), (this.verticies[c + 6] = 0), (this.verticies[c + 7] = 0); y++, (_ = _.__next); } }), i ); }); var DEBUG, FLAP, GAME_HEIGHT, GRAVITY, GROUND_HEIGHT, GROUND_Y, HEIGHT, OPENING, SCALE, SPAWN_RATE, SPEED, WIDTH, WebFontConfig, bg, bird, deadInvs, deadTubeBottoms, deadTubeTops, fallSnd, flapSnd, floor, gameOver, gameOverText, gameStarted, githubHtml, ground, hurtSnd, instText, invs, main, parent, score, scoreSnd, scoreText, swooshSnd, tubes, tubesTimer; (DEBUG = !1), (SPEED = 160), (GRAVITY = 1100), (FLAP = 320), (SPAWN_RATE = 1 / 1200), (OPENING = 100), (SCALE = 1), (HEIGHT = 384), (WIDTH = 288), (GAME_HEIGHT = 336), (GROUND_HEIGHT = 64), (GROUND_Y = HEIGHT - GROUND_HEIGHT), (parent = document.querySelector("#screen")), (gameStarted = void 0), (gameOver = void 0), (deadTubeTops = []), (deadTubeBottoms = []), (deadInvs = []), (bg = null), (tubes = null), (invs = null), (bird = null), (ground = null), (score = null), (scoreText = null), (instText = null), (gameOverText = null), (flapSnd = null), (scoreSnd = null), (hurtSnd = null), (fallSnd = null), (swooshSnd = null), (tubesTimer = null), (githubHtml = ''), (floor = Math.floor), (main = function () { var t, e, i, s, n, r, o, a, h, l, c, u, d; (h = function (t, e) { var i, n, r; return ( (i = null), (n = e ? "tubeTop" : "tubeBottom"), (r = floor(e ? t - OPENING / 2 - 320 : t + OPENING / 2)), deadTubeTops.length > 0 && "tubeTop" === n ? ((i = deadTubeTops.pop().revive()), i.reset(s.world.width, r)) : deadTubeBottoms.length > 0 && "tubeBottom" === n ? ((i = deadTubeBottoms.pop().revive()), i.reset(s.world.width, r)) : ((i = tubes.create(s.world.width, r, n)), (i.body.allowGravity = !1)), (i.body.velocity.x = -SPEED), i ); }), (l = function () { var t, e, i, n; tubes.forEachAlive(function (t) { t.x + t.width < s.world.bounds.left && ("tubeTop" === t.key && deadTubeTops.push(t.kill()), "tubeBottom" === t.key && deadTubeBottoms.push(t.kill())); }), invs.forEachAlive(function (t) { t.x + t.width < s.world.bounds.left && deadInvs.push(t.kill()); }), (n = s.world.height / 2 + (Math.random() - 0.5) * s.world.height * 0.2), (t = h(n)), (i = h(n, !0)), deadInvs.length > 0 ? (e = deadInvs .pop() .revive() .reset(i.x + i.width / 2, 0)) : ((e = invs.create(i.x + i.width / 2, 0)), (e.width = 2), (e.height = s.world.height), (e.body.allowGravity = !1)), (e.body.velocity.x = -SPEED); }), (t = function (t, e) { invs.remove(e), (score += 1), scoreText.setText(score), scoreSnd.play(); }), (a = function () { var t; (gameOver = !0), bird.body.velocity.y > 0 && (bird.body.velocity.y = 100), bird.animations.stop(), (bird.frame = 1), instText.setText("TOUCH\nTO TRY AGAIN"), (instText.renderable = !0), (t = window.localStorage.getItem("hiscore")), (t = t ? t : score), (t = score > parseInt(t, 10) ? score : t), window.localStorage.setItem("hiscore", t), gameOverText.setText("GAMEOVER\n\nHIGH SCORE\n\n" + t), (gameOverText.renderable = !0), tubes.forEachAlive(function (t) { t.body.velocity.x = 0; }), invs.forEach(function (t) { t.body.velocity.x = 0; }), s.time.events.remove(tubesTimer), s.time.events.add(1e3, function () { return s.input.onTap.addOnce(function () { return o(), swooshSnd.play(); }); }), hurtSnd.play(); }), (i = function () { var t; gameStarted || c(), gameOver || ((bird.body.gravity.y = 0), (bird.body.velocity.y = -100), (t = s.add.tween(bird.body.velocity).to({ y: -FLAP }, 25, Phaser.Easing.Bounce.In, !0)), t.onComplete.add(function () { return (bird.body.gravity.y = GRAVITY); }), flapSnd.play()); }), (n = function () { var t; (t = { spritesheet: { bird: ["assets/bird.png", 36, 26] }, image: { tubeTop: ["assets/tube1.png"], tubeBottom: ["assets/tube2.png"], ground: ["assets/ground.png"], bg: ["assets/bg.png"] }, audio: { flap: ["assets/sfx_wing.mp3"], score: ["assets/sfx_point.mp3"], hurt: ["assets/sfx_hit.mp3"], fall: ["assets/sfx_die.mp3"], swoosh: ["assets/sfx_swooshing.mp3"] }, }), Object.keys(t).forEach(function (e) { Object.keys(t[e]).forEach(function (i) { s.load[e].apply(s.load, [i].concat(t[e][i])); }); }); }), (e = function () { var t; console.log("%chttps://github.com/hyspace/flappy", "color: black; font-size: x-large"), (t = window.innerWidth / window.innerHeight), (t > 1.15 || 0.7 > t) && (document.querySelector("#github").innerHTML = githubHtml), (document.querySelector("#loading").style.display = "none"), Phaser.Canvas.setSmoothingEnabled(s.context, !1), (s.stage.scaleMode = Phaser.StageScaleMode.SHOW_ALL), s.stage.scale.setScreenSize(!0), (s.world.width = WIDTH), (s.world.height = HEIGHT), (bg = s.add.tileSprite(0, 0, WIDTH, HEIGHT, "bg")), (tubes = s.add.group()), (invs = s.add.group()), (bird = s.add.sprite(0, 0, "bird")), bird.anchor.setTo(0.5, 0.5), bird.animations.add("fly", [0, 1, 2], 10, !0), (bird.body.collideWorldBounds = !0), bird.body.setPolygon(24, 1, 34, 16, 30, 32, 20, 24, 12, 34, 2, 12, 14, 2), (ground = s.add.tileSprite(0, GROUND_Y, WIDTH, GROUND_HEIGHT, "ground")), ground.tileScale.setTo(SCALE, SCALE), (scoreText = s.add.text(s.world.width / 2, s.world.height / 4, "", { font: '16px "Press Start 2P"', fill: "#fff", stroke: "#430", strokeThickness: 4, align: "center" })), scoreText.anchor.setTo(0.5, 0.5), (instText = s.add.text(s.world.width / 2, s.world.height - s.world.height / 4, "", { font: '8px "Press Start 2P"', fill: "#fff", stroke: "#430", strokeThickness: 4, align: "center" })), instText.anchor.setTo(0.5, 0.5), (gameOverText = s.add.text(s.world.width / 2, s.world.height / 2, "", { font: '16px "Press Start 2P"', fill: "#fff", stroke: "#430", strokeThickness: 4, align: "center" })), gameOverText.anchor.setTo(0.5, 0.5), gameOverText.scale.setTo(SCALE, SCALE), (flapSnd = s.add.audio("flap")), (scoreSnd = s.add.audio("score")), (hurtSnd = s.add.audio("hurt")), (fallSnd = s.add.audio("fall")), (swooshSnd = s.add.audio("swoosh")), s.input.onDown.add(i), o(); }), (o = function () { (gameStarted = !1), (gameOver = !1), (score = 0), scoreText.setText("Flappy Bird"), instText.setText("TOUCH TO FLAP\nbird WINGS"), (gameOverText.renderable = !1), (bird.body.allowGravity = !1), bird.reset(0.3 * s.world.width, s.world.height / 2), (bird.angle = 0), bird.animations.play("fly"), tubes.removeAll(), invs.removeAll(); }), (c = function () { (bird.body.allowGravity = !0), (bird.body.gravity.y = GRAVITY), (tubesTimer = s.time.events.loop(1 / SPAWN_RATE, l)), scoreText.setText(score), (instText.renderable = !1), (gameStarted = !0); }), (d = function () { var e; gameStarted ? gameOver ? ((e = s.add.tween(bird).to({ angle: 90 }, 100, Phaser.Easing.Bounce.Out, !0)), bird.body.bottom >= GROUND_Y + 3 && ((bird.y = GROUND_Y - 13), (bird.body.velocity.y = 0), (bird.body.allowGravity = !1), (bird.body.gravity.y = 0))) : ((bird.angle = (90 * (FLAP + bird.body.velocity.y)) / FLAP - 180), bird.angle < -30 && (bird.angle = -30), bird.angle > 80 ? ((bird.angle = 90), bird.animations.stop(), (bird.frame = 1)) : bird.animations.play(), s.physics.overlap(bird, tubes, function () { return a(), fallSnd.play(); }), !gameOver && bird.body.bottom >= GROUND_Y && a(), s.physics.overlap(bird, invs, t)) : ((bird.y = s.world.height / 2 + 8 * Math.cos(s.time.now / 200)), (bird.angle = 0)), gameOver || (ground.tilePosition.x -= s.time.physicsElapsed * SPEED); }), (r = function () { DEBUG && (s.debug.renderSpriteBody(bird), tubes.forEachAlive(function (t) { s.debug.renderSpriteBody(t); }), invs.forEach(function (t) { s.debug.renderSpriteBody(t); })); }), (u = { preload: n, create: e, update: d, render: r }), (s = new Phaser.Game(WIDTH, HEIGHT, Phaser.CANVAS, parent, u, !1, !1)); }), (WebFontConfig = { google: { families: ["Press+Start+2P::latin"] }, active: main }), (function () { var t, e; return ( (e = document.createElement("script")), (e.src = ("https:" === document.location.protocol ? "https" : "http") + "://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"), (e.type = "text/javascript"), (e.async = "true"), (t = document.getElementsByTagName("script")[0]), t.parentNode.insertBefore(e, t) ); })();