var Phaser; (function (Phaser) { var Basic = (function () { function Basic(game) { this.name = ''; this._game = game; this.ID = -1; this.exists = true; this.active = true; this.visible = true; this.alive = true; this.isGroup = false; this.ignoreDrawDebug = false; } Basic.prototype.destroy = function () { }; Basic.prototype.preUpdate = function () { }; Basic.prototype.update = function () { }; Basic.prototype.postUpdate = function () { }; Basic.prototype.render = function (camera, cameraOffsetX, cameraOffsetY) { }; Basic.prototype.kill = function () { this.alive = false; this.exists = false; }; Basic.prototype.revive = function () { this.alive = true; this.exists = true; }; Basic.prototype.toString = function () { return ""; }; return Basic; })(); Phaser.Basic = Basic; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Cache = (function () { function Cache(game) { this._game = game; this._canvases = { }; this._images = { }; this._sounds = { }; this._text = { }; } Cache.prototype.addCanvas = function (key, canvas, context) { this._canvases[key] = { canvas: canvas, context: context }; }; Cache.prototype.addSpriteSheet = function (key, url, data, frameWidth, frameHeight, frameMax) { this._images[key] = { url: url, data: data, spriteSheet: true, frameWidth: frameWidth, frameHeight: frameHeight }; this._images[key].frameData = Phaser.AnimationLoader.parseSpriteSheet(this._game, key, frameWidth, frameHeight, frameMax); }; Cache.prototype.addTextureAtlas = function (key, url, data, jsonData) { this._images[key] = { url: url, data: data, spriteSheet: true }; this._images[key].frameData = Phaser.AnimationLoader.parseJSONData(this._game, jsonData); }; Cache.prototype.addImage = function (key, url, data) { this._images[key] = { url: url, data: data, spriteSheet: false }; }; Cache.prototype.addSound = function (key, url, data) { this._sounds[key] = { url: url, data: data, decoded: false }; }; Cache.prototype.decodedSound = function (key, data) { this._sounds[key].data = data; this._sounds[key].decoded = true; }; Cache.prototype.addText = function (key, url, data) { this._text[key] = { url: url, data: data }; }; Cache.prototype.getCanvas = function (key) { if(this._canvases[key]) { return this._canvases[key].canvas; } return null; }; Cache.prototype.getImage = function (key) { if(this._images[key]) { return this._images[key].data; } return null; }; Cache.prototype.getFrameData = function (key) { if(this._images[key] && this._images[key].spriteSheet == true) { return this._images[key].frameData; } return null; }; Cache.prototype.getSound = function (key) { if(this._sounds[key]) { return this._sounds[key].data; } return null; }; Cache.prototype.isSoundDecoded = function (key) { if(this._sounds[key]) { return this._sounds[key].decoded; } }; Cache.prototype.isSpriteSheet = function (key) { if(this._images[key]) { return this._images[key].spriteSheet; } }; Cache.prototype.getText = function (key) { if(this._text[key]) { return this._text[key].data; } return null; }; Cache.prototype.destroy = function () { for(var item in this._canvases) { delete this._canvases[item['key']]; } for(var item in this._images) { delete this._images[item['key']]; } for(var item in this._sounds) { delete this._sounds[item['key']]; } for(var item in this._text) { delete this._text[item['key']]; } }; return Cache; })(); Phaser.Cache = Cache; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var SignalBinding = (function () { function SignalBinding(signal, listener, isOnce, listenerContext, priority) { if (typeof priority === "undefined") { priority = 0; } this.active = true; this.params = null; this._listener = listener; this._isOnce = isOnce; this.context = listenerContext; this._signal = signal; this.priority = priority || 0; } SignalBinding.prototype.execute = function (paramsArr) { var handlerReturn; var params; if(this.active && !!this._listener) { params = this.params ? this.params.concat(paramsArr) : paramsArr; handlerReturn = this._listener.apply(this.context, params); if(this._isOnce) { this.detach(); } } return handlerReturn; }; SignalBinding.prototype.detach = function () { return this.isBound() ? this._signal.remove(this._listener, this.context) : null; }; SignalBinding.prototype.isBound = function () { return (!!this._signal && !!this._listener); }; SignalBinding.prototype.isOnce = function () { return this._isOnce; }; SignalBinding.prototype.getListener = function () { return this._listener; }; SignalBinding.prototype.getSignal = function () { return this._signal; }; SignalBinding.prototype._destroy = function () { delete this._signal; delete this._listener; delete this.context; }; SignalBinding.prototype.toString = function () { return '[SignalBinding isOnce:' + this._isOnce + ', isBound:' + this.isBound() + ', active:' + this.active + ']'; }; return SignalBinding; })(); Phaser.SignalBinding = SignalBinding; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Signal = (function () { function Signal() { this._bindings = []; this._prevParams = null; this.memorize = false; this._shouldPropagate = true; this.active = true; } Signal.VERSION = '1.0.0'; Signal.prototype.validateListener = function (listener, fnName) { if(typeof listener !== 'function') { throw new Error('listener is a required param of {fn}() and should be a Function.'.replace('{fn}', fnName)); } }; Signal.prototype._registerListener = function (listener, isOnce, listenerContext, priority) { var prevIndex = this._indexOfListener(listener, listenerContext); var binding; if(prevIndex !== -1) { binding = this._bindings[prevIndex]; if(binding.isOnce() !== isOnce) { throw new Error('You cannot add' + (isOnce ? '' : 'Once') + '() then add' + (!isOnce ? '' : 'Once') + '() the same listener without removing the relationship first.'); } } else { binding = new Phaser.SignalBinding(this, listener, isOnce, listenerContext, priority); this._addBinding(binding); } if(this.memorize && this._prevParams) { binding.execute(this._prevParams); } return binding; }; Signal.prototype._addBinding = function (binding) { var n = this._bindings.length; do { --n; }while(this._bindings[n] && binding.priority <= this._bindings[n].priority); this._bindings.splice(n + 1, 0, binding); }; Signal.prototype._indexOfListener = function (listener, context) { var n = this._bindings.length; var cur; while(n--) { cur = this._bindings[n]; if(cur.getListener() === listener && cur.context === context) { return n; } } return -1; }; Signal.prototype.has = function (listener, context) { if (typeof context === "undefined") { context = null; } return this._indexOfListener(listener, context) !== -1; }; Signal.prototype.add = function (listener, listenerContext, priority) { if (typeof listenerContext === "undefined") { listenerContext = null; } if (typeof priority === "undefined") { priority = 0; } this.validateListener(listener, 'add'); return this._registerListener(listener, false, listenerContext, priority); }; Signal.prototype.addOnce = function (listener, listenerContext, priority) { if (typeof listenerContext === "undefined") { listenerContext = null; } if (typeof priority === "undefined") { priority = 0; } this.validateListener(listener, 'addOnce'); return this._registerListener(listener, true, listenerContext, priority); }; Signal.prototype.remove = function (listener, context) { if (typeof context === "undefined") { context = null; } this.validateListener(listener, 'remove'); var i = this._indexOfListener(listener, context); if(i !== -1) { this._bindings[i]._destroy(); this._bindings.splice(i, 1); } return listener; }; Signal.prototype.removeAll = function () { var n = this._bindings.length; while(n--) { this._bindings[n]._destroy(); } this._bindings.length = 0; }; Signal.prototype.getNumListeners = function () { return this._bindings.length; }; Signal.prototype.halt = function () { this._shouldPropagate = false; }; Signal.prototype.dispatch = function () { var paramsArr = []; for (var _i = 0; _i < (arguments.length - 0); _i++) { paramsArr[_i] = arguments[_i + 0]; } if(!this.active) { return; } var n = this._bindings.length; var bindings; if(this.memorize) { this._prevParams = paramsArr; } if(!n) { return; } bindings = this._bindings.slice(0); this._shouldPropagate = true; do { n--; }while(bindings[n] && this._shouldPropagate && bindings[n].execute(paramsArr) !== false); }; Signal.prototype.forget = function () { this._prevParams = null; }; Signal.prototype.dispose = function () { this.removeAll(); delete this._bindings; delete this._prevParams; }; Signal.prototype.toString = function () { return '[Signal active:' + this.active + ' numListeners:' + this.getNumListeners() + ']'; }; return Signal; })(); Phaser.Signal = Signal; })(Phaser || (Phaser = {})); var __extends = this.__extends || function (d, b) { function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; var Phaser; (function (Phaser) { var GameObject = (function (_super) { __extends(GameObject, _super); function GameObject(game, x, y, width, height) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof width === "undefined") { width = 16; } if (typeof height === "undefined") { height = 16; } _super.call(this, game); this._angle = 0; this.z = 0; this.moves = true; this.inputEnabled = false; this._inputOver = false; this.bounds = new Phaser.Rectangle(x, y, width, height); this.exists = true; this.active = true; this.visible = true; this.alive = true; this.isGroup = false; this.alpha = 1; this.scale = new Phaser.MicroPoint(1, 1); this.last = new Phaser.MicroPoint(x, y); this.origin = new Phaser.MicroPoint(this.bounds.halfWidth, this.bounds.halfHeight); this.align = GameObject.ALIGN_TOP_LEFT; this.mass = 1.0; this.elasticity = 0.0; this.health = 1; this.immovable = false; this.moves = true; this.touching = Phaser.Collision.NONE; this.wasTouching = Phaser.Collision.NONE; this.allowCollisions = Phaser.Collision.ANY; this.velocity = new Phaser.MicroPoint(); this.acceleration = new Phaser.MicroPoint(); this.drag = new Phaser.MicroPoint(); this.maxVelocity = new Phaser.MicroPoint(10000, 10000); this.angle = 0; this.angularVelocity = 0; this.angularAcceleration = 0; this.angularDrag = 0; this.maxAngular = 10000; this.scrollFactor = new Phaser.MicroPoint(1.0, 1.0); } GameObject.ALIGN_TOP_LEFT = 0; GameObject.ALIGN_TOP_CENTER = 1; GameObject.ALIGN_TOP_RIGHT = 2; GameObject.ALIGN_CENTER_LEFT = 3; GameObject.ALIGN_CENTER = 4; GameObject.ALIGN_CENTER_RIGHT = 5; GameObject.ALIGN_BOTTOM_LEFT = 6; GameObject.ALIGN_BOTTOM_CENTER = 7; GameObject.ALIGN_BOTTOM_RIGHT = 8; GameObject.prototype.preUpdate = function () { this.last.x = this.bounds.x; this.last.y = this.bounds.y; }; GameObject.prototype.update = function () { }; GameObject.prototype.postUpdate = function () { if(this.moves) { this.updateMotion(); } if(this.inputEnabled) { this.updateInput(); } this.wasTouching = this.touching; this.touching = Phaser.Collision.NONE; }; GameObject.prototype.updateInput = function () { }; GameObject.prototype.updateMotion = function () { var delta; var velocityDelta; velocityDelta = (this._game.motion.computeVelocity(this.angularVelocity, this.angularAcceleration, this.angularDrag, this.maxAngular) - this.angularVelocity) / 2; this.angularVelocity += velocityDelta; this._angle += this.angularVelocity * this._game.time.elapsed; this.angularVelocity += velocityDelta; velocityDelta = (this._game.motion.computeVelocity(this.velocity.x, this.acceleration.x, this.drag.x, this.maxVelocity.x) - this.velocity.x) / 2; this.velocity.x += velocityDelta; delta = this.velocity.x * this._game.time.elapsed; this.velocity.x += velocityDelta; this.bounds.x += delta; velocityDelta = (this._game.motion.computeVelocity(this.velocity.y, this.acceleration.y, this.drag.y, this.maxVelocity.y) - this.velocity.y) / 2; this.velocity.y += velocityDelta; delta = this.velocity.y * this._game.time.elapsed; this.velocity.y += velocityDelta; this.bounds.y += delta; }; GameObject.prototype.overlaps = function (ObjectOrGroup, InScreenSpace, Camera) { if (typeof InScreenSpace === "undefined") { InScreenSpace = false; } if (typeof Camera === "undefined") { Camera = null; } if(ObjectOrGroup.isGroup) { var results = false; var i = 0; var members = ObjectOrGroup.members; while(i < length) { if(this.overlaps(members[i++], InScreenSpace, Camera)) { results = true; } } return results; } if(!InScreenSpace) { return (ObjectOrGroup.x + ObjectOrGroup.width > this.x) && (ObjectOrGroup.x < this.x + this.width) && (ObjectOrGroup.y + ObjectOrGroup.height > this.y) && (ObjectOrGroup.y < this.y + this.height); } if(Camera == null) { Camera = this._game.camera; } var objectScreenPos = ObjectOrGroup.getScreenXY(null, Camera); this.getScreenXY(this._point, Camera); return (objectScreenPos.x + ObjectOrGroup.width > this._point.x) && (objectScreenPos.x < this._point.x + this.width) && (objectScreenPos.y + ObjectOrGroup.height > this._point.y) && (objectScreenPos.y < this._point.y + this.height); }; GameObject.prototype.overlapsAt = function (X, Y, ObjectOrGroup, InScreenSpace, Camera) { if (typeof InScreenSpace === "undefined") { InScreenSpace = false; } if (typeof Camera === "undefined") { Camera = null; } if(ObjectOrGroup.isGroup) { var results = false; var basic; var i = 0; var members = ObjectOrGroup.members; while(i < length) { if(this.overlapsAt(X, Y, members[i++], InScreenSpace, Camera)) { results = true; } } return results; } if(!InScreenSpace) { return (ObjectOrGroup.x + ObjectOrGroup.width > X) && (ObjectOrGroup.x < X + this.width) && (ObjectOrGroup.y + ObjectOrGroup.height > Y) && (ObjectOrGroup.y < Y + this.height); } if(Camera == null) { Camera = this._game.camera; } var objectScreenPos = ObjectOrGroup.getScreenXY(null, Camera); this._point.x = X - Camera.scroll.x * this.scrollFactor.x; this._point.y = Y - Camera.scroll.y * this.scrollFactor.y; this._point.x += (this._point.x > 0) ? 0.0000001 : -0.0000001; this._point.y += (this._point.y > 0) ? 0.0000001 : -0.0000001; return (objectScreenPos.x + ObjectOrGroup.width > this._point.x) && (objectScreenPos.x < this._point.x + this.width) && (objectScreenPos.y + ObjectOrGroup.height > this._point.y) && (objectScreenPos.y < this._point.y + this.height); }; GameObject.prototype.overlapsPoint = function (point, InScreenSpace, Camera) { if (typeof InScreenSpace === "undefined") { InScreenSpace = false; } if (typeof Camera === "undefined") { Camera = null; } if(!InScreenSpace) { return (point.x > this.x) && (point.x < this.x + this.width) && (point.y > this.y) && (point.y < this.y + this.height); } if(Camera == null) { Camera = this._game.camera; } var X = point.x - Camera.scroll.x; var Y = point.y - Camera.scroll.y; this.getScreenXY(this._point, Camera); return (X > this._point.x) && (X < this._point.x + this.width) && (Y > this._point.y) && (Y < this._point.y + this.height); }; GameObject.prototype.onScreen = function (Camera) { if (typeof Camera === "undefined") { Camera = null; } if(Camera == null) { Camera = this._game.camera; } this.getScreenXY(this._point, Camera); return (this._point.x + this.width > 0) && (this._point.x < Camera.width) && (this._point.y + this.height > 0) && (this._point.y < Camera.height); }; GameObject.prototype.getScreenXY = function (point, Camera) { if (typeof point === "undefined") { point = null; } if (typeof Camera === "undefined") { Camera = null; } if(point == null) { point = new Phaser.MicroPoint(); } if(Camera == null) { Camera = this._game.camera; } point.x = this.x - Camera.scroll.x * this.scrollFactor.x; point.y = this.y - Camera.scroll.y * this.scrollFactor.y; point.x += (point.x > 0) ? 0.0000001 : -0.0000001; point.y += (point.y > 0) ? 0.0000001 : -0.0000001; return point; }; Object.defineProperty(GameObject.prototype, "solid", { get: function () { return (this.allowCollisions & Phaser.Collision.ANY) > Phaser.Collision.NONE; }, set: function (Solid) { if(Solid) { this.allowCollisions = Phaser.Collision.ANY; } else { this.allowCollisions = Phaser.Collision.NONE; } }, enumerable: true, configurable: true }); GameObject.prototype.getMidpoint = function (point) { if (typeof point === "undefined") { point = null; } if(point == null) { point = new Phaser.MicroPoint(); } point.copyFrom(this.bounds.center); return point; }; GameObject.prototype.reset = function (X, Y) { this.revive(); this.touching = Phaser.Collision.NONE; this.wasTouching = Phaser.Collision.NONE; this.x = X; this.y = Y; this.last.x = X; this.last.y = Y; this.velocity.x = 0; this.velocity.y = 0; }; GameObject.prototype.isTouching = function (Direction) { return (this.touching & Direction) > Phaser.Collision.NONE; }; GameObject.prototype.justTouched = function (Direction) { return ((this.touching & Direction) > Phaser.Collision.NONE) && ((this.wasTouching & Direction) <= Phaser.Collision.NONE); }; GameObject.prototype.hurt = function (Damage) { this.health = this.health - Damage; if(this.health <= 0) { this.kill(); } }; GameObject.prototype.destroy = function () { }; Object.defineProperty(GameObject.prototype, "x", { get: function () { return this.bounds.x; }, set: function (value) { this.bounds.x = value; }, enumerable: true, configurable: true }); Object.defineProperty(GameObject.prototype, "y", { get: function () { return this.bounds.y; }, set: function (value) { this.bounds.y = value; }, enumerable: true, configurable: true }); Object.defineProperty(GameObject.prototype, "rotation", { get: function () { return this._angle; }, set: function (value) { this._angle = this._game.math.wrap(value, 360, 0); }, enumerable: true, configurable: true }); Object.defineProperty(GameObject.prototype, "angle", { get: function () { return this._angle; }, set: function (value) { this._angle = this._game.math.wrap(value, 360, 0); }, enumerable: true, configurable: true }); Object.defineProperty(GameObject.prototype, "width", { get: function () { return this.bounds.width; }, set: function (value) { this.bounds.width = value; }, enumerable: true, configurable: true }); Object.defineProperty(GameObject.prototype, "height", { get: function () { return this.bounds.height; }, set: function (value) { this.bounds.height = value; }, enumerable: true, configurable: true }); return GameObject; })(Phaser.Basic); Phaser.GameObject = GameObject; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Sprite = (function (_super) { __extends(Sprite, _super); function Sprite(game, x, y, key) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof key === "undefined") { key = null; } _super.call(this, game, x, y); this._dynamicTexture = false; this._sx = 0; this._sy = 0; this._sw = 0; this._sh = 0; this._dx = 0; this._dy = 0; this._dw = 0; this._dh = 0; this.renderDebug = false; this.renderDebugColor = 'rgba(0,255,0,0.5)'; this.renderDebugPointColor = 'rgba(255,255,255,1)'; this._texture = null; this.animations = new Phaser.AnimationManager(this._game, this); if(key !== null) { this.loadGraphic(key); } else { this.bounds.width = 16; this.bounds.height = 16; } } Sprite.prototype.loadGraphic = function (key) { if(this._game.cache.getImage(key) !== null) { if(this._game.cache.isSpriteSheet(key) == false) { this._texture = this._game.cache.getImage(key); this.bounds.width = this._texture.width; this.bounds.height = this._texture.height; } else { this._texture = this._game.cache.getImage(key); this.animations.loadFrameData(this._game.cache.getFrameData(key)); } this._dynamicTexture = false; } return this; }; Sprite.prototype.loadDynamicTexture = function (texture) { this._texture = texture; this.bounds.width = this._texture.width; this.bounds.height = this._texture.height; this._dynamicTexture = true; return this; }; Sprite.prototype.makeGraphic = function (width, height, color) { if (typeof color === "undefined") { color = 0xffffffff; } this._texture = null; this.width = width; this.height = height; this._dynamicTexture = false; return this; }; Sprite.prototype.inCamera = function (camera) { if(this.scrollFactor.x !== 1.0 || this.scrollFactor.y !== 1.0) { this._dx = this.bounds.x - (camera.x * this.scrollFactor.x); this._dy = this.bounds.y - (camera.y * this.scrollFactor.x); this._dw = this.bounds.width * this.scale.x; this._dh = this.bounds.height * this.scale.y; return (camera.right > this._dx) && (camera.x < this._dx + this._dw) && (camera.bottom > this._dy) && (camera.y < this._dy + this._dh); } else { return camera.intersects(this.bounds, this.bounds.length); } }; Sprite.prototype.postUpdate = function () { this.animations.update(); _super.prototype.postUpdate.call(this); }; Object.defineProperty(Sprite.prototype, "frame", { get: function () { return this.animations.frame; }, set: function (value) { this.animations.frame = value; }, enumerable: true, configurable: true }); Object.defineProperty(Sprite.prototype, "frameName", { get: function () { return this.animations.frameName; }, set: function (value) { this.animations.frameName = value; }, enumerable: true, configurable: true }); Sprite.prototype.render = function (camera, cameraOffsetX, cameraOffsetY) { if(this.visible === false || this.scale.x == 0 || this.scale.y == 0 || this.alpha < 0.1 || this.inCamera(camera.worldView) == false) { return false; } if(this.alpha !== 1) { var globalAlpha = this._game.stage.context.globalAlpha; this._game.stage.context.globalAlpha = this.alpha; } this._sx = 0; this._sy = 0; this._sw = this.bounds.width; this._sh = this.bounds.height; this._dx = cameraOffsetX + (this.bounds.topLeft.x - camera.worldView.x); this._dy = cameraOffsetY + (this.bounds.topLeft.y - camera.worldView.y); this._dw = this.bounds.width * this.scale.x; this._dh = this.bounds.height * this.scale.y; if(this.align == Phaser.GameObject.ALIGN_TOP_CENTER) { this._dx -= this.bounds.halfWidth * this.scale.x; } else if(this.align == Phaser.GameObject.ALIGN_TOP_RIGHT) { this._dx -= this.bounds.width * this.scale.x; } else if(this.align == Phaser.GameObject.ALIGN_CENTER_LEFT) { this._dy -= this.bounds.halfHeight * this.scale.y; } else if(this.align == Phaser.GameObject.ALIGN_CENTER) { this._dx -= this.bounds.halfWidth * this.scale.x; this._dy -= this.bounds.halfHeight * this.scale.y; } else if(this.align == Phaser.GameObject.ALIGN_CENTER_RIGHT) { this._dx -= this.bounds.width * this.scale.x; this._dy -= this.bounds.halfHeight * this.scale.y; } else if(this.align == Phaser.GameObject.ALIGN_BOTTOM_LEFT) { this._dy -= this.bounds.height * this.scale.y; } else if(this.align == Phaser.GameObject.ALIGN_BOTTOM_CENTER) { this._dx -= this.bounds.halfWidth * this.scale.x; this._dy -= this.bounds.height * this.scale.y; } else if(this.align == Phaser.GameObject.ALIGN_BOTTOM_RIGHT) { this._dx -= this.bounds.width * this.scale.x; this._dy -= this.bounds.height * this.scale.y; } if(this._dynamicTexture == false && this.animations.currentFrame !== null) { this._sx = this.animations.currentFrame.x; this._sy = this.animations.currentFrame.y; if(this.animations.currentFrame.trimmed) { this._dx += this.animations.currentFrame.spriteSourceSizeX; this._dy += this.animations.currentFrame.spriteSourceSizeY; } } if(this.scrollFactor.x !== 1.0 || this.scrollFactor.y !== 1.0) { this._dx -= (camera.worldView.x * this.scrollFactor.x); this._dy -= (camera.worldView.y * this.scrollFactor.y); } if(this.angle !== 0) { this._game.stage.context.save(); this._game.stage.context.translate(this._dx + (this._dw / 2), this._dy + (this._dh / 2)); this._game.stage.context.rotate(this.angle * (Math.PI / 180)); this._dx = -(this._dw / 2); this._dy = -(this._dh / 2); } this._sx = Math.round(this._sx); this._sy = Math.round(this._sy); this._sw = Math.round(this._sw); this._sh = Math.round(this._sh); this._dx = Math.round(this._dx); this._dy = Math.round(this._dy); this._dw = Math.round(this._dw); this._dh = Math.round(this._dh); if(this._texture != null) { if(this._dynamicTexture) { this._game.stage.context.drawImage(this._texture.canvas, this._sx, this._sy, this._sw, this._sh, this._dx, this._dy, this._dw, this._dh); } else { this._game.stage.context.drawImage(this._texture, this._sx, this._sy, this._sw, this._sh, this._dx, this._dy, this._dw, this._dh); } } else { this._game.stage.context.fillStyle = 'rgb(255,255,255)'; this._game.stage.context.fillRect(this._dx, this._dy, this._dw, this._dh); } if(this.renderDebug) { this.renderBounds(camera, cameraOffsetX, cameraOffsetY); } if(this.rotation !== 0) { this._game.stage.context.translate(0, 0); this._game.stage.context.restore(); } if(globalAlpha > -1) { this._game.stage.context.globalAlpha = globalAlpha; } return true; }; Sprite.prototype.renderBounds = function (camera, cameraOffsetX, cameraOffsetY) { this._dx = cameraOffsetX + (this.bounds.topLeft.x - camera.worldView.x); this._dy = cameraOffsetY + (this.bounds.topLeft.y - camera.worldView.y); this._game.stage.context.fillStyle = this.renderDebugColor; this._game.stage.context.fillRect(this._dx, this._dy, this._dw, this._dh); this._game.stage.context.fillStyle = this.renderDebugPointColor; var hw = this.bounds.halfWidth * this.scale.x; var hh = this.bounds.halfHeight * this.scale.y; var sw = (this.bounds.width * this.scale.x) - 1; var sh = (this.bounds.height * this.scale.y) - 1; this._game.stage.context.fillRect(this._dx, this._dy, 1, 1); this._game.stage.context.fillRect(this._dx + hw, this._dy, 1, 1); this._game.stage.context.fillRect(this._dx + sw, this._dy, 1, 1); this._game.stage.context.fillRect(this._dx, this._dy + hh, 1, 1); this._game.stage.context.fillRect(this._dx + hw, this._dy + hh, 1, 1); this._game.stage.context.fillRect(this._dx + sw, this._dy + hh, 1, 1); this._game.stage.context.fillRect(this._dx, this._dy + sh, 1, 1); this._game.stage.context.fillRect(this._dx + hw, this._dy + sh, 1, 1); this._game.stage.context.fillRect(this._dx + sw, this._dy + sh, 1, 1); }; Sprite.prototype.renderDebugInfo = function (x, y, color) { if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } this._game.stage.context.fillStyle = color; this._game.stage.context.fillText('Sprite: ' + this.name + ' (' + this.bounds.width + ' x ' + this.bounds.height + ')', x, y); this._game.stage.context.fillText('x: ' + this.bounds.x.toFixed(1) + ' y: ' + this.bounds.y.toFixed(1) + ' rotation: ' + this.angle.toFixed(1), x, y + 14); this._game.stage.context.fillText('dx: ' + this._dx.toFixed(1) + ' dy: ' + this._dy.toFixed(1) + ' dw: ' + this._dw.toFixed(1) + ' dh: ' + this._dh.toFixed(1), x, y + 28); this._game.stage.context.fillText('sx: ' + this._sx.toFixed(1) + ' sy: ' + this._sy.toFixed(1) + ' sw: ' + this._sw.toFixed(1) + ' sh: ' + this._sh.toFixed(1), x, y + 42); }; return Sprite; })(Phaser.GameObject); Phaser.Sprite = Sprite; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Camera = (function () { function Camera(game, id, x, y, width, height) { this._clip = false; this._rotation = 0; this._target = null; this._sx = 0; this._sy = 0; this._fxFlashComplete = null; this._fxFlashDuration = 0; this._fxFlashAlpha = 0; this._fxFadeComplete = null; this._fxFadeDuration = 0; this._fxFadeAlpha = 0; this._fxShakeIntensity = 0; this._fxShakeDuration = 0; this._fxShakeComplete = null; this._fxShakeOffset = new Phaser.Point(0, 0); this._fxShakeDirection = 0; this._fxShakePrevX = 0; this._fxShakePrevY = 0; this.scale = new Phaser.Point(1, 1); this.scroll = new Phaser.Point(0, 0); this.bounds = null; this.deadzone = null; this.showBorder = false; this.borderColor = 'rgb(255,255,255)'; this.opaque = true; this._bgColor = 'rgb(0,0,0)'; this._bgTextureRepeat = 'repeat'; this.showShadow = false; this.shadowColor = 'rgb(0,0,0)'; this.shadowBlur = 10; this.shadowOffset = new Phaser.Point(4, 4); this.visible = true; this.alpha = 1; this.inputX = 0; this.inputY = 0; this._game = game; this.ID = id; this._stageX = x; this._stageY = y; this.worldView = new Phaser.Rectangle(0, 0, width, height); this.checkClip(); } Camera.STYLE_LOCKON = 0; Camera.STYLE_PLATFORMER = 1; Camera.STYLE_TOPDOWN = 2; Camera.STYLE_TOPDOWN_TIGHT = 3; Camera.SHAKE_BOTH_AXES = 0; Camera.SHAKE_HORIZONTAL_ONLY = 1; Camera.SHAKE_VERTICAL_ONLY = 2; Camera.prototype.flash = function (color, duration, onComplete, force) { if (typeof color === "undefined") { color = 0xffffff; } if (typeof duration === "undefined") { duration = 1; } if (typeof onComplete === "undefined") { onComplete = null; } if (typeof force === "undefined") { force = false; } if(force === false && this._fxFlashAlpha > 0) { return; } if(duration <= 0) { duration = 1; } var red = color >> 16 & 0xFF; var green = color >> 8 & 0xFF; var blue = color & 0xFF; this._fxFlashColor = 'rgba(' + red + ',' + green + ',' + blue + ','; this._fxFlashDuration = duration; this._fxFlashAlpha = 1; this._fxFlashComplete = onComplete; }; Camera.prototype.fade = function (color, duration, onComplete, force) { if (typeof color === "undefined") { color = 0x000000; } if (typeof duration === "undefined") { duration = 1; } if (typeof onComplete === "undefined") { onComplete = null; } if (typeof force === "undefined") { force = false; } if(force === false && this._fxFadeAlpha > 0) { return; } if(duration <= 0) { duration = 1; } var red = color >> 16 & 0xFF; var green = color >> 8 & 0xFF; var blue = color & 0xFF; this._fxFadeColor = 'rgba(' + red + ',' + green + ',' + blue + ','; this._fxFadeDuration = duration; this._fxFadeAlpha = 0.01; this._fxFadeComplete = onComplete; }; Camera.prototype.shake = function (intensity, duration, onComplete, force, direction) { if (typeof intensity === "undefined") { intensity = 0.05; } if (typeof duration === "undefined") { duration = 0.5; } if (typeof onComplete === "undefined") { onComplete = null; } if (typeof force === "undefined") { force = true; } if (typeof direction === "undefined") { direction = Camera.SHAKE_BOTH_AXES; } if(!force && ((this._fxShakeOffset.x != 0) || (this._fxShakeOffset.y != 0))) { return; } if(this._fxShakeOffset.x == 0 && this._fxShakeOffset.y == 0) { this._fxShakePrevX = this._stageX; this._fxShakePrevY = this._stageY; } this._fxShakeIntensity = intensity; this._fxShakeDuration = duration; this._fxShakeComplete = onComplete; this._fxShakeDirection = direction; this._fxShakeOffset.setTo(0, 0); }; Camera.prototype.stopFX = function () { this._fxFlashAlpha = 0; this._fxFadeAlpha = 0; if(this._fxShakeDuration !== 0) { this._fxShakeDuration = 0; this._fxShakeOffset.setTo(0, 0); this._stageX = this._fxShakePrevX; this._stageY = this._fxShakePrevY; } }; Camera.prototype.follow = function (target, style) { if (typeof style === "undefined") { style = Camera.STYLE_LOCKON; } this._target = target; var helper; switch(style) { case Camera.STYLE_PLATFORMER: var w = this.width / 8; var h = this.height / 3; this.deadzone = new Phaser.Rectangle((this.width - w) / 2, (this.height - h) / 2 - h * 0.25, w, h); break; case Camera.STYLE_TOPDOWN: helper = Math.max(this.width, this.height) / 4; this.deadzone = new Phaser.Rectangle((this.width - helper) / 2, (this.height - helper) / 2, helper, helper); break; case Camera.STYLE_TOPDOWN_TIGHT: helper = Math.max(this.width, this.height) / 8; this.deadzone = new Phaser.Rectangle((this.width - helper) / 2, (this.height - helper) / 2, helper, helper); break; case Camera.STYLE_LOCKON: default: this.deadzone = null; break; } }; Camera.prototype.focusOnXY = function (x, y) { x += (x > 0) ? 0.0000001 : -0.0000001; y += (y > 0) ? 0.0000001 : -0.0000001; this.scroll.x = Math.round(x - this.worldView.halfWidth); this.scroll.y = Math.round(y - this.worldView.halfHeight); }; Camera.prototype.focusOn = function (point) { point.x += (point.x > 0) ? 0.0000001 : -0.0000001; point.y += (point.y > 0) ? 0.0000001 : -0.0000001; this.scroll.x = Math.round(point.x - this.worldView.halfWidth); this.scroll.y = Math.round(point.y - this.worldView.halfHeight); }; Camera.prototype.setBounds = function (X, Y, Width, Height, UpdateWorld) { if (typeof X === "undefined") { X = 0; } if (typeof Y === "undefined") { Y = 0; } if (typeof Width === "undefined") { Width = 0; } if (typeof Height === "undefined") { Height = 0; } if (typeof UpdateWorld === "undefined") { UpdateWorld = false; } if(this.bounds == null) { this.bounds = new Phaser.Rectangle(); } this.bounds.setTo(X, Y, Width, Height); this.update(); }; Camera.prototype.update = function () { if(this._target !== null) { if(this.deadzone == null) { this.focusOnXY(this._target.x + this._target.origin.x, this._target.y + this._target.origin.y); } else { var edge; var targetX = this._target.x + ((this._target.x > 0) ? 0.0000001 : -0.0000001); var targetY = this._target.y + ((this._target.y > 0) ? 0.0000001 : -0.0000001); edge = targetX - this.deadzone.x; if(this.scroll.x > edge) { this.scroll.x = edge; } edge = targetX + this._target.width - this.deadzone.x - this.deadzone.width; if(this.scroll.x < edge) { this.scroll.x = edge; } edge = targetY - this.deadzone.y; if(this.scroll.y > edge) { this.scroll.y = edge; } edge = targetY + this._target.height - this.deadzone.y - this.deadzone.height; if(this.scroll.y < edge) { this.scroll.y = edge; } } } if(this.bounds !== null) { if(this.scroll.x < this.bounds.left) { this.scroll.x = this.bounds.left; } if(this.scroll.x > this.bounds.right - this.width) { this.scroll.x = this.bounds.right - this.width; } if(this.scroll.y < this.bounds.top) { this.scroll.y = this.bounds.top; } if(this.scroll.y > this.bounds.bottom - this.height) { this.scroll.y = this.bounds.bottom - this.height; } } this.worldView.x = this.scroll.x; this.worldView.y = this.scroll.y; this.inputX = this.worldView.x + this._game.input.x; this.inputY = this.worldView.y + this._game.input.y; if(this._fxFlashAlpha > 0) { this._fxFlashAlpha -= this._game.time.elapsed / this._fxFlashDuration; this._fxFlashAlpha = this._game.math.roundTo(this._fxFlashAlpha, -2); if(this._fxFlashAlpha <= 0) { this._fxFlashAlpha = 0; if(this._fxFlashComplete !== null) { this._fxFlashComplete(); } } } if(this._fxFadeAlpha > 0) { this._fxFadeAlpha += this._game.time.elapsed / this._fxFadeDuration; this._fxFadeAlpha = this._game.math.roundTo(this._fxFadeAlpha, -2); if(this._fxFadeAlpha >= 1) { this._fxFadeAlpha = 1; if(this._fxFadeComplete !== null) { this._fxFadeComplete(); } } } if(this._fxShakeDuration > 0) { this._fxShakeDuration -= this._game.time.elapsed; this._fxShakeDuration = this._game.math.roundTo(this._fxShakeDuration, -2); if(this._fxShakeDuration <= 0) { this._fxShakeDuration = 0; this._fxShakeOffset.setTo(0, 0); this._stageX = this._fxShakePrevX; this._stageY = this._fxShakePrevY; if(this._fxShakeComplete != null) { this._fxShakeComplete(); } } else { if((this._fxShakeDirection == Camera.SHAKE_BOTH_AXES) || (this._fxShakeDirection == Camera.SHAKE_HORIZONTAL_ONLY)) { this._fxShakeOffset.x = (this._game.math.random() * this._fxShakeIntensity * this.worldView.width * 2 - this._fxShakeIntensity * this.worldView.width); } if((this._fxShakeDirection == Camera.SHAKE_BOTH_AXES) || (this._fxShakeDirection == Camera.SHAKE_VERTICAL_ONLY)) { this._fxShakeOffset.y = (this._game.math.random() * this._fxShakeIntensity * this.worldView.height * 2 - this._fxShakeIntensity * this.worldView.height); } } } }; Camera.prototype.render = function () { if(this.visible === false && this.alpha < 0.1) { return; } if((this._fxShakeOffset.x != 0) || (this._fxShakeOffset.y != 0)) { this._stageX = this._fxShakePrevX + (this.worldView.halfWidth) + this._fxShakeOffset.x; this._stageY = this._fxShakePrevY + (this.worldView.halfHeight) + this._fxShakeOffset.y; } this._game.stage.context.save(); if(this.alpha !== 1) { this._game.stage.context.globalAlpha = this.alpha; } this._sx = this._stageX; this._sy = this._stageY; if(this.showShadow) { this._game.stage.context.shadowColor = this.shadowColor; this._game.stage.context.shadowBlur = this.shadowBlur; this._game.stage.context.shadowOffsetX = this.shadowOffset.x; this._game.stage.context.shadowOffsetY = this.shadowOffset.y; } if(this.scale.x !== 1 || this.scale.y !== 1) { this._game.stage.context.scale(this.scale.x, this.scale.y); this._sx = this._sx / this.scale.x; this._sy = this._sy / this.scale.y; } if(this._rotation !== 0) { this._game.stage.context.translate(this._sx + this.worldView.halfWidth, this._sy + this.worldView.halfHeight); this._game.stage.context.rotate(this._rotation * (Math.PI / 180)); this._game.stage.context.translate(-(this._sx + this.worldView.halfWidth), -(this._sy + this.worldView.halfHeight)); } if(this.opaque == true) { if(this._bgTexture) { this._game.stage.context.fillStyle = this._bgTexture; this._game.stage.context.fillRect(this._sx, this._sy, this.worldView.width, this.worldView.height); } else { this._game.stage.context.fillStyle = this._bgColor; this._game.stage.context.fillRect(this._sx, this._sy, this.worldView.width, this.worldView.height); } } if(this.showShadow) { this._game.stage.context.shadowBlur = 0; this._game.stage.context.shadowOffsetX = 0; this._game.stage.context.shadowOffsetY = 0; } if(this._clip) { this._game.stage.context.beginPath(); this._game.stage.context.rect(this._sx, this._sy, this.worldView.width, this.worldView.height); this._game.stage.context.closePath(); this._game.stage.context.clip(); } this._game.world.group.render(this, this._sx, this._sy); if(this.showBorder) { this._game.stage.context.strokeStyle = this.borderColor; this._game.stage.context.lineWidth = 1; this._game.stage.context.rect(this._sx, this._sy, this.worldView.width, this.worldView.height); this._game.stage.context.stroke(); } if(this._fxFlashAlpha > 0) { this._game.stage.context.fillStyle = this._fxFlashColor + this._fxFlashAlpha + ')'; this._game.stage.context.fillRect(this._sx, this._sy, this.worldView.width, this.worldView.height); } if(this._fxFadeAlpha > 0) { this._game.stage.context.fillStyle = this._fxFadeColor + this._fxFadeAlpha + ')'; this._game.stage.context.fillRect(this._sx, this._sy, this.worldView.width, this.worldView.height); } if(this.scale.x !== 1 || this.scale.y !== 1) { this._game.stage.context.scale(1, 1); } if(this._rotation !== 0 || this._clip) { this._game.stage.context.translate(0, 0); } this._game.stage.context.restore(); if(this.alpha !== 1) { this._game.stage.context.globalAlpha = 1; } }; Object.defineProperty(Camera.prototype, "backgroundColor", { get: function () { return this._bgColor; }, set: function (color) { this._bgColor = color; }, enumerable: true, configurable: true }); Camera.prototype.setTexture = function (key, repeat) { if (typeof repeat === "undefined") { repeat = 'repeat'; } this._bgTexture = this._game.stage.context.createPattern(this._game.cache.getImage(key), repeat); this._bgTextureRepeat = repeat; }; Camera.prototype.setPosition = function (x, y) { this._stageX = x; this._stageY = y; this.checkClip(); }; Camera.prototype.setSize = function (width, height) { this.worldView.width = width; this.worldView.height = height; this.checkClip(); }; Camera.prototype.renderDebugInfo = function (x, y, color) { if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } this._game.stage.context.fillStyle = color; this._game.stage.context.fillText('Camera ID: ' + this.ID + ' (' + this.worldView.width + ' x ' + this.worldView.height + ')', x, y); this._game.stage.context.fillText('X: ' + this._stageX + ' Y: ' + this._stageY + ' Rotation: ' + this._rotation, x, y + 14); this._game.stage.context.fillText('World X: ' + this.scroll.x.toFixed(1) + ' World Y: ' + this.scroll.y.toFixed(1), x, y + 28); if(this.bounds) { this._game.stage.context.fillText('Bounds: ' + this.bounds.width + ' x ' + this.bounds.height, x, y + 56); } }; Object.defineProperty(Camera.prototype, "x", { get: function () { return this._stageX; }, set: function (value) { this._stageX = value; this.checkClip(); }, enumerable: true, configurable: true }); Object.defineProperty(Camera.prototype, "y", { get: function () { return this._stageY; }, set: function (value) { this._stageY = value; this.checkClip(); }, enumerable: true, configurable: true }); Object.defineProperty(Camera.prototype, "width", { get: function () { return this.worldView.width; }, set: function (value) { this.worldView.width = value; this.checkClip(); }, enumerable: true, configurable: true }); Object.defineProperty(Camera.prototype, "height", { get: function () { return this.worldView.height; }, set: function (value) { this.worldView.height = value; this.checkClip(); }, enumerable: true, configurable: true }); Object.defineProperty(Camera.prototype, "rotation", { get: function () { return this._rotation; }, set: function (value) { this._rotation = this._game.math.wrap(value, 360, 0); }, enumerable: true, configurable: true }); Camera.prototype.checkClip = function () { if(this._stageX !== 0 || this._stageY !== 0 || this.worldView.width < this._game.stage.width || this.worldView.height < this._game.stage.height) { this._clip = true; } else { this._clip = false; } }; return Camera; })(); Phaser.Camera = Camera; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var CameraManager = (function () { function CameraManager(game, x, y, width, height) { this._game = game; this._cameras = []; this.current = this.addCamera(x, y, width, height); } CameraManager.prototype.getAll = function () { return this._cameras; }; CameraManager.prototype.update = function () { this._cameras.forEach(function (camera) { return camera.update(); }); }; CameraManager.prototype.render = function () { this._cameras.forEach(function (camera) { return camera.render(); }); }; CameraManager.prototype.addCamera = function (x, y, width, height) { var newCam = new Phaser.Camera(this._game, this._cameras.length, x, y, width, height); this._cameras.push(newCam); return newCam; }; CameraManager.prototype.removeCamera = function (id) { if(this._cameras[id]) { if(this.current === this._cameras[id]) { this.current = null; } this._cameras.splice(id, 1); return true; } else { return false; } }; CameraManager.prototype.destroy = function () { this._cameras.length = 0; this.current = this.addCamera(0, 0, this._game.stage.width, this._game.stage.height); }; return CameraManager; })(); Phaser.CameraManager = CameraManager; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Point = (function () { function Point(x, y) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } this.setTo(x, y); } Point.prototype.add = function (toAdd, output) { if (typeof output === "undefined") { output = new Point(); } return output.setTo(this.x + toAdd.x, this.y + toAdd.y); }; Point.prototype.addTo = function (x, y) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } return this.setTo(this.x + x, this.y + y); }; Point.prototype.subtractFrom = function (x, y) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } return this.setTo(this.x - x, this.y - y); }; Point.prototype.invert = function () { return this.setTo(this.y, this.x); }; Point.prototype.clamp = function (min, max) { this.clampX(min, max); this.clampY(min, max); return this; }; Point.prototype.clampX = function (min, max) { this.x = Math.max(Math.min(this.x, max), min); return this; }; Point.prototype.clampY = function (min, max) { this.x = Math.max(Math.min(this.x, max), min); this.y = Math.max(Math.min(this.y, max), min); return this; }; Point.prototype.clone = function (output) { if (typeof output === "undefined") { output = new Point(); } return output.setTo(this.x, this.y); }; Point.prototype.copyFrom = function (source) { return this.setTo(source.x, source.y); }; Point.prototype.copyTo = function (target) { return target.setTo(this.x, this.y); }; Point.prototype.distanceTo = function (target, round) { if (typeof round === "undefined") { round = false; } var dx = this.x - target.x; var dy = this.y - target.y; if(round === true) { return Math.round(Math.sqrt(dx * dx + dy * dy)); } else { return Math.sqrt(dx * dx + dy * dy); } }; Point.distanceBetween = function distanceBetween(pointA, pointB, round) { if (typeof round === "undefined") { round = false; } var dx = pointA.x - pointB.x; var dy = pointA.y - pointB.y; if(round === true) { return Math.round(Math.sqrt(dx * dx + dy * dy)); } else { return Math.sqrt(dx * dx + dy * dy); } }; Point.prototype.distanceCompare = function (target, distance) { if(this.distanceTo(target) >= distance) { return true; } else { return false; } }; Point.prototype.equals = function (toCompare) { if(this.x === toCompare.x && this.y === toCompare.y) { return true; } else { return false; } }; Point.prototype.interpolate = function (pointA, pointB, f) { }; Point.prototype.offset = function (dx, dy) { this.x += dx; this.y += dy; return this; }; Point.prototype.polar = function (length, angle) { }; Point.prototype.setTo = function (x, y) { this.x = x; this.y = y; return this; }; Point.prototype.subtract = function (point, output) { if (typeof output === "undefined") { output = new Point(); } return output.setTo(this.x - point.x, this.y - point.y); }; Point.prototype.toString = function () { return '[{Point (x=' + this.x + ' y=' + this.y + ')}]'; }; return Point; })(); Phaser.Point = Point; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var MicroPoint = (function () { function MicroPoint(x, y, parent) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof parent === "undefined") { parent = null; } this._x = x; this._y = y; this.parent = parent; } Object.defineProperty(MicroPoint.prototype, "x", { get: function () { return this._x; }, set: function (value) { this._x = value; if(this.parent) { this.parent.updateBounds(); } }, enumerable: true, configurable: true }); Object.defineProperty(MicroPoint.prototype, "y", { get: function () { return this._y; }, set: function (value) { this._y = value; if(this.parent) { this.parent.updateBounds(); } }, enumerable: true, configurable: true }); MicroPoint.prototype.copyFrom = function (source) { return this.setTo(source.x, source.y); }; MicroPoint.prototype.copyTo = function (target) { target.x = this._x; target.y = this._y; return target; }; MicroPoint.prototype.setTo = function (x, y, callParent) { if (typeof callParent === "undefined") { callParent = true; } this._x = x; this._y = y; if(this.parent != null && callParent == true) { this.parent.updateBounds(); } return this; }; MicroPoint.prototype.equals = function (toCompare) { if(this._x === toCompare.x && this._y === toCompare.y) { return true; } else { return false; } }; MicroPoint.prototype.toString = function () { return '[{MicroPoint (x=' + this._x + ' y=' + this._y + ')}]'; }; return MicroPoint; })(); Phaser.MicroPoint = MicroPoint; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Rectangle = (function () { function Rectangle(x, y, width, height) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof width === "undefined") { width = 0; } if (typeof height === "undefined") { height = 0; } this._tempX = null; this._tempY = null; this._tempWidth = null; this._tempHeight = null; this._width = 0; this._height = 0; this._halfWidth = 0; this._halfHeight = 0; this.length = 0; this._width = width; if(width > 0) { this._halfWidth = Math.round(width / 2); } this._height = height; if(height > 0) { this._halfHeight = Math.round(height / 2); } this.length = Math.max(this._width, this._height); this.topLeft = new Phaser.MicroPoint(x, y, this); this.topCenter = new Phaser.MicroPoint(x + this._halfWidth, y, this); this.topRight = new Phaser.MicroPoint(x + this._width - 1, y, this); this.leftCenter = new Phaser.MicroPoint(x, y + this._halfHeight, this); this.center = new Phaser.MicroPoint(x + this._halfWidth, y + this._halfHeight, this); this.rightCenter = new Phaser.MicroPoint(x + this._width - 1, y + this._halfHeight, this); this.bottomLeft = new Phaser.MicroPoint(x, y + this._height - 1, this); this.bottomCenter = new Phaser.MicroPoint(x + this._halfWidth, y + this._height - 1, this); this.bottomRight = new Phaser.MicroPoint(x + this._width - 1, y + this._height - 1, this); } Object.defineProperty(Rectangle.prototype, "x", { get: function () { return this.topLeft.x; }, set: function (value) { this.topLeft.x = value; }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "y", { get: function () { return this.topLeft.y; }, set: function (value) { this.topLeft.y = value; }, enumerable: true, configurable: true }); Rectangle.prototype.updateBounds = function () { if(this._tempWidth !== null) { this._width = this._tempWidth; this._halfWidth = 0; if(this._width > 0) { this._halfWidth = Math.round(this._width / 2); } } if(this._tempHeight !== null) { this._height = this._tempHeight; this._halfHeight = 0; if(this._height > 0) { this._halfHeight = Math.round(this._height / 2); } } this.length = Math.max(this._width, this._height); if(this._tempX !== null && this._tempY !== null) { this.topLeft.setTo(this._tempX, this._tempY, false); } else if(this._tempX !== null && this._tempY == null) { this.topLeft.setTo(this._tempX, this.topLeft.y, false); } else if(this._tempX == null && this._tempY !== null) { this.topLeft.setTo(this.topLeft.x, this._tempY, false); } else { this.topLeft.setTo(this.x, this.y, false); } this.topCenter.setTo(this.x + this._halfWidth, this.y, false); this.topRight.setTo(this.x + this._width - 1, this.y, false); this.leftCenter.setTo(this.x, this.y + this._halfHeight, false); this.center.setTo(this.x + this._halfWidth, this.y + this._halfHeight, false); this.rightCenter.setTo(this.x + this._width - 1, this.y + this._halfHeight, false); this.bottomLeft.setTo(this.x, this.y + this._height - 1, false); this.bottomCenter.setTo(this.x + this._halfWidth, this.y + this._height - 1, false); this.bottomRight.setTo(this.x + this._width - 1, this.y + this._height - 1, false); this._tempX = null; this._tempY = null; this._tempWidth = null; this._tempHeight = null; }; Object.defineProperty(Rectangle.prototype, "width", { get: function () { return this._width; }, set: function (value) { this._width = value; this._halfWidth = Math.round(value / 2); this.updateBounds(); }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "height", { get: function () { return this._height; }, set: function (value) { this._height = value; this._halfHeight = Math.round(value / 2); this.updateBounds(); }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "halfWidth", { get: function () { return this._halfWidth; }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "halfHeight", { get: function () { return this._halfHeight; }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "bottom", { get: function () { return this.bottomCenter.y; }, set: function (value) { if(value < this.y) { this._tempHeight = 0; } else { this._tempHeight = this.y + value; } this.updateBounds(); }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "left", { get: function () { return this.x; }, set: function (value) { var diff = this.x - value; if(this._width + diff < 0) { this._tempWidth = 0; this._tempX = value; } else { this._tempWidth = this._width + diff; this._tempX = value; } this.updateBounds(); }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "right", { get: function () { return this.rightCenter.x; }, set: function (value) { if(value < this.topLeft.x) { this._tempWidth = 0; } else { this._tempWidth = (value - this.topLeft.x); } this.updateBounds(); }, enumerable: true, configurable: true }); Rectangle.prototype.size = function (output) { if (typeof output === "undefined") { output = new Phaser.Point(); } return output.setTo(this._width, this._height); }; Object.defineProperty(Rectangle.prototype, "volume", { get: function () { return this._width * this._height; }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "perimeter", { get: function () { return (this._width * 2) + (this._height * 2); }, enumerable: true, configurable: true }); Object.defineProperty(Rectangle.prototype, "top", { get: function () { return this.topCenter.y; }, set: function (value) { var diff = this.topCenter.y - value; if(this._height + diff < 0) { this._tempHeight = 0; this._tempY = value; } else { this._tempHeight = this._height + diff; this._tempY = value; } this.updateBounds(); }, enumerable: true, configurable: true }); Rectangle.prototype.clone = function (output) { if (typeof output === "undefined") { output = new Rectangle(); } return output.setTo(this.x, this.y, this.width, this.height); }; Rectangle.prototype.contains = function (x, y) { if(x >= this.topLeft.x && x <= this.topRight.x && y >= this.topLeft.y && y <= this.bottomRight.y) { return true; } return false; }; Rectangle.prototype.containsPoint = function (point) { return this.contains(point.x, point.y); }; Rectangle.prototype.containsRect = function (rect) { if(rect.volume > this.volume) { return false; } if(rect.x >= this.topLeft.x && rect.y >= this.topLeft.y && rect.rightCenter.x <= this.rightCenter.x && rect.bottomCenter.y <= this.bottomCenter.y) { return true; } return false; }; Rectangle.prototype.copyFrom = function (source) { return this.setTo(source.x, source.y, source.width, source.height); }; Rectangle.prototype.copyTo = function (target) { return target.copyFrom(this); }; Rectangle.prototype.equals = function (toCompare) { if(this.topLeft.equals(toCompare.topLeft) && this.bottomRight.equals(toCompare.bottomRight)) { return true; } return false; }; Rectangle.prototype.inflate = function (dx, dy) { this._tempX = this.topLeft.x - dx; this._tempWidth = this._width + (2 * dx); this._tempY = this.topLeft.y - dy; this._tempHeight = this._height + (2 * dy); this.updateBounds(); return this; }; Rectangle.prototype.inflatePoint = function (point) { return this.inflate(point.x, point.y); }; Rectangle.prototype.intersection = function (toIntersect, output) { if (typeof output === "undefined") { output = new Rectangle(); } if(this.intersects(toIntersect) === true) { output.x = Math.max(toIntersect.topLeft.x, this.topLeft.x); output.y = Math.max(toIntersect.topLeft.y, this.topLeft.y); output.width = Math.min(toIntersect.rightCenter.x, this.rightCenter.x) - output.x; output.height = Math.min(toIntersect.bottomCenter.y, this.bottomCenter.y) - output.y; } return output; }; Rectangle.prototype.intersects = function (r2, t) { if (typeof t === "undefined") { t = 0; } return !(r2.left > this.right + t || r2.right < this.left - t || r2.top > this.bottom + t || r2.bottom < this.top - t); }; Object.defineProperty(Rectangle.prototype, "isEmpty", { get: function () { if(this.width < 1 || this.height < 1) { return true; } return false; }, enumerable: true, configurable: true }); Rectangle.prototype.offset = function (dx, dy) { if(!isNaN(dx) && !isNaN(dy)) { this.x += dx; this.y += dy; } return this; }; Rectangle.prototype.offsetPoint = function (point) { return this.offset(point.x, point.y); }; Rectangle.prototype.setEmpty = function () { return this.setTo(0, 0, 0, 0); }; Rectangle.prototype.setTo = function (x, y, width, height) { this._tempX = x; this._tempY = y; this._tempWidth = width; this._tempHeight = height; this.updateBounds(); return this; }; Rectangle.prototype.union = function (toUnion, output) { if (typeof output === "undefined") { output = new Rectangle(); } return output.setTo(Math.min(toUnion.x, this.x), Math.min(toUnion.y, this.y), Math.max(toUnion.right, this.right), Math.max(toUnion.bottom, this.bottom)); }; Rectangle.prototype.toString = function () { return "[{Rectangle (x=" + this.x + " y=" + this.y + " width=" + this.width + " height=" + this.height + " empty=" + this.isEmpty + ")}]"; }; return Rectangle; })(); Phaser.Rectangle = Rectangle; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Circle = (function () { function Circle(x, y, diameter) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof diameter === "undefined") { diameter = 0; } this._diameter = 0; this._radius = 0; this.x = 0; this.y = 0; this.setTo(x, y, diameter); } Object.defineProperty(Circle.prototype, "diameter", { get: function () { return this._diameter; }, set: function (value) { if(value > 0) { this._diameter = value; this._radius = value * 0.5; } }, enumerable: true, configurable: true }); Object.defineProperty(Circle.prototype, "radius", { get: function () { return this._radius; }, set: function (value) { if(value > 0) { this._radius = value; this._diameter = value * 2; } }, enumerable: true, configurable: true }); Circle.prototype.circumference = function () { return 2 * (Math.PI * this._radius); }; Object.defineProperty(Circle.prototype, "bottom", { get: function () { return this.y + this._radius; }, set: function (value) { if(!isNaN(value)) { if(value < this.y) { this._radius = 0; this._diameter = 0; } else { this.radius = value - this.y; } } }, enumerable: true, configurable: true }); Object.defineProperty(Circle.prototype, "left", { get: function () { return this.x - this._radius; }, set: function (value) { if(!isNaN(value)) { if(value < this.x) { this.radius = this.x - value; } else { this._radius = 0; this._diameter = 0; } } }, enumerable: true, configurable: true }); Object.defineProperty(Circle.prototype, "right", { get: function () { return this.x + this._radius; }, set: function (value) { if(!isNaN(value)) { if(value > this.x) { this.radius = value - this.x; } else { this._radius = 0; this._diameter = 0; } } }, enumerable: true, configurable: true }); Object.defineProperty(Circle.prototype, "top", { get: function () { return this.y - this._radius; }, set: function (value) { if(!isNaN(value)) { if(value > this.y) { this._radius = 0; this._diameter = 0; } else { this.radius = this.y - value; } } }, enumerable: true, configurable: true }); Object.defineProperty(Circle.prototype, "area", { get: function () { if(this._radius > 0) { return Math.PI * this._radius * this._radius; } else { return 0; } }, enumerable: true, configurable: true }); Object.defineProperty(Circle.prototype, "isEmpty", { get: function () { if(this._diameter < 1) { return true; } return false; }, enumerable: true, configurable: true }); Circle.prototype.intersectCircleLine = function (line) { return Phaser.Collision.lineToCircle(line, this).result; }; Circle.prototype.clone = function (output) { if (typeof output === "undefined") { output = new Circle(); } return output.setTo(this.x, this.y, this._diameter); }; Circle.prototype.contains = function (x, y) { return Phaser.Collision.circleContainsPoint(this, { x: x, y: y }).result; }; Circle.prototype.containsPoint = function (point) { return Phaser.Collision.circleContainsPoint(this, point).result; }; Circle.prototype.containsCircle = function (circle) { return Phaser.Collision.circleToCircle(this, circle).result; }; Circle.prototype.copyFrom = function (source) { return this.setTo(source.x, source.y, source.diameter); }; Circle.prototype.copyTo = function (target) { return target.copyFrom(this); }; Circle.prototype.distanceTo = function (target, round) { if (typeof round === "undefined") { round = false; } var dx = this.x - target.x; var dy = this.y - target.y; if(round === true) { return Math.round(Math.sqrt(dx * dx + dy * dy)); } else { return Math.sqrt(dx * dx + dy * dy); } }; Circle.prototype.equals = function (toCompare) { if(this.x === toCompare.x && this.y === toCompare.y && this.diameter === toCompare.diameter) { return true; } return false; }; Circle.prototype.intersects = function (toIntersect) { if(this.distanceTo(toIntersect, false) < (this._radius + toIntersect._radius)) { return true; } return false; }; Circle.prototype.circumferencePoint = function (angle, asDegrees, output) { if (typeof asDegrees === "undefined") { asDegrees = false; } if (typeof output === "undefined") { output = new Phaser.Point(); } if(asDegrees === true) { angle = angle * Phaser.GameMath.DEG_TO_RAD; } output.x = this.x + this._radius * Math.cos(angle); output.y = this.y + this._radius * Math.sin(angle); return output; }; Circle.prototype.offset = function (dx, dy) { if(!isNaN(dx) && !isNaN(dy)) { this.x += dx; this.y += dy; } return this; }; Circle.prototype.offsetPoint = function (point) { return this.offset(point.x, point.y); }; Circle.prototype.setTo = function (x, y, diameter) { this.x = x; this.y = y; this._diameter = diameter; this._radius = diameter * 0.5; return this; }; Circle.prototype.toString = function () { return "[{Circle (x=" + this.x + " y=" + this.y + " diameter=" + this.diameter + " radius=" + this.radius + ")}]"; }; return Circle; })(); Phaser.Circle = Circle; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Line = (function () { function Line(x1, y1, x2, y2) { if (typeof x1 === "undefined") { x1 = 0; } if (typeof y1 === "undefined") { y1 = 0; } if (typeof x2 === "undefined") { x2 = 0; } if (typeof y2 === "undefined") { y2 = 0; } this.x1 = 0; this.y1 = 0; this.x2 = 0; this.y2 = 0; this.setTo(x1, y1, x2, y2); } Line.prototype.clone = function (output) { if (typeof output === "undefined") { output = new Line(); } return output.setTo(this.x1, this.y1, this.x2, this.y2); }; Line.prototype.copyFrom = function (source) { return this.setTo(source.x1, source.y1, source.x2, source.y2); }; Line.prototype.copyTo = function (target) { return target.copyFrom(this); }; Line.prototype.setTo = function (x1, y1, x2, y2) { if (typeof x1 === "undefined") { x1 = 0; } if (typeof y1 === "undefined") { y1 = 0; } if (typeof x2 === "undefined") { x2 = 0; } if (typeof y2 === "undefined") { y2 = 0; } this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; }; Object.defineProperty(Line.prototype, "width", { get: function () { return Math.max(this.x1, this.x2) - Math.min(this.x1, this.x2); }, enumerable: true, configurable: true }); Object.defineProperty(Line.prototype, "height", { get: function () { return Math.max(this.y1, this.y2) - Math.min(this.y1, this.y2); }, enumerable: true, configurable: true }); Object.defineProperty(Line.prototype, "length", { get: function () { return Math.sqrt((this.x2 - this.x1) * (this.x2 - this.x1) + (this.y2 - this.y1) * (this.y2 - this.y1)); }, enumerable: true, configurable: true }); Line.prototype.getY = function (x) { return this.slope * x + this.yIntercept; }; Object.defineProperty(Line.prototype, "angle", { get: function () { return Math.atan2(this.x2 - this.x1, this.y2 - this.y1); }, enumerable: true, configurable: true }); Object.defineProperty(Line.prototype, "slope", { get: function () { return (this.y2 - this.y1) / (this.x2 - this.x1); }, enumerable: true, configurable: true }); Object.defineProperty(Line.prototype, "perpSlope", { get: function () { return -((this.x2 - this.x1) / (this.y2 - this.y1)); }, enumerable: true, configurable: true }); Object.defineProperty(Line.prototype, "yIntercept", { get: function () { return (this.y1 - this.slope * this.x1); }, enumerable: true, configurable: true }); Line.prototype.isPointOnLine = function (x, y) { if((x - this.x1) * (this.y2 - this.y1) === (this.x2 - this.x1) * (y - this.y1)) { return true; } else { return false; } }; Line.prototype.isPointOnLineSegment = function (x, y) { var xMin = Math.min(this.x1, this.x2); var xMax = Math.max(this.x1, this.x2); var yMin = Math.min(this.y1, this.y2); var yMax = Math.max(this.y1, this.y2); if(this.isPointOnLine(x, y) && (x >= xMin && x <= xMax) && (y >= yMin && y <= yMax)) { return true; } else { return false; } }; Line.prototype.intersectLineLine = function (line) { }; Line.prototype.perp = function (x, y, output) { if(this.y1 === this.y2) { if(output) { output.setTo(x, y, x, this.y1); } else { return new Line(x, y, x, this.y1); } } var yInt = (y - this.perpSlope * x); var pt = this.intersectLineLine({ x1: x, y1: y, x2: 0, y2: yInt }); if(output) { output.setTo(x, y, pt.x, pt.y); } else { return new Line(x, y, pt.x, pt.y); } }; Line.prototype.toString = function () { return "[{Line (x1=" + this.x1 + " y1=" + this.y1 + " x2=" + this.x2 + " y2=" + this.y2 + ")}]"; }; return Line; })(); Phaser.Line = Line; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var IntersectResult = (function () { function IntersectResult() { this.result = false; } IntersectResult.prototype.setTo = function (x1, y1, x2, y2, width, height) { if (typeof x2 === "undefined") { x2 = 0; } if (typeof y2 === "undefined") { y2 = 0; } if (typeof width === "undefined") { width = 0; } if (typeof height === "undefined") { height = 0; } this.x = x1; this.y = y1; this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.width = width; this.height = height; }; return IntersectResult; })(); Phaser.IntersectResult = IntersectResult; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var LinkedList = (function () { function LinkedList() { this.object = null; this.next = null; } LinkedList.prototype.destroy = function () { this.object = null; if(this.next != null) { this.next.destroy(); } this.next = null; }; return LinkedList; })(); Phaser.LinkedList = LinkedList; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var QuadTree = (function (_super) { __extends(QuadTree, _super); function QuadTree(X, Y, Width, Height, Parent) { if (typeof Parent === "undefined") { Parent = null; } _super.call(this, X, Y, Width, Height); this._headA = this._tailA = new Phaser.LinkedList(); this._headB = this._tailB = new Phaser.LinkedList(); if(Parent != null) { var iterator; var ot; if(Parent._headA.object != null) { iterator = Parent._headA; while(iterator != null) { if(this._tailA.object != null) { ot = this._tailA; this._tailA = new Phaser.LinkedList(); ot.next = this._tailA; } this._tailA.object = iterator.object; iterator = iterator.next; } } if(Parent._headB.object != null) { iterator = Parent._headB; while(iterator != null) { if(this._tailB.object != null) { ot = this._tailB; this._tailB = new Phaser.LinkedList(); ot.next = this._tailB; } this._tailB.object = iterator.object; iterator = iterator.next; } } } else { QuadTree._min = (this.width + this.height) / (2 * QuadTree.divisions); } this._canSubdivide = (this.width > QuadTree._min) || (this.height > QuadTree._min); this._northWestTree = null; this._northEastTree = null; this._southEastTree = null; this._southWestTree = null; this._leftEdge = this.x; this._rightEdge = this.x + this.width; this._halfWidth = this.width / 2; this._midpointX = this._leftEdge + this._halfWidth; this._topEdge = this.y; this._bottomEdge = this.y + this.height; this._halfHeight = this.height / 2; this._midpointY = this._topEdge + this._halfHeight; } QuadTree.A_LIST = 0; QuadTree.B_LIST = 1; QuadTree.prototype.destroy = function () { this._tailA.destroy(); this._tailB.destroy(); this._headA.destroy(); this._headB.destroy(); this._tailA = null; this._tailB = null; this._headA = null; this._headB = null; if(this._northWestTree != null) { this._northWestTree.destroy(); } if(this._northEastTree != null) { this._northEastTree.destroy(); } if(this._southEastTree != null) { this._southEastTree.destroy(); } if(this._southWestTree != null) { this._southWestTree.destroy(); } this._northWestTree = null; this._northEastTree = null; this._southEastTree = null; this._southWestTree = null; QuadTree._object = null; QuadTree._processingCallback = null; QuadTree._notifyCallback = null; }; QuadTree.prototype.load = function (ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, ProcessCallback) { if (typeof ObjectOrGroup2 === "undefined") { ObjectOrGroup2 = null; } if (typeof NotifyCallback === "undefined") { NotifyCallback = null; } if (typeof ProcessCallback === "undefined") { ProcessCallback = null; } this.add(ObjectOrGroup1, QuadTree.A_LIST); if(ObjectOrGroup2 != null) { this.add(ObjectOrGroup2, QuadTree.B_LIST); QuadTree._useBothLists = true; } else { QuadTree._useBothLists = false; } QuadTree._notifyCallback = NotifyCallback; QuadTree._processingCallback = ProcessCallback; }; QuadTree.prototype.add = function (ObjectOrGroup, List) { QuadTree._list = List; if(ObjectOrGroup.isGroup == true) { var i = 0; var basic; var members = ObjectOrGroup['members']; var l = ObjectOrGroup['length']; while(i < l) { basic = members[i++]; if((basic != null) && basic.exists) { if(basic.isGroup) { this.add(basic, List); } else { QuadTree._object = basic; if(QuadTree._object.exists && QuadTree._object.allowCollisions) { QuadTree._objectLeftEdge = QuadTree._object.x; QuadTree._objectTopEdge = QuadTree._object.y; QuadTree._objectRightEdge = QuadTree._object.x + QuadTree._object.width; QuadTree._objectBottomEdge = QuadTree._object.y + QuadTree._object.height; this.addObject(); } } } } } else { QuadTree._object = ObjectOrGroup; if(QuadTree._object.exists && QuadTree._object.allowCollisions) { QuadTree._objectLeftEdge = QuadTree._object.x; QuadTree._objectTopEdge = QuadTree._object.y; QuadTree._objectRightEdge = QuadTree._object.x + QuadTree._object.width; QuadTree._objectBottomEdge = QuadTree._object.y + QuadTree._object.height; this.addObject(); } } }; QuadTree.prototype.addObject = function () { if(!this._canSubdivide || ((this._leftEdge >= QuadTree._objectLeftEdge) && (this._rightEdge <= QuadTree._objectRightEdge) && (this._topEdge >= QuadTree._objectTopEdge) && (this._bottomEdge <= QuadTree._objectBottomEdge))) { this.addToList(); return; } if((QuadTree._objectLeftEdge > this._leftEdge) && (QuadTree._objectRightEdge < this._midpointX)) { if((QuadTree._objectTopEdge > this._topEdge) && (QuadTree._objectBottomEdge < this._midpointY)) { if(this._northWestTree == null) { this._northWestTree = new QuadTree(this._leftEdge, this._topEdge, this._halfWidth, this._halfHeight, this); } this._northWestTree.addObject(); return; } if((QuadTree._objectTopEdge > this._midpointY) && (QuadTree._objectBottomEdge < this._bottomEdge)) { if(this._southWestTree == null) { this._southWestTree = new QuadTree(this._leftEdge, this._midpointY, this._halfWidth, this._halfHeight, this); } this._southWestTree.addObject(); return; } } if((QuadTree._objectLeftEdge > this._midpointX) && (QuadTree._objectRightEdge < this._rightEdge)) { if((QuadTree._objectTopEdge > this._topEdge) && (QuadTree._objectBottomEdge < this._midpointY)) { if(this._northEastTree == null) { this._northEastTree = new QuadTree(this._midpointX, this._topEdge, this._halfWidth, this._halfHeight, this); } this._northEastTree.addObject(); return; } if((QuadTree._objectTopEdge > this._midpointY) && (QuadTree._objectBottomEdge < this._bottomEdge)) { if(this._southEastTree == null) { this._southEastTree = new QuadTree(this._midpointX, this._midpointY, this._halfWidth, this._halfHeight, this); } this._southEastTree.addObject(); return; } } if((QuadTree._objectRightEdge > this._leftEdge) && (QuadTree._objectLeftEdge < this._midpointX) && (QuadTree._objectBottomEdge > this._topEdge) && (QuadTree._objectTopEdge < this._midpointY)) { if(this._northWestTree == null) { this._northWestTree = new QuadTree(this._leftEdge, this._topEdge, this._halfWidth, this._halfHeight, this); } this._northWestTree.addObject(); } if((QuadTree._objectRightEdge > this._midpointX) && (QuadTree._objectLeftEdge < this._rightEdge) && (QuadTree._objectBottomEdge > this._topEdge) && (QuadTree._objectTopEdge < this._midpointY)) { if(this._northEastTree == null) { this._northEastTree = new QuadTree(this._midpointX, this._topEdge, this._halfWidth, this._halfHeight, this); } this._northEastTree.addObject(); } if((QuadTree._objectRightEdge > this._midpointX) && (QuadTree._objectLeftEdge < this._rightEdge) && (QuadTree._objectBottomEdge > this._midpointY) && (QuadTree._objectTopEdge < this._bottomEdge)) { if(this._southEastTree == null) { this._southEastTree = new QuadTree(this._midpointX, this._midpointY, this._halfWidth, this._halfHeight, this); } this._southEastTree.addObject(); } if((QuadTree._objectRightEdge > this._leftEdge) && (QuadTree._objectLeftEdge < this._midpointX) && (QuadTree._objectBottomEdge > this._midpointY) && (QuadTree._objectTopEdge < this._bottomEdge)) { if(this._southWestTree == null) { this._southWestTree = new QuadTree(this._leftEdge, this._midpointY, this._halfWidth, this._halfHeight, this); } this._southWestTree.addObject(); } }; QuadTree.prototype.addToList = function () { var ot; if(QuadTree._list == QuadTree.A_LIST) { if(this._tailA.object != null) { ot = this._tailA; this._tailA = new Phaser.LinkedList(); ot.next = this._tailA; } this._tailA.object = QuadTree._object; } else { if(this._tailB.object != null) { ot = this._tailB; this._tailB = new Phaser.LinkedList(); ot.next = this._tailB; } this._tailB.object = QuadTree._object; } if(!this._canSubdivide) { return; } if(this._northWestTree != null) { this._northWestTree.addToList(); } if(this._northEastTree != null) { this._northEastTree.addToList(); } if(this._southEastTree != null) { this._southEastTree.addToList(); } if(this._southWestTree != null) { this._southWestTree.addToList(); } }; QuadTree.prototype.execute = function () { var overlapProcessed = false; var iterator; if(this._headA.object != null) { iterator = this._headA; while(iterator != null) { QuadTree._object = iterator.object; if(QuadTree._useBothLists) { QuadTree._iterator = this._headB; } else { QuadTree._iterator = iterator.next; } if(QuadTree._object.exists && (QuadTree._object.allowCollisions > 0) && (QuadTree._iterator != null) && (QuadTree._iterator.object != null) && QuadTree._iterator.object.exists && this.overlapNode()) { overlapProcessed = true; } iterator = iterator.next; } } if((this._northWestTree != null) && this._northWestTree.execute()) { overlapProcessed = true; } if((this._northEastTree != null) && this._northEastTree.execute()) { overlapProcessed = true; } if((this._southEastTree != null) && this._southEastTree.execute()) { overlapProcessed = true; } if((this._southWestTree != null) && this._southWestTree.execute()) { overlapProcessed = true; } return overlapProcessed; }; QuadTree.prototype.overlapNode = function () { var overlapProcessed = false; var checkObject; while(QuadTree._iterator != null) { if(!QuadTree._object.exists || (QuadTree._object.allowCollisions <= 0)) { break; } checkObject = QuadTree._iterator.object; if((QuadTree._object === checkObject) || !checkObject.exists || (checkObject.allowCollisions <= 0)) { QuadTree._iterator = QuadTree._iterator.next; continue; } QuadTree._objectHullX = (QuadTree._object.x < QuadTree._object.last.x) ? QuadTree._object.x : QuadTree._object.last.x; QuadTree._objectHullY = (QuadTree._object.y < QuadTree._object.last.y) ? QuadTree._object.y : QuadTree._object.last.y; QuadTree._objectHullWidth = QuadTree._object.x - QuadTree._object.last.x; QuadTree._objectHullWidth = QuadTree._object.width + ((QuadTree._objectHullWidth > 0) ? QuadTree._objectHullWidth : -QuadTree._objectHullWidth); QuadTree._objectHullHeight = QuadTree._object.y - QuadTree._object.last.y; QuadTree._objectHullHeight = QuadTree._object.height + ((QuadTree._objectHullHeight > 0) ? QuadTree._objectHullHeight : -QuadTree._objectHullHeight); QuadTree._checkObjectHullX = (checkObject.x < checkObject.last.x) ? checkObject.x : checkObject.last.x; QuadTree._checkObjectHullY = (checkObject.y < checkObject.last.y) ? checkObject.y : checkObject.last.y; QuadTree._checkObjectHullWidth = checkObject.x - checkObject.last.x; QuadTree._checkObjectHullWidth = checkObject.width + ((QuadTree._checkObjectHullWidth > 0) ? QuadTree._checkObjectHullWidth : -QuadTree._checkObjectHullWidth); QuadTree._checkObjectHullHeight = checkObject.y - checkObject.last.y; QuadTree._checkObjectHullHeight = checkObject.height + ((QuadTree._checkObjectHullHeight > 0) ? QuadTree._checkObjectHullHeight : -QuadTree._checkObjectHullHeight); if((QuadTree._objectHullX + QuadTree._objectHullWidth > QuadTree._checkObjectHullX) && (QuadTree._objectHullX < QuadTree._checkObjectHullX + QuadTree._checkObjectHullWidth) && (QuadTree._objectHullY + QuadTree._objectHullHeight > QuadTree._checkObjectHullY) && (QuadTree._objectHullY < QuadTree._checkObjectHullY + QuadTree._checkObjectHullHeight)) { if((QuadTree._processingCallback == null) || QuadTree._processingCallback(QuadTree._object, checkObject)) { overlapProcessed = true; } if(overlapProcessed && (QuadTree._notifyCallback != null)) { QuadTree._notifyCallback(QuadTree._object, checkObject); } } QuadTree._iterator = QuadTree._iterator.next; } return overlapProcessed; }; return QuadTree; })(Phaser.Rectangle); Phaser.QuadTree = QuadTree; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Collision = (function () { function Collision(game) { this._game = game; } Collision.LEFT = 0x0001; Collision.RIGHT = 0x0010; Collision.UP = 0x0100; Collision.DOWN = 0x1000; Collision.NONE = 0; Collision.CEILING = Collision.UP; Collision.FLOOR = Collision.DOWN; Collision.WALL = Collision.LEFT | Collision.RIGHT; Collision.ANY = Collision.LEFT | Collision.RIGHT | Collision.UP | Collision.DOWN; Collision.OVERLAP_BIAS = 4; Collision.lineToLine = function lineToLine(line1, line2, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var denom = (line1.x1 - line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 - line2.x2); if(denom !== 0) { output.result = true; output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.x1 - line2.x2) - (line1.x1 - line1.x2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom; output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (line2.y1 - line2.y2) - (line1.y1 - line1.y2) * (line2.x1 * line2.y2 - line2.y1 * line2.x2)) / denom; } return output; }; Collision.lineToLineSegment = function lineToLineSegment(line1, seg, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var denom = (line1.x1 - line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 - seg.x2); if(denom !== 0) { output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.x1 - seg.x2) - (line1.x1 - line1.x2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom; output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (seg.y1 - seg.y2) - (line1.y1 - line1.y2) * (seg.x1 * seg.y2 - seg.y1 * seg.x2)) / denom; var maxX = Math.max(seg.x1, seg.x2); var minX = Math.min(seg.x1, seg.x2); var maxY = Math.max(seg.y1, seg.y2); var minY = Math.min(seg.y1, seg.y2); if((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true) { output.result = true; } } return output; }; Collision.lineToRawSegment = function lineToRawSegment(line, x1, y1, x2, y2, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var denom = (line.x1 - line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 - x2); if(denom !== 0) { output.x = ((line.x1 * line.y2 - line.y1 * line.x2) * (x1 - x2) - (line.x1 - line.x2) * (x1 * y2 - y1 * x2)) / denom; output.y = ((line.x1 * line.y2 - line.y1 * line.x2) * (y1 - y2) - (line.y1 - line.y2) * (x1 * y2 - y1 * x2)) / denom; var maxX = Math.max(x1, x2); var minX = Math.min(x1, x2); var maxY = Math.max(y1, y2); var minY = Math.min(y1, y2); if((output.x <= maxX && output.x >= minX) === true || (output.y <= maxY && output.y >= minY) === true) { output.result = true; } } return output; }; Collision.lineToRay = function lineToRay(line1, ray, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var denom = (line1.x1 - line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 - ray.x2); if(denom !== 0) { output.x = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.x1 - ray.x2) - (line1.x1 - line1.x2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom; output.y = ((line1.x1 * line1.y2 - line1.y1 * line1.x2) * (ray.y1 - ray.y2) - (line1.y1 - line1.y2) * (ray.x1 * ray.y2 - ray.y1 * ray.x2)) / denom; output.result = true; if(!(ray.x1 >= ray.x2) && output.x < ray.x1) { output.result = false; } if(!(ray.y1 >= ray.y2) && output.y < ray.y1) { output.result = false; } } return output; }; Collision.lineToCircle = function lineToCircle(line, circle, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } if(line.perp(circle.x, circle.y).length <= circle.radius) { output.result = true; } return output; }; Collision.lineToRectangle = function lineToRectangle(line, rect, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } this.lineToRawSegment(line, rect.x, rect.y, rect.right, rect.y, output); if(output.result === true) { return output; } this.lineToRawSegment(line, rect.x, rect.y, rect.x, rect.bottom, output); if(output.result === true) { return output; } this.lineToRawSegment(line, rect.x, rect.bottom, rect.right, rect.bottom, output); if(output.result === true) { return output; } this.lineToRawSegment(line, rect.right, rect.y, rect.right, rect.bottom, output); return output; }; Collision.lineSegmentToLineSegment = function lineSegmentToLineSegment(line1, line2, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } this.lineToLineSegment(line1, line2, output); if(output.result === true) { if(!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2) && output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2))) { output.result = false; } } return output; }; Collision.lineSegmentToRay = function lineSegmentToRay(line1, ray, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } this.lineToRay(line1, ray, output); if(output.result === true) { if(!(output.x >= Math.min(line1.x1, line1.x2) && output.x <= Math.max(line1.x1, line1.x2) && output.y >= Math.min(line1.y1, line1.y2) && output.y <= Math.max(line1.y1, line1.y2))) { output.result = false; } } return output; }; Collision.lineSegmentToCircle = function lineSegmentToCircle(seg, circle, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var perp = seg.perp(circle.x, circle.y); if(perp.length <= circle.radius) { var maxX = Math.max(seg.x1, seg.x2); var minX = Math.min(seg.x1, seg.x2); var maxY = Math.max(seg.y1, seg.y2); var minY = Math.min(seg.y1, seg.y2); if((perp.x2 <= maxX && perp.x2 >= minX) && (perp.y2 <= maxY && perp.y2 >= minY)) { output.result = true; } else { if(this.circleContainsPoint(circle, { x: seg.x1, y: seg.y1 }) || this.circleContainsPoint(circle, { x: seg.x2, y: seg.y2 })) { output.result = true; } } } return output; }; Collision.lineSegmentToRectangle = function lineSegmentToRectangle(seg, rect, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } if(rect.contains(seg.x1, seg.y1) && rect.contains(seg.x2, seg.y2)) { output.result = true; } else { this.lineToRawSegment(seg, rect.x, rect.y, rect.right, rect.bottom, output); if(output.result === true) { return output; } this.lineToRawSegment(seg, rect.x, rect.y, rect.x, rect.bottom, output); if(output.result === true) { return output; } this.lineToRawSegment(seg, rect.x, rect.bottom, rect.right, rect.bottom, output); if(output.result === true) { return output; } this.lineToRawSegment(seg, rect.right, rect.y, rect.right, rect.bottom, output); return output; } return output; }; Collision.rayToRectangle = function rayToRectangle(ray, rect, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } this.lineToRectangle(ray, rect, output); return output; }; Collision.rayToLineSegment = function rayToLineSegment(rayx1, rayy1, rayx2, rayy2, linex1, liney1, linex2, liney2, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var r, s, d; if((rayy2 - rayy1) / (rayx2 - rayx1) != (liney2 - liney1) / (linex2 - linex1)) { d = (((rayx2 - rayx1) * (liney2 - liney1)) - (rayy2 - rayy1) * (linex2 - linex1)); if(d != 0) { r = (((rayy1 - liney1) * (linex2 - linex1)) - (rayx1 - linex1) * (liney2 - liney1)) / d; s = (((rayy1 - liney1) * (rayx2 - rayx1)) - (rayx1 - linex1) * (rayy2 - rayy1)) / d; if(r >= 0) { if(s >= 0 && s <= 1) { output.result = true; output.x = rayx1 + r * (rayx2 - rayx1) , rayy1 + r * (rayy2 - rayy1); } } } } return output; }; Collision.pointToRectangle = function pointToRectangle(point, rect, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } output.setTo(point.x, point.y); output.result = rect.containsPoint(point); return output; }; Collision.rectangleToRectangle = function rectangleToRectangle(rect1, rect2, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var leftX = Math.max(rect1.x, rect2.x); var rightX = Math.min(rect1.right, rect2.right); var topY = Math.max(rect1.y, rect2.y); var bottomY = Math.min(rect1.bottom, rect2.bottom); output.setTo(leftX, topY, rightX - leftX, bottomY - topY, rightX - leftX, bottomY - topY); var cx = output.x + output.width * .5; var cy = output.y + output.height * .5; if((cx > rect1.x && cx < rect1.right) && (cy > rect1.y && cy < rect1.bottom)) { output.result = true; } return output; }; Collision.rectangleToCircle = function rectangleToCircle(rect, circle, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } return this.circleToRectangle(circle, rect, output); }; Collision.circleToCircle = function circleToCircle(circle1, circle2, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } output.result = ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)) >= this.distanceSquared(circle1.x, circle1.y, circle2.x, circle2.y); return output; }; Collision.circleToRectangle = function circleToRectangle(circle, rect, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } var inflatedRect = rect.clone(); inflatedRect.inflate(circle.radius, circle.radius); output.result = inflatedRect.contains(circle.x, circle.y); return output; }; Collision.circleContainsPoint = function circleContainsPoint(circle, point, output) { if (typeof output === "undefined") { output = new Phaser.IntersectResult(); } output.result = circle.radius * circle.radius >= this.distanceSquared(circle.x, circle.y, point.x, point.y); return output; }; Collision.prototype.overlap = function (ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, ProcessCallback) { if (typeof ObjectOrGroup1 === "undefined") { ObjectOrGroup1 = null; } if (typeof ObjectOrGroup2 === "undefined") { ObjectOrGroup2 = null; } if (typeof NotifyCallback === "undefined") { NotifyCallback = null; } if (typeof ProcessCallback === "undefined") { ProcessCallback = null; } if(ObjectOrGroup1 == null) { ObjectOrGroup1 = this._game.world.group; } if(ObjectOrGroup2 == ObjectOrGroup1) { ObjectOrGroup2 = null; } Phaser.QuadTree.divisions = this._game.world.worldDivisions; var quadTree = new Phaser.QuadTree(this._game.world.bounds.x, this._game.world.bounds.y, this._game.world.bounds.width, this._game.world.bounds.height); quadTree.load(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, ProcessCallback); var result = quadTree.execute(); quadTree.destroy(); quadTree = null; return result; }; Collision.separate = function separate(Object1, Object2) { var separatedX = Collision.separateX(Object1, Object2); var separatedY = Collision.separateY(Object1, Object2); return separatedX || separatedY; }; Collision.separateX = function separateX(Object1, Object2) { var obj1immovable = Object1.immovable; var obj2immovable = Object2.immovable; if(obj1immovable && obj2immovable) { return false; } var overlap = 0; var obj1delta = Object1.x - Object1.last.x; var obj2delta = Object2.x - Object2.last.x; if(obj1delta != obj2delta) { var obj1deltaAbs = (obj1delta > 0) ? obj1delta : -obj1delta; var obj2deltaAbs = (obj2delta > 0) ? obj2delta : -obj2delta; var obj1rect = new Phaser.Rectangle(Object1.x - ((obj1delta > 0) ? obj1delta : 0), Object1.last.y, Object1.width + ((obj1delta > 0) ? obj1delta : -obj1delta), Object1.height); var obj2rect = new Phaser.Rectangle(Object2.x - ((obj2delta > 0) ? obj2delta : 0), Object2.last.y, Object2.width + ((obj2delta > 0) ? obj2delta : -obj2delta), Object2.height); if((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) { var maxOverlap = obj1deltaAbs + obj2deltaAbs + Collision.OVERLAP_BIAS; if(obj1delta > obj2delta) { overlap = Object1.x + Object1.width - Object2.x; if((overlap > maxOverlap) || !(Object1.allowCollisions & Collision.RIGHT) || !(Object2.allowCollisions & Collision.LEFT)) { overlap = 0; } else { Object1.touching |= Collision.RIGHT; Object2.touching |= Collision.LEFT; } } else if(obj1delta < obj2delta) { overlap = Object1.x - Object2.width - Object2.x; if((-overlap > maxOverlap) || !(Object1.allowCollisions & Collision.LEFT) || !(Object2.allowCollisions & Collision.RIGHT)) { overlap = 0; } else { Object1.touching |= Collision.LEFT; Object2.touching |= Collision.RIGHT; } } } } if(overlap != 0) { var obj1v = Object1.velocity.x; var obj2v = Object2.velocity.x; if(!obj1immovable && !obj2immovable) { overlap *= 0.5; Object1.x = Object1.x - overlap; Object2.x += overlap; var obj1velocity = Math.sqrt((obj2v * obj2v * Object2.mass) / Object1.mass) * ((obj2v > 0) ? 1 : -1); var obj2velocity = Math.sqrt((obj1v * obj1v * Object1.mass) / Object2.mass) * ((obj1v > 0) ? 1 : -1); var average = (obj1velocity + obj2velocity) * 0.5; obj1velocity -= average; obj2velocity -= average; Object1.velocity.x = average + obj1velocity * Object1.elasticity; Object2.velocity.x = average + obj2velocity * Object2.elasticity; } else if(!obj1immovable) { Object1.x = Object1.x - overlap; Object1.velocity.x = obj2v - obj1v * Object1.elasticity; } else if(!obj2immovable) { Object2.x += overlap; Object2.velocity.x = obj1v - obj2v * Object2.elasticity; } return true; } else { return false; } }; Collision.separateY = function separateY(Object1, Object2) { var obj1immovable = Object1.immovable; var obj2immovable = Object2.immovable; if(obj1immovable && obj2immovable) { return false; } var overlap = 0; var obj1delta = Object1.y - Object1.last.y; var obj2delta = Object2.y - Object2.last.y; if(obj1delta != obj2delta) { var obj1deltaAbs = (obj1delta > 0) ? obj1delta : -obj1delta; var obj2deltaAbs = (obj2delta > 0) ? obj2delta : -obj2delta; var obj1rect = new Phaser.Rectangle(Object1.x, Object1.y - ((obj1delta > 0) ? obj1delta : 0), Object1.width, Object1.height + obj1deltaAbs); var obj2rect = new Phaser.Rectangle(Object2.x, Object2.y - ((obj2delta > 0) ? obj2delta : 0), Object2.width, Object2.height + obj2deltaAbs); if((obj1rect.x + obj1rect.width > obj2rect.x) && (obj1rect.x < obj2rect.x + obj2rect.width) && (obj1rect.y + obj1rect.height > obj2rect.y) && (obj1rect.y < obj2rect.y + obj2rect.height)) { var maxOverlap = obj1deltaAbs + obj2deltaAbs + Collision.OVERLAP_BIAS; if(obj1delta > obj2delta) { overlap = Object1.y + Object1.height - Object2.y; if((overlap > maxOverlap) || !(Object1.allowCollisions & Collision.DOWN) || !(Object2.allowCollisions & Collision.UP)) { overlap = 0; } else { Object1.touching |= Collision.DOWN; Object2.touching |= Collision.UP; } } else if(obj1delta < obj2delta) { overlap = Object1.y - Object2.height - Object2.y; if((-overlap > maxOverlap) || !(Object1.allowCollisions & Collision.UP) || !(Object2.allowCollisions & Collision.DOWN)) { overlap = 0; } else { Object1.touching |= Collision.UP; Object2.touching |= Collision.DOWN; } } } } if(overlap != 0) { var obj1v = Object1.velocity.y; var obj2v = Object2.velocity.y; if(!obj1immovable && !obj2immovable) { overlap *= 0.5; Object1.y = Object1.y - overlap; Object2.y += overlap; var obj1velocity = Math.sqrt((obj2v * obj2v * Object2.mass) / Object1.mass) * ((obj2v > 0) ? 1 : -1); var obj2velocity = Math.sqrt((obj1v * obj1v * Object1.mass) / Object2.mass) * ((obj1v > 0) ? 1 : -1); var average = (obj1velocity + obj2velocity) * 0.5; obj1velocity -= average; obj2velocity -= average; Object1.velocity.y = average + obj1velocity * Object1.elasticity; Object2.velocity.y = average + obj2velocity * Object2.elasticity; } else if(!obj1immovable) { Object1.y = Object1.y - overlap; Object1.velocity.y = obj2v - obj1v * Object1.elasticity; if(Object2.active && Object2.moves && (obj1delta > obj2delta)) { Object1.x += Object2.x - Object2.last.x; } } else if(!obj2immovable) { Object2.y += overlap; Object2.velocity.y = obj1v - obj2v * Object2.elasticity; if(Object1.active && Object1.moves && (obj1delta < obj2delta)) { Object2.x += Object1.x - Object1.last.x; } } return true; } else { return false; } }; Collision.distance = function distance(x1, y1, x2, y2) { return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); }; Collision.distanceSquared = function distanceSquared(x1, y1, x2, y2) { return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); }; return Collision; })(); Phaser.Collision = Collision; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var DynamicTexture = (function () { function DynamicTexture(game, key, width, height) { this._sx = 0; this._sy = 0; this._sw = 0; this._sh = 0; this._dx = 0; this._dy = 0; this._dw = 0; this._dh = 0; this._game = game; this.canvas = document.createElement('canvas'); this.canvas.width = width; this.canvas.height = height; this.context = this.canvas.getContext('2d'); this.bounds = new Phaser.Rectangle(0, 0, width, height); } DynamicTexture.prototype.getPixel = function (x, y) { var imageData = this.context.getImageData(x, y, 1, 1); return this.getColor(imageData.data[0], imageData.data[1], imageData.data[2]); }; DynamicTexture.prototype.getPixel32 = function (x, y) { var imageData = this.context.getImageData(x, y, 1, 1); return this.getColor32(imageData.data[3], imageData.data[0], imageData.data[1], imageData.data[2]); }; DynamicTexture.prototype.getPixels = function (rect) { return this.context.getImageData(rect.x, rect.y, rect.width, rect.height); }; DynamicTexture.prototype.setPixel = function (x, y, color) { this.context.fillStyle = color; this.context.fillRect(x, y, 1, 1); }; DynamicTexture.prototype.setPixel32 = function (x, y, color) { this.context.fillStyle = color; this.context.fillRect(x, y, 1, 1); }; DynamicTexture.prototype.setPixels = function (rect, input) { this.context.putImageData(input, rect.x, rect.y); }; DynamicTexture.prototype.fillRect = function (rect, color) { this.context.fillStyle = color; this.context.fillRect(rect.x, rect.y, rect.width, rect.height); }; DynamicTexture.prototype.pasteImage = function (key, frame, destX, destY, destWidth, destHeight) { if (typeof frame === "undefined") { frame = -1; } if (typeof destX === "undefined") { destX = 0; } if (typeof destY === "undefined") { destY = 0; } if (typeof destWidth === "undefined") { destWidth = null; } if (typeof destHeight === "undefined") { destHeight = null; } var texture = null; var frameData; this._sx = 0; this._sy = 0; this._dx = destX; this._dy = destY; if(frame > -1) { } else { texture = this._game.cache.getImage(key); this._sw = texture.width; this._sh = texture.height; this._dw = texture.width; this._dh = texture.height; } if(destWidth !== null) { this._dw = destWidth; } if(destHeight !== null) { this._dh = destHeight; } if(texture != null) { this.context.drawImage(texture, this._sx, this._sy, this._sw, this._sh, this._dx, this._dy, this._dw, this._dh); } }; DynamicTexture.prototype.copyPixels = function (sourceTexture, sourceRect, destPoint) { if(sourceRect.equals(this.bounds) == true) { this.context.drawImage(sourceTexture.canvas, destPoint.x, destPoint.y); } else { this.context.putImageData(sourceTexture.getPixels(sourceRect), destPoint.x, destPoint.y); } }; DynamicTexture.prototype.clear = function () { this.context.clearRect(0, 0, this.bounds.width, this.bounds.height); }; Object.defineProperty(DynamicTexture.prototype, "width", { get: function () { return this.bounds.width; }, enumerable: true, configurable: true }); Object.defineProperty(DynamicTexture.prototype, "height", { get: function () { return this.bounds.height; }, enumerable: true, configurable: true }); DynamicTexture.prototype.getColor32 = function (alpha, red, green, blue) { return alpha << 24 | red << 16 | green << 8 | blue; }; DynamicTexture.prototype.getColor = function (red, green, blue) { return red << 16 | green << 8 | blue; }; return DynamicTexture; })(); Phaser.DynamicTexture = DynamicTexture; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var GameMath = (function () { function GameMath(game) { this.cosTable = []; this.sinTable = []; this.globalSeed = Math.random(); this._game = game; } GameMath.PI = 3.141592653589793; GameMath.PI_2 = 1.5707963267948965; GameMath.PI_4 = 0.7853981633974483; GameMath.PI_8 = 0.39269908169872413; GameMath.PI_16 = 0.19634954084936206; GameMath.TWO_PI = 6.283185307179586; GameMath.THREE_PI_2 = 4.7123889803846895; GameMath.E = 2.71828182845905; GameMath.LN10 = 2.302585092994046; GameMath.LN2 = 0.6931471805599453; GameMath.LOG10E = 0.4342944819032518; GameMath.LOG2E = 1.442695040888963387; GameMath.SQRT1_2 = 0.7071067811865476; GameMath.SQRT2 = 1.4142135623730951; GameMath.DEG_TO_RAD = 0.017453292519943294444444444444444; GameMath.RAD_TO_DEG = 57.295779513082325225835265587527; GameMath.B_16 = 65536; GameMath.B_31 = 2147483648; GameMath.B_32 = 4294967296; GameMath.B_48 = 281474976710656; GameMath.B_53 = 9007199254740992; GameMath.B_64 = 18446744073709551616; GameMath.ONE_THIRD = 0.333333333333333333333333333333333; GameMath.TWO_THIRDS = 0.666666666666666666666666666666666; GameMath.ONE_SIXTH = 0.166666666666666666666666666666666; GameMath.COS_PI_3 = 0.86602540378443864676372317075294; GameMath.SIN_2PI_3 = 0.03654595; GameMath.CIRCLE_ALPHA = 0.5522847498307933984022516322796; GameMath.ON = true; GameMath.OFF = false; GameMath.SHORT_EPSILON = 0.1; GameMath.PERC_EPSILON = 0.001; GameMath.EPSILON = 0.0001; GameMath.LONG_EPSILON = 0.00000001; GameMath.prototype.fuzzyEqual = function (a, b, epsilon) { if (typeof epsilon === "undefined") { epsilon = 0.0001; } return Math.abs(a - b) < epsilon; }; GameMath.prototype.fuzzyLessThan = function (a, b, epsilon) { if (typeof epsilon === "undefined") { epsilon = 0.0001; } return a < b + epsilon; }; GameMath.prototype.fuzzyGreaterThan = function (a, b, epsilon) { if (typeof epsilon === "undefined") { epsilon = 0.0001; } return a > b - epsilon; }; GameMath.prototype.fuzzyCeil = function (val, epsilon) { if (typeof epsilon === "undefined") { epsilon = 0.0001; } return Math.ceil(val - epsilon); }; GameMath.prototype.fuzzyFloor = function (val, epsilon) { if (typeof epsilon === "undefined") { epsilon = 0.0001; } return Math.floor(val + epsilon); }; GameMath.prototype.average = function () { var args = []; for (var _i = 0; _i < (arguments.length - 0); _i++) { args[_i] = arguments[_i + 0]; } var avg = 0; for(var i = 0; i < args.length; i++) { avg += args[i]; } return avg / args.length; }; GameMath.prototype.slam = function (value, target, epsilon) { if (typeof epsilon === "undefined") { epsilon = 0.0001; } return (Math.abs(value - target) < epsilon) ? target : value; }; GameMath.prototype.percentageMinMax = function (val, max, min) { if (typeof min === "undefined") { min = 0; } val -= min; max -= min; if(!max) { return 0; } else { return val / max; } }; GameMath.prototype.sign = function (n) { if(n) { return n / Math.abs(n); } else { return 0; } }; GameMath.prototype.truncate = function (n) { return (n > 0) ? Math.floor(n) : Math.ceil(n); }; GameMath.prototype.shear = function (n) { return n % 1; }; GameMath.prototype.wrap = function (val, max, min) { if (typeof min === "undefined") { min = 0; } val -= min; max -= min; if(max == 0) { return min; } val %= max; val += min; while(val < min) { val += max; } return val; }; GameMath.prototype.arithWrap = function (value, max, min) { if (typeof min === "undefined") { min = 0; } max -= min; if(max == 0) { return min; } return value - max * Math.floor((value - min) / max); }; GameMath.prototype.clamp = function (input, max, min) { if (typeof min === "undefined") { min = 0; } return Math.max(min, Math.min(max, input)); }; GameMath.prototype.snapTo = function (input, gap, start) { if (typeof start === "undefined") { start = 0; } if(gap == 0) { return input; } input -= start; input = gap * Math.round(input / gap); return start + input; }; GameMath.prototype.snapToFloor = function (input, gap, start) { if (typeof start === "undefined") { start = 0; } if(gap == 0) { return input; } input -= start; input = gap * Math.floor(input / gap); return start + input; }; GameMath.prototype.snapToCeil = function (input, gap, start) { if (typeof start === "undefined") { start = 0; } if(gap == 0) { return input; } input -= start; input = gap * Math.ceil(input / gap); return start + input; }; GameMath.prototype.snapToInArray = function (input, arr, sort) { if (typeof sort === "undefined") { sort = true; } if(sort) { arr.sort(); } if(input < arr[0]) { return arr[0]; } var i = 1; while(arr[i] < input) { i++; } var low = arr[i - 1]; var high = (i < arr.length) ? arr[i] : Number.POSITIVE_INFINITY; return ((high - input) <= (input - low)) ? high : low; }; GameMath.prototype.roundTo = function (value, place, base) { if (typeof place === "undefined") { place = 0; } if (typeof base === "undefined") { base = 10; } var p = Math.pow(base, -place); return Math.round(value * p) / p; }; GameMath.prototype.floorTo = function (value, place, base) { if (typeof place === "undefined") { place = 0; } if (typeof base === "undefined") { base = 10; } var p = Math.pow(base, -place); return Math.floor(value * p) / p; }; GameMath.prototype.ceilTo = function (value, place, base) { if (typeof place === "undefined") { place = 0; } if (typeof base === "undefined") { base = 10; } var p = Math.pow(base, -place); return Math.ceil(value * p) / p; }; GameMath.prototype.interpolateFloat = function (a, b, weight) { return (b - a) * weight + a; }; GameMath.prototype.radiansToDegrees = function (angle) { return angle * GameMath.RAD_TO_DEG; }; GameMath.prototype.degreesToRadians = function (angle) { return angle * GameMath.DEG_TO_RAD; }; GameMath.prototype.angleBetween = function (x1, y1, x2, y2) { return Math.atan2(y2 - y1, x2 - x1); }; GameMath.prototype.normalizeAngle = function (angle, radians) { if (typeof radians === "undefined") { radians = true; } var rd = (radians) ? GameMath.PI : 180; return this.wrap(angle, rd, -rd); }; GameMath.prototype.nearestAngleBetween = function (a1, a2, radians) { if (typeof radians === "undefined") { radians = true; } var rd = (radians) ? GameMath.PI : 180; a1 = this.normalizeAngle(a1, radians); a2 = this.normalizeAngle(a2, radians); if(a1 < -rd / 2 && a2 > rd / 2) { a1 += rd * 2; } if(a2 < -rd / 2 && a1 > rd / 2) { a2 += rd * 2; } return a2 - a1; }; GameMath.prototype.normalizeAngleToAnother = function (dep, ind, radians) { if (typeof radians === "undefined") { radians = true; } return ind + this.nearestAngleBetween(ind, dep, radians); }; GameMath.prototype.normalizeAngleAfterAnother = function (dep, ind, radians) { if (typeof radians === "undefined") { radians = true; } dep = this.normalizeAngle(dep - ind, radians); return ind + dep; }; GameMath.prototype.normalizeAngleBeforeAnother = function (dep, ind, radians) { if (typeof radians === "undefined") { radians = true; } dep = this.normalizeAngle(ind - dep, radians); return ind - dep; }; GameMath.prototype.interpolateAngles = function (a1, a2, weight, radians, ease) { if (typeof radians === "undefined") { radians = true; } if (typeof ease === "undefined") { ease = null; } a1 = this.normalizeAngle(a1, radians); a2 = this.normalizeAngleToAnother(a2, a1, radians); return (typeof ease === 'function') ? ease(weight, a1, a2 - a1, 1) : this.interpolateFloat(a1, a2, weight); }; GameMath.prototype.logBaseOf = function (value, base) { return Math.log(value) / Math.log(base); }; GameMath.prototype.GCD = function (m, n) { var r; m = Math.abs(m); n = Math.abs(n); if(m < n) { r = m; m = n; n = r; } while(true) { r = m % n; if(!r) { return n; } m = n; n = r; } return 1; }; GameMath.prototype.LCM = function (m, n) { return (m * n) / this.GCD(m, n); }; GameMath.prototype.factorial = function (value) { if(value == 0) { return 1; } var res = value; while(--value) { res *= value; } return res; }; GameMath.prototype.gammaFunction = function (value) { return this.factorial(value - 1); }; GameMath.prototype.fallingFactorial = function (base, exp) { return this.factorial(base) / this.factorial(base - exp); }; GameMath.prototype.risingFactorial = function (base, exp) { return this.factorial(base + exp - 1) / this.factorial(base - 1); }; GameMath.prototype.binCoef = function (n, k) { return this.fallingFactorial(n, k) / this.factorial(k); }; GameMath.prototype.risingBinCoef = function (n, k) { return this.risingFactorial(n, k) / this.factorial(k); }; GameMath.prototype.chanceRoll = function (chance) { if (typeof chance === "undefined") { chance = 50; } if(chance <= 0) { return false; } else if(chance >= 100) { return true; } else { if(Math.random() * 100 >= chance) { return false; } else { return true; } } }; GameMath.prototype.maxAdd = function (value, amount, max) { value += amount; if(value > max) { value = max; } return value; }; GameMath.prototype.minSub = function (value, amount, min) { value -= amount; if(value < min) { value = min; } return value; }; GameMath.prototype.wrapValue = function (value, amount, max) { var diff; value = Math.abs(value); amount = Math.abs(amount); max = Math.abs(max); diff = (value + amount) % max; return diff; }; GameMath.prototype.randomSign = function () { return (Math.random() > 0.5) ? 1 : -1; }; GameMath.prototype.isOdd = function (n) { if(n & 1) { return true; } else { return false; } }; GameMath.prototype.isEven = function (n) { if(n & 1) { return false; } else { return true; } }; GameMath.prototype.wrapAngle = function (angle) { var result = angle; if(angle >= -180 && angle <= 180) { return angle; } result = (angle + 180) % 360; if(result < 0) { result += 360; } return result - 180; }; GameMath.prototype.angleLimit = function (angle, min, max) { var result = angle; if(angle > max) { result = max; } else if(angle < min) { result = min; } return result; }; GameMath.prototype.linearInterpolation = function (v, k) { var m = v.length - 1; var f = m * k; var i = Math.floor(f); if(k < 0) { return this.linear(v[0], v[1], f); } if(k > 1) { return this.linear(v[m], v[m - 1], m - f); } return this.linear(v[i], v[i + 1 > m ? m : i + 1], f - i); }; GameMath.prototype.bezierInterpolation = function (v, k) { var b = 0; var n = v.length - 1; for(var i = 0; i <= n; i++) { b += Math.pow(1 - k, n - i) * Math.pow(k, i) * v[i] * this.bernstein(n, i); } return b; }; GameMath.prototype.catmullRomInterpolation = function (v, k) { var m = v.length - 1; var f = m * k; var i = Math.floor(f); if(v[0] === v[m]) { if(k < 0) { i = Math.floor(f = m * (1 + k)); } return this.catmullRom(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i); } else { if(k < 0) { return v[0] - (this.catmullRom(v[0], v[0], v[1], v[1], -f) - v[0]); } if(k > 1) { return v[m] - (this.catmullRom(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]); } return this.catmullRom(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i); } }; GameMath.prototype.linear = function (p0, p1, t) { return (p1 - p0) * t + p0; }; GameMath.prototype.bernstein = function (n, i) { return this.factorial(n) / this.factorial(i) / this.factorial(n - i); }; GameMath.prototype.catmullRom = function (p0, p1, p2, p3, t) { var v0 = (p2 - p0) * 0.5, v1 = (p3 - p1) * 0.5, t2 = t * t, t3 = t * t2; return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; }; GameMath.prototype.difference = function (a, b) { return Math.abs(a - b); }; GameMath.prototype.random = function () { return this.globalSeed = this.srand(this.globalSeed); }; GameMath.prototype.srand = function (Seed) { return ((69621 * (Seed * 0x7FFFFFFF)) % 0x7FFFFFFF) / 0x7FFFFFFF; }; GameMath.prototype.getRandom = function (Objects, StartIndex, Length) { if (typeof StartIndex === "undefined") { StartIndex = 0; } if (typeof Length === "undefined") { Length = 0; } if(Objects != null) { var l = Length; if((l == 0) || (l > Objects.length - StartIndex)) { l = Objects.length - StartIndex; } if(l > 0) { return Objects[StartIndex + Math.floor(Math.random() * l)]; } } return null; }; GameMath.prototype.floor = function (Value) { var n = Value | 0; return (Value > 0) ? (n) : ((n != Value) ? (n - 1) : (n)); }; GameMath.prototype.ceil = function (Value) { var n = Value | 0; return (Value > 0) ? ((n != Value) ? (n + 1) : (n)) : (n); }; GameMath.prototype.sinCosGenerator = function (length, sinAmplitude, cosAmplitude, frequency) { if (typeof sinAmplitude === "undefined") { sinAmplitude = 1.0; } if (typeof cosAmplitude === "undefined") { cosAmplitude = 1.0; } if (typeof frequency === "undefined") { frequency = 1.0; } var sin = sinAmplitude; var cos = cosAmplitude; var frq = frequency * Math.PI / length; this.cosTable = []; this.sinTable = []; for(var c = 0; c < length; c++) { cos -= sin * frq; sin += cos * frq; this.cosTable[c] = cos; this.sinTable[c] = sin; } return this.sinTable; }; GameMath.prototype.vectorLength = function (dx, dy) { return Math.sqrt(dx * dx + dy * dy); }; GameMath.prototype.dotProduct = function (ax, ay, bx, by) { return ax * bx + ay * by; }; return GameMath; })(); Phaser.GameMath = GameMath; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Group = (function (_super) { __extends(Group, _super); function Group(game, MaxSize) { if (typeof MaxSize === "undefined") { MaxSize = 0; } _super.call(this, game); this.isGroup = true; this.members = []; this.length = 0; this._maxSize = MaxSize; this._marker = 0; this._sortIndex = null; } Group.ASCENDING = -1; Group.DESCENDING = 1; Group.prototype.destroy = function () { if(this.members != null) { var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if(basic != null) { basic.destroy(); } } this.members.length = 0; } this._sortIndex = null; }; Group.prototype.update = function () { var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if((basic != null) && basic.exists && basic.active) { basic.preUpdate(); basic.update(); basic.postUpdate(); } } }; Group.prototype.render = function (camera, cameraOffsetX, cameraOffsetY) { var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if((basic != null) && basic.exists && basic.visible) { basic.render(camera, cameraOffsetX, cameraOffsetY); } } }; Object.defineProperty(Group.prototype, "maxSize", { get: function () { return this._maxSize; }, set: function (Size) { this._maxSize = Size; if(this._marker >= this._maxSize) { this._marker = 0; } if((this._maxSize == 0) || (this.members == null) || (this._maxSize >= this.members.length)) { return; } var basic; var i = this._maxSize; var l = this.members.length; while(i < l) { basic = this.members[i++]; if(basic != null) { basic.destroy(); } } this.length = this.members.length = this._maxSize; }, enumerable: true, configurable: true }); Group.prototype.add = function (Object) { if(this.members.indexOf(Object) >= 0) { return Object; } var i = 0; var l = this.members.length; while(i < l) { if(this.members[i] == null) { this.members[i] = Object; if(i >= this.length) { this.length = i + 1; } return Object; } i++; } if(this._maxSize > 0) { if(this.members.length >= this._maxSize) { return Object; } else if(this.members.length * 2 <= this._maxSize) { this.members.length *= 2; } else { this.members.length = this._maxSize; } } else { this.members.length *= 2; } this.members[i] = Object; this.length = i + 1; return Object; }; Group.prototype.recycle = function (ObjectClass) { if (typeof ObjectClass === "undefined") { ObjectClass = null; } var basic; if(this._maxSize > 0) { if(this.length < this._maxSize) { if(ObjectClass == null) { return null; } return this.add(new ObjectClass()); } else { basic = this.members[this._marker++]; if(this._marker >= this._maxSize) { this._marker = 0; } return basic; } } else { basic = this.getFirstAvailable(ObjectClass); if(basic != null) { return basic; } if(ObjectClass == null) { return null; } return this.add(new ObjectClass()); } }; Group.prototype.remove = function (Object, Splice) { if (typeof Splice === "undefined") { Splice = false; } var index = this.members.indexOf(Object); if((index < 0) || (index >= this.members.length)) { return null; } if(Splice) { this.members.splice(index, 1); this.length--; } else { this.members[index] = null; } return Object; }; Group.prototype.replace = function (OldObject, NewObject) { var index = this.members.indexOf(OldObject); if((index < 0) || (index >= this.members.length)) { return null; } this.members[index] = NewObject; return NewObject; }; Group.prototype.sort = function (Index, Order) { if (typeof Index === "undefined") { Index = "y"; } if (typeof Order === "undefined") { Order = Group.ASCENDING; } this._sortIndex = Index; this._sortOrder = Order; this.members.sort(this.sortHandler); }; Group.prototype.setAll = function (VariableName, Value, Recurse) { if (typeof Recurse === "undefined") { Recurse = true; } var basic; var i = 0; while(i < length) { basic = this.members[i++]; if(basic != null) { if(Recurse && (basic.isGroup == true)) { basic['setAll'](VariableName, Value, Recurse); } else { basic[VariableName] = Value; } } } }; Group.prototype.callAll = function (FunctionName, Recurse) { if (typeof Recurse === "undefined") { Recurse = true; } var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if(basic != null) { if(Recurse && (basic.isGroup == true)) { basic['callAll'](FunctionName, Recurse); } else { basic[FunctionName](); } } } }; Group.prototype.forEach = function (callback, Recurse) { if (typeof Recurse === "undefined") { Recurse = false; } var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if(basic != null) { if(Recurse && (basic.isGroup == true)) { basic.forEach(callback, true); } else { callback.call(this, basic); } } } }; Group.prototype.getFirstAvailable = function (ObjectClass) { if (typeof ObjectClass === "undefined") { ObjectClass = null; } var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if((basic != null) && !basic.exists && ((ObjectClass == null) || (typeof basic === ObjectClass))) { return basic; } } return null; }; Group.prototype.getFirstNull = function () { var basic; var i = 0; var l = this.members.length; while(i < l) { if(this.members[i] == null) { return i; } else { i++; } } return -1; }; Group.prototype.getFirstExtant = function () { var basic; var i = 0; while(i < length) { basic = this.members[i++]; if((basic != null) && basic.exists) { return basic; } } return null; }; Group.prototype.getFirstAlive = function () { var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if((basic != null) && basic.exists && basic.alive) { return basic; } } return null; }; Group.prototype.getFirstDead = function () { var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if((basic != null) && !basic.alive) { return basic; } } return null; }; Group.prototype.countLiving = function () { var count = -1; var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if(basic != null) { if(count < 0) { count = 0; } if(basic.exists && basic.alive) { count++; } } } return count; }; Group.prototype.countDead = function () { var count = -1; var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if(basic != null) { if(count < 0) { count = 0; } if(!basic.alive) { count++; } } } return count; }; Group.prototype.getRandom = function (StartIndex, Length) { if (typeof StartIndex === "undefined") { StartIndex = 0; } if (typeof Length === "undefined") { Length = 0; } if(Length == 0) { Length = this.length; } return this._game.math.getRandom(this.members, StartIndex, Length); }; Group.prototype.clear = function () { this.length = this.members.length = 0; }; Group.prototype.kill = function () { var basic; var i = 0; while(i < this.length) { basic = this.members[i++]; if((basic != null) && basic.exists) { basic.kill(); } } }; Group.prototype.sortHandler = function (Obj1, Obj2) { if(Obj1[this._sortIndex] < Obj2[this._sortIndex]) { return this._sortOrder; } else if(Obj1[this._sortIndex] > Obj2[this._sortIndex]) { return -this._sortOrder; } return 0; }; return Group; })(Phaser.Basic); Phaser.Group = Group; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Loader = (function () { function Loader(game, callback) { this._game = game; this._gameCreateComplete = callback; this._keys = []; this._fileList = { }; this._xhr = new XMLHttpRequest(); } Loader.prototype.checkKeyExists = function (key) { if(this._fileList[key]) { return true; } else { return false; } }; Loader.prototype.addImageFile = function (key, url) { if(this.checkKeyExists(key) === false) { this._fileList[key] = { type: 'image', key: key, url: url, data: null, error: false, loaded: false }; this._keys.push(key); } }; Loader.prototype.addSpriteSheet = function (key, url, frameWidth, frameHeight, frameMax) { if (typeof frameMax === "undefined") { frameMax = -1; } if(this.checkKeyExists(key) === false) { this._fileList[key] = { type: 'spritesheet', key: key, url: url, data: null, frameWidth: frameWidth, frameHeight: frameHeight, frameMax: frameMax, error: false, loaded: false }; this._keys.push(key); } }; Loader.prototype.addTextureAtlas = function (key, url, jsonURL, jsonData) { if (typeof jsonURL === "undefined") { jsonURL = null; } if (typeof jsonData === "undefined") { jsonData = null; } if(this.checkKeyExists(key) === false) { if(jsonURL !== null) { this._fileList[key] = { type: 'textureatlas', key: key, url: url, data: null, jsonURL: jsonURL, jsonData: null, error: false, loaded: false }; this._keys.push(key); } else { if(typeof jsonData === 'string') { var data = JSON.parse(jsonData); if(data['frames']) { this._fileList[key] = { type: 'textureatlas', key: key, url: url, data: null, jsonURL: null, jsonData: data['frames'], error: false, loaded: false }; this._keys.push(key); } } else { if(jsonData['frames']) { this._fileList[key] = { type: 'textureatlas', key: key, url: url, data: null, jsonURL: null, jsonData: jsonData['frames'], error: false, loaded: false }; this._keys.push(key); } } } } }; Loader.prototype.addAudioFile = function (key, url) { if(this.checkKeyExists(key) === false) { this._fileList[key] = { type: 'audio', key: key, url: url, data: null, buffer: null, error: false, loaded: false }; this._keys.push(key); } }; Loader.prototype.addTextFile = function (key, url) { if(this.checkKeyExists(key) === false) { this._fileList[key] = { type: 'text', key: key, url: url, data: null, error: false, loaded: false }; this._keys.push(key); } }; Loader.prototype.removeFile = function (key) { delete this._fileList[key]; }; Loader.prototype.removeAll = function () { this._fileList = { }; }; Loader.prototype.load = function (onFileLoadCallback, onCompleteCallback) { if (typeof onFileLoadCallback === "undefined") { onFileLoadCallback = null; } if (typeof onCompleteCallback === "undefined") { onCompleteCallback = null; } this.progress = 0; this.hasLoaded = false; this._onComplete = onCompleteCallback; if(onCompleteCallback == null) { this._onComplete = this._game.onCreateCallback; } this._onFileLoad = onFileLoadCallback; if(this._keys.length > 0) { this._progressChunk = 100 / this._keys.length; this.loadFile(); } else { this.progress = 1; this.hasLoaded = true; this._gameCreateComplete.call(this._game); if(this._onComplete !== null) { this._onComplete.call(this._game.callbackContext); } } }; Loader.prototype.loadFile = function () { var _this = this; var file = this._fileList[this._keys.pop()]; switch(file.type) { case 'image': case 'spritesheet': case 'textureatlas': file.data = new Image(); file.data.name = file.key; file.data.onload = function () { return _this.fileComplete(file.key); }; file.data.onerror = function () { return _this.fileError(file.key); }; file.data.src = file.url; break; case 'audio': this._xhr.open("GET", file.url, true); this._xhr.responseType = "arraybuffer"; this._xhr.onload = function () { return _this.fileComplete(file.key); }; this._xhr.onerror = function () { return _this.fileError(file.key); }; this._xhr.send(); break; case 'text': this._xhr.open("GET", file.url, true); this._xhr.responseType = "text"; this._xhr.onload = function () { return _this.fileComplete(file.key); }; this._xhr.onerror = function () { return _this.fileError(file.key); }; this._xhr.send(); break; } }; Loader.prototype.fileError = function (key) { this._fileList[key].loaded = true; this._fileList[key].error = true; this.nextFile(key, false); }; Loader.prototype.fileComplete = function (key) { var _this = this; this._fileList[key].loaded = true; var file = this._fileList[key]; var loadNext = true; switch(file.type) { case 'image': this._game.cache.addImage(file.key, file.url, file.data); break; case 'spritesheet': this._game.cache.addSpriteSheet(file.key, file.url, file.data, file.frameWidth, file.frameHeight, file.frameMax); break; case 'textureatlas': if(file.jsonURL == null) { this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.jsonData); } else { loadNext = false; this._xhr.open("GET", file.jsonURL, true); this._xhr.responseType = "text"; this._xhr.onload = function () { return _this.jsonLoadComplete(file.key); }; this._xhr.onerror = function () { return _this.jsonLoadError(file.key); }; this._xhr.send(); } break; case 'audio': file.data = this._xhr.response; this._game.cache.addSound(file.key, file.url, file.data); break; case 'text': file.data = this._xhr.response; this._game.cache.addText(file.key, file.url, file.data); break; } if(loadNext) { this.nextFile(key, true); } }; Loader.prototype.jsonLoadComplete = function (key) { var data = JSON.parse(this._xhr.response); if(data['frames']) { var file = this._fileList[key]; this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames']); } this.nextFile(key, true); }; Loader.prototype.jsonLoadError = function (key) { var file = this._fileList[key]; file.error = true; this.nextFile(key, true); }; Loader.prototype.nextFile = function (previousKey, success) { this.progress = Math.round(this.progress + this._progressChunk); if(this._onFileLoad) { this._onFileLoad.call(this._game.callbackContext, this.progress, previousKey, success); } if(this._keys.length > 0) { this.loadFile(); } else { this.hasLoaded = true; this.removeAll(); this._gameCreateComplete.call(this._game); if(this._onComplete !== null) { this._onComplete.call(this._game.callbackContext); } } }; return Loader; })(); Phaser.Loader = Loader; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Motion = (function () { function Motion(game) { this._game = game; } Motion.prototype.computeVelocity = function (Velocity, Acceleration, Drag, Max) { if (typeof Acceleration === "undefined") { Acceleration = 0; } if (typeof Drag === "undefined") { Drag = 0; } if (typeof Max === "undefined") { Max = 10000; } if(Acceleration !== 0) { Velocity += Acceleration * this._game.time.elapsed; } else if(Drag !== 0) { var drag = Drag * this._game.time.elapsed; if(Velocity - drag > 0) { Velocity = Velocity - drag; } else if(Velocity + drag < 0) { Velocity += drag; } else { Velocity = 0; } } if((Velocity != 0) && (Max != 10000)) { if(Velocity > Max) { Velocity = Max; } else if(Velocity < -Max) { Velocity = -Max; } } return Velocity; }; Motion.prototype.velocityFromAngle = function (angle, speed) { var a = this._game.math.degreesToRadians(angle); return new Phaser.Point((Math.cos(a) * speed), (Math.sin(a) * speed)); }; Motion.prototype.moveTowardsObject = function (source, dest, speed, maxTime) { if (typeof speed === "undefined") { speed = 60; } if (typeof maxTime === "undefined") { maxTime = 0; } var a = this.angleBetween(source, dest); if(maxTime > 0) { var d = this.distanceBetween(source, dest); speed = d / (maxTime / 1000); } source.velocity.x = Math.cos(a) * speed; source.velocity.y = Math.sin(a) * speed; }; Motion.prototype.accelerateTowardsObject = function (source, dest, speed, xSpeedMax, ySpeedMax) { var a = this.angleBetween(source, dest); source.velocity.x = 0; source.velocity.y = 0; source.acceleration.x = Math.cos(a) * speed; source.acceleration.y = Math.sin(a) * speed; source.maxVelocity.x = xSpeedMax; source.maxVelocity.y = ySpeedMax; }; Motion.prototype.moveTowardsMouse = function (source, speed, maxTime) { if (typeof speed === "undefined") { speed = 60; } if (typeof maxTime === "undefined") { maxTime = 0; } var a = this.angleBetweenMouse(source); if(maxTime > 0) { var d = this.distanceToMouse(source); speed = d / (maxTime / 1000); } source.velocity.x = Math.cos(a) * speed; source.velocity.y = Math.sin(a) * speed; }; Motion.prototype.accelerateTowardsMouse = function (source, speed, xSpeedMax, ySpeedMax) { var a = this.angleBetweenMouse(source); source.velocity.x = 0; source.velocity.y = 0; source.acceleration.x = Math.cos(a) * speed; source.acceleration.y = Math.sin(a) * speed; source.maxVelocity.x = xSpeedMax; source.maxVelocity.y = ySpeedMax; }; Motion.prototype.moveTowardsPoint = function (source, target, speed, maxTime) { if (typeof speed === "undefined") { speed = 60; } if (typeof maxTime === "undefined") { maxTime = 0; } var a = this.angleBetweenPoint(source, target); if(maxTime > 0) { var d = this.distanceToPoint(source, target); speed = d / (maxTime / 1000); } source.velocity.x = Math.cos(a) * speed; source.velocity.y = Math.sin(a) * speed; }; Motion.prototype.accelerateTowardsPoint = function (source, target, speed, xSpeedMax, ySpeedMax) { var a = this.angleBetweenPoint(source, target); source.velocity.x = 0; source.velocity.y = 0; source.acceleration.x = Math.cos(a) * speed; source.acceleration.y = Math.sin(a) * speed; source.maxVelocity.x = xSpeedMax; source.maxVelocity.y = ySpeedMax; }; Motion.prototype.distanceBetween = function (a, b) { var dx = (a.x + a.origin.x) - (b.x + b.origin.x); var dy = (a.y + a.origin.y) - (b.y + b.origin.y); return this._game.math.vectorLength(dx, dy); }; Motion.prototype.distanceToPoint = function (a, target) { var dx = (a.x + a.origin.x) - (target.x); var dy = (a.y + a.origin.y) - (target.y); return this._game.math.vectorLength(dx, dy); }; Motion.prototype.distanceToMouse = function (a) { var dx = (a.x + a.origin.x) - this._game.input.x; var dy = (a.y + a.origin.y) - this._game.input.y; return this._game.math.vectorLength(dx, dy); }; Motion.prototype.angleBetweenPoint = function (a, target, asDegrees) { if (typeof asDegrees === "undefined") { asDegrees = false; } var dx = (target.x) - (a.x + a.origin.x); var dy = (target.y) - (a.y + a.origin.y); if(asDegrees) { return this._game.math.radiansToDegrees(Math.atan2(dy, dx)); } else { return Math.atan2(dy, dx); } }; Motion.prototype.angleBetween = function (a, b, asDegrees) { if (typeof asDegrees === "undefined") { asDegrees = false; } var dx = (b.x + b.origin.x) - (a.x + a.origin.x); var dy = (b.y + b.origin.y) - (a.y + a.origin.y); if(asDegrees) { return this._game.math.radiansToDegrees(Math.atan2(dy, dx)); } else { return Math.atan2(dy, dx); } }; Motion.prototype.velocityFromFacing = function (parent, speed) { var a; if(parent.facing == Phaser.Collision.LEFT) { a = this._game.math.degreesToRadians(180); } else if(parent.facing == Phaser.Collision.RIGHT) { a = this._game.math.degreesToRadians(0); } else if(parent.facing == Phaser.Collision.UP) { a = this._game.math.degreesToRadians(-90); } else if(parent.facing == Phaser.Collision.DOWN) { a = this._game.math.degreesToRadians(90); } return new Phaser.Point(Math.cos(a) * speed, Math.sin(a) * speed); }; Motion.prototype.angleBetweenMouse = function (a, asDegrees) { if (typeof asDegrees === "undefined") { asDegrees = false; } var p = a.getScreenXY(); var dx = a._game.input.x - p.x; var dy = a._game.input.y - p.y; if(asDegrees) { return this._game.math.radiansToDegrees(Math.atan2(dy, dx)); } else { return Math.atan2(dy, dx); } }; return Motion; })(); Phaser.Motion = Motion; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Sound = (function () { function Sound(context, gainNode, data, volume, loop) { if (typeof volume === "undefined") { volume = 1; } if (typeof loop === "undefined") { loop = false; } this.loop = false; this.isPlaying = false; this.isDecoding = false; this._context = context; this._gainNode = gainNode; this._buffer = data; this._volume = volume; this.loop = loop; if(this._context !== null) { this._localGainNode = this._context.createGainNode(); this._localGainNode.connect(this._gainNode); this._localGainNode.gain.value = this._volume; } if(this._buffer === null) { this.isDecoding = true; } else { this.play(); } } Sound.prototype.setDecodedBuffer = function (data) { this._buffer = data; this.isDecoding = false; this.play(); }; Sound.prototype.play = function () { if(this._buffer === null || this.isDecoding === true) { return; } this._sound = this._context.createBufferSource(); this._sound.buffer = this._buffer; this._sound.connect(this._localGainNode); if(this.loop) { this._sound.loop = true; } this._sound.noteOn(0); this.duration = this._sound.buffer.duration; this.isPlaying = true; }; Sound.prototype.stop = function () { if(this.isPlaying === true) { this.isPlaying = false; this._sound.noteOff(0); } }; Sound.prototype.mute = function () { this._localGainNode.gain.value = 0; }; Sound.prototype.unmute = function () { this._localGainNode.gain.value = this._volume; }; Object.defineProperty(Sound.prototype, "volume", { get: function () { return this._volume; }, set: function (value) { this._volume = value; this._localGainNode.gain.value = this._volume; }, enumerable: true, configurable: true }); return Sound; })(); Phaser.Sound = Sound; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var SoundManager = (function () { function SoundManager(game) { this._context = null; this._game = game; if(game.device.webaudio == true) { if(!!window['AudioContext']) { this._context = new window['AudioContext'](); } else if(!!window['webkitAudioContext']) { this._context = new window['webkitAudioContext'](); } if(this._context !== null) { this._gainNode = this._context.createGainNode(); this._gainNode.connect(this._context.destination); this._volume = 1; } } } SoundManager.prototype.mute = function () { this._gainNode.gain.value = 0; }; SoundManager.prototype.unmute = function () { this._gainNode.gain.value = this._volume; }; Object.defineProperty(SoundManager.prototype, "volume", { get: function () { return this._volume; }, set: function (value) { this._volume = value; this._gainNode.gain.value = this._volume; }, enumerable: true, configurable: true }); SoundManager.prototype.decode = function (key, callback, sound) { if (typeof callback === "undefined") { callback = null; } if (typeof sound === "undefined") { sound = null; } var soundData = this._game.cache.getSound(key); if(soundData) { if(this._game.cache.isSoundDecoded(key) === false) { var that = this; this._context.decodeAudioData(soundData, function (buffer) { that._game.cache.decodedSound(key, buffer); if(sound) { sound.setDecodedBuffer(buffer); } callback(); }); } } }; SoundManager.prototype.play = function (key, volume, loop) { if (typeof volume === "undefined") { volume = 1; } if (typeof loop === "undefined") { loop = false; } var _this = this; if(this._context === null) { return; } var soundData = this._game.cache.getSound(key); if(soundData) { if(this._game.cache.isSoundDecoded(key) === true) { return new Phaser.Sound(this._context, this._gainNode, soundData, volume, loop); } else { var tempSound = new Phaser.Sound(this._context, this._gainNode, null, volume, loop); this.decode(key, function () { return _this.play(key); }, tempSound); return tempSound; } } }; return SoundManager; })(); Phaser.SoundManager = SoundManager; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { Phaser.VERSION = 'Phaser version 0.9.1'; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var StageScaleMode = (function () { function StageScaleMode(game) { var _this = this; this._startHeight = 0; this.width = 0; this.height = 0; this._game = game; this.orientation = window['orientation']; window.addEventListener('orientationchange', function (event) { return _this.checkOrientation(event); }, false); } StageScaleMode.EXACT_FIT = 0; StageScaleMode.NO_SCALE = 1; StageScaleMode.SHOW_ALL = 2; StageScaleMode.prototype.update = function () { if(this._game.stage.scaleMode !== StageScaleMode.NO_SCALE && (window.innerWidth !== this.width || window.innerHeight !== this.height)) { this.refresh(); } }; Object.defineProperty(StageScaleMode.prototype, "isLandscape", { get: function () { return window['orientation'] === 90 || window['orientation'] === -90; }, enumerable: true, configurable: true }); StageScaleMode.prototype.checkOrientation = function (event) { if(window['orientation'] !== this.orientation) { this.refresh(); this.orientation = window['orientation']; } }; StageScaleMode.prototype.refresh = function () { var _this = this; if(this._game.device.iPad == false && this._game.device.webApp == false && this._game.device.desktop == false) { document.documentElement.style.minHeight = '5000px'; this._startHeight = window.innerHeight; if(this._game.device.android && this._game.device.chrome == false) { window.scrollTo(0, 1); } else { window.scrollTo(0, 0); } } if(this._check == null) { this._iterations = 40; this._check = window.setInterval(function () { return _this.setScreenSize(); }, 10); } }; StageScaleMode.prototype.setScreenSize = function () { if(this._game.device.iPad == false && this._game.device.webApp == false && this._game.device.desktop == false) { if(this._game.device.android && this._game.device.chrome == false) { window.scrollTo(0, 1); } else { window.scrollTo(0, 0); } } this._iterations--; if(window.innerHeight > this._startHeight || this._iterations < 0) { document.documentElement.style.minHeight = window.innerHeight + 'px'; if(this._game.stage.scaleMode == StageScaleMode.EXACT_FIT) { if(this._game.stage.maxScaleX && window.innerWidth > this._game.stage.maxScaleX) { this.width = this._game.stage.maxScaleX; } else { this.width = window.innerWidth; } if(this._game.stage.maxScaleY && window.innerHeight > this._game.stage.maxScaleY) { this.height = this._game.stage.maxScaleY; } else { this.height = window.innerHeight; } } else if(this._game.stage.scaleMode == StageScaleMode.SHOW_ALL) { var multiplier = Math.min((window.innerHeight / this._game.stage.height), (window.innerWidth / this._game.stage.width)); this.width = Math.round(this._game.stage.width * multiplier); this.height = Math.round(this._game.stage.height * multiplier); if(this._game.stage.maxScaleX && this.width > this._game.stage.maxScaleX) { this.width = this._game.stage.maxScaleX; } if(this._game.stage.maxScaleY && this.height > this._game.stage.maxScaleY) { this.height = this._game.stage.maxScaleY; } } this._game.stage.canvas.style.width = this.width + 'px'; this._game.stage.canvas.style.height = this.height + 'px'; this._game.input.scaleX = this._game.stage.width / this.width; this._game.input.scaleY = this._game.stage.height / this.height; clearInterval(this._check); this._check = null; } }; return StageScaleMode; })(); Phaser.StageScaleMode = StageScaleMode; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Stage = (function () { function Stage(game, parent, width, height) { var _this = this; this.clear = true; this.minScaleX = null; this.maxScaleX = null; this.minScaleY = null; this.maxScaleY = null; this._logo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1JREFUeNpi/P//PwM6YGRkxBQEAqBaRnQxFmwa10d6MAjrMqMofHv5L1we2SBGmAtAktg0ogOQQYHLd8ANYYFpPtTmzUAMAFmwnsEDrAdkCAvMZlIAsiFMMAEYsKvaSrQhIMCELkGsV2AAbIC8gCQYgwKIUABiNYBf9yoYH7n7n6CzN274g2IYEyFbsNmKLIaSkHpP7WSwUfbA0ASzFQRslBlxp0RcAF0TRhggA3zhAJIDpUKU5A9KyshpHDkjFZu5g2nJMFcwXVJSgqIGnBKx5bKenh4w/XzVbgbPtlIUcVgSxuoCUgHIIIAAAwArtXwJBABO6QAAAABJRU5ErkJggg=="; this._game = game; this.canvas = document.createElement('canvas'); this.canvas.width = width; this.canvas.height = height; if(document.getElementById(parent)) { document.getElementById(parent).appendChild(this.canvas); document.getElementById(parent).style.overflow = 'hidden'; } else { document.body.appendChild(this.canvas); } this.canvas.style.msTouchAction = 'none'; this.canvas.style['touch-action'] = 'none'; this.context = this.canvas.getContext('2d'); this.offset = this.getOffset(this.canvas); this.bounds = new Phaser.Rectangle(this.offset.x, this.offset.y, width, height); this.aspectRatio = width / height; this.scaleMode = Phaser.StageScaleMode.NO_SCALE; this.scale = new Phaser.StageScaleMode(this._game); window.onblur = function (event) { return _this.visibilityChange(event); }; window.onfocus = function (event) { return _this.visibilityChange(event); }; } Stage.ORIENTATION_LANDSCAPE = 0; Stage.ORIENTATION_PORTRAIT = 1; Stage.prototype.update = function () { this.scale.update(); if(this.clear) { this.context.clearRect(0, 0, this.width, this.height); } }; Stage.prototype.renderDebugInfo = function () { this.context.fillStyle = 'rgb(255,255,255)'; this.context.fillText(Phaser.VERSION, 10, 20); this.context.fillText('Game Size: ' + this.width + ' x ' + this.height, 10, 40); this.context.fillText('x: ' + this.x + ' y: ' + this.y, 10, 60); }; Stage.prototype.visibilityChange = function (event) { if(event.type == 'blur' && this._game.paused == false && this._game.isBooted == true) { this._game.paused = true; this.drawPauseScreen(); } else if(event.type == 'focus') { this._game.paused = false; } }; Stage.prototype.drawInitScreen = function () { this.context.fillStyle = 'rgb(40, 40, 40)'; this.context.fillRect(0, 0, this.width, this.height); this.context.fillStyle = 'rgb(255,255,255)'; this.context.font = 'bold 18px Arial'; this.context.textBaseline = 'top'; this.context.fillText(Phaser.VERSION, 54, 32); this.context.fillText('Game Size: ' + this.width + ' x ' + this.height, 32, 64); this.context.fillText('www.photonstorm.com', 32, 96); this.context.font = '16px Arial'; this.context.fillText('You are seeing this screen because you didn\'t specify any default', 32, 160); this.context.fillText('functions in the Game constructor, or use Game.loadState()', 32, 184); var image = new Image(); var that = this; image.onload = function () { that.context.drawImage(image, 32, 32); }; image.src = this._logo; }; Stage.prototype.drawPauseScreen = function () { this.saveCanvasValues(); this.context.fillStyle = 'rgba(0, 0, 0, 0.4)'; this.context.fillRect(0, 0, this.width, this.height); var arrowWidth = Math.round(this.width / 2); var arrowHeight = Math.round(this.height / 2); var sx = this.centerX - arrowWidth / 2; var sy = this.centerY - arrowHeight / 2; this.context.beginPath(); this.context.moveTo(sx, sy); this.context.lineTo(sx, sy + arrowHeight); this.context.lineTo(sx + arrowWidth, this.centerY); this.context.fillStyle = 'rgba(255, 255, 255, 0.8)'; this.context.fill(); this.context.closePath(); this.restoreCanvasValues(); }; Stage.prototype.getOffset = function (element) { var box = element.getBoundingClientRect(); var clientTop = element.clientTop || document.body.clientTop || 0; var clientLeft = element.clientLeft || document.body.clientLeft || 0; var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop; var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft; return new Phaser.Point(box.left + scrollLeft - clientLeft, box.top + scrollTop - clientTop); }; Stage.prototype.saveCanvasValues = function () { this.strokeStyle = this.context.strokeStyle; this.lineWidth = this.context.lineWidth; this.fillStyle = this.context.fillStyle; }; Stage.prototype.restoreCanvasValues = function () { this.context.strokeStyle = this.strokeStyle; this.context.lineWidth = this.lineWidth; this.context.fillStyle = this.fillStyle; }; Object.defineProperty(Stage.prototype, "backgroundColor", { get: function () { return this._bgColor; }, set: function (color) { this.canvas.style.backgroundColor = color; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "x", { get: function () { return this.bounds.x; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "y", { get: function () { return this.bounds.y; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "width", { get: function () { return this.bounds.width; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "height", { get: function () { return this.bounds.height; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "centerX", { get: function () { return this.bounds.halfWidth; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "centerY", { get: function () { return this.bounds.halfHeight; }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "randomX", { get: function () { return Math.round(Math.random() * this.bounds.width); }, enumerable: true, configurable: true }); Object.defineProperty(Stage.prototype, "randomY", { get: function () { return Math.round(Math.random() * this.bounds.height); }, enumerable: true, configurable: true }); return Stage; })(); Phaser.Stage = Stage; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Time = (function () { function Time(game) { this.timeScale = 1.0; this.elapsed = 0; this.time = 0; this.now = 0; this.delta = 0; this.fps = 0; this.fpsMin = 1000; this.fpsMax = 0; this.msMin = 1000; this.msMax = 0; this.frames = 0; this._timeLastSecond = 0; this._started = Date.now(); this._timeLastSecond = this._started; this.time = this._started; } Object.defineProperty(Time.prototype, "totalElapsedSeconds", { get: function () { return (this.now - this._started) * 0.001; }, enumerable: true, configurable: true }); Time.prototype.update = function () { this.now = Date.now(); this.delta = this.now - this.time; this.msMin = Math.min(this.msMin, this.delta); this.msMax = Math.max(this.msMax, this.delta); this.frames++; if(this.now > this._timeLastSecond + 1000) { this.fps = Math.round((this.frames * 1000) / (this.now - this._timeLastSecond)); this.fpsMin = Math.min(this.fpsMin, this.fps); this.fpsMax = Math.max(this.fpsMax, this.fps); this._timeLastSecond = this.now; this.frames = 0; } this.time = this.now; }; Time.prototype.elapsedSince = function (since) { return this.now - since; }; Time.prototype.elapsedSecondsSince = function (since) { return (this.now - since) * 0.001; }; Time.prototype.reset = function () { this._started = this.now; }; return Time; })(); Phaser.Time = Time; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Back = (function () { function Back() { } Back.In = function In(k) { var s = 1.70158; return k * k * ((s + 1) * k - s); }; Back.Out = function Out(k) { var s = 1.70158; return --k * k * ((s + 1) * k + s) + 1; }; Back.InOut = function InOut(k) { var s = 1.70158 * 1.525; if((k *= 2) < 1) { return 0.5 * (k * k * ((s + 1) * k - s)); } return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); }; return Back; })(); Easing.Back = Back; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Bounce = (function () { function Bounce() { } Bounce.In = function In(k) { return 1 - Phaser.Easing.Bounce.Out(1 - k); }; Bounce.Out = function Out(k) { if(k < (1 / 2.75)) { return 7.5625 * k * k; } else if(k < (2 / 2.75)) { return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; } else if(k < (2.5 / 2.75)) { return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; } else { return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; } }; Bounce.InOut = function InOut(k) { if(k < 0.5) { return Phaser.Easing.Bounce.In(k * 2) * 0.5; } return Phaser.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5; }; return Bounce; })(); Easing.Bounce = Bounce; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Circular = (function () { function Circular() { } Circular.In = function In(k) { return 1 - Math.sqrt(1 - k * k); }; Circular.Out = function Out(k) { return Math.sqrt(1 - (--k * k)); }; Circular.InOut = function InOut(k) { if((k *= 2) < 1) { return -0.5 * (Math.sqrt(1 - k * k) - 1); } return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1); }; return Circular; })(); Easing.Circular = Circular; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Cubic = (function () { function Cubic() { } Cubic.In = function In(k) { return k * k * k; }; Cubic.Out = function Out(k) { return --k * k * k + 1; }; Cubic.InOut = function InOut(k) { if((k *= 2) < 1) { return 0.5 * k * k * k; } return 0.5 * ((k -= 2) * k * k + 2); }; return Cubic; })(); Easing.Cubic = Cubic; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Elastic = (function () { function Elastic() { } Elastic.In = function In(k) { var s, a = 0.1, p = 0.4; if(k === 0) { return 0; } if(k === 1) { return 1; } if(!a || a < 1) { a = 1; s = p / 4; } else { s = p * Math.asin(1 / a) / (2 * Math.PI); } return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); }; Elastic.Out = function Out(k) { var s, a = 0.1, p = 0.4; if(k === 0) { return 0; } if(k === 1) { return 1; } if(!a || a < 1) { a = 1; s = p / 4; } else { s = p * Math.asin(1 / a) / (2 * Math.PI); } return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1); }; Elastic.InOut = function InOut(k) { var s, a = 0.1, p = 0.4; if(k === 0) { return 0; } if(k === 1) { return 1; } if(!a || a < 1) { a = 1; s = p / 4; } else { s = p * Math.asin(1 / a) / (2 * Math.PI); } if((k *= 2) < 1) { return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p)); } return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1; }; return Elastic; })(); Easing.Elastic = Elastic; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Exponential = (function () { function Exponential() { } Exponential.In = function In(k) { return k === 0 ? 0 : Math.pow(1024, k - 1); }; Exponential.Out = function Out(k) { return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); }; Exponential.InOut = function InOut(k) { if(k === 0) { return 0; } if(k === 1) { return 1; } if((k *= 2) < 1) { return 0.5 * Math.pow(1024, k - 1); } return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2); }; return Exponential; })(); Easing.Exponential = Exponential; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Linear = (function () { function Linear() { } Linear.None = function None(k) { return k; }; return Linear; })(); Easing.Linear = Linear; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Quadratic = (function () { function Quadratic() { } Quadratic.In = function In(k) { return k * k; }; Quadratic.Out = function Out(k) { return k * (2 - k); }; Quadratic.InOut = function InOut(k) { if((k *= 2) < 1) { return 0.5 * k * k; } return -0.5 * (--k * (k - 2) - 1); }; return Quadratic; })(); Easing.Quadratic = Quadratic; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Quartic = (function () { function Quartic() { } Quartic.In = function In(k) { return k * k * k * k; }; Quartic.Out = function Out(k) { return 1 - (--k * k * k * k); }; Quartic.InOut = function InOut(k) { if((k *= 2) < 1) { return 0.5 * k * k * k * k; } return -0.5 * ((k -= 2) * k * k * k - 2); }; return Quartic; })(); Easing.Quartic = Quartic; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Quintic = (function () { function Quintic() { } Quintic.In = function In(k) { return k * k * k * k * k; }; Quintic.Out = function Out(k) { return --k * k * k * k * k + 1; }; Quintic.InOut = function InOut(k) { if((k *= 2) < 1) { return 0.5 * k * k * k * k * k; } return 0.5 * ((k -= 2) * k * k * k * k + 2); }; return Quintic; })(); Easing.Quintic = Quintic; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { (function (Easing) { var Sinusoidal = (function () { function Sinusoidal() { } Sinusoidal.In = function In(k) { return 1 - Math.cos(k * Math.PI / 2); }; Sinusoidal.Out = function Out(k) { return Math.sin(k * Math.PI / 2); }; Sinusoidal.InOut = function InOut(k) { return 0.5 * (1 - Math.cos(Math.PI * k)); }; return Sinusoidal; })(); Easing.Sinusoidal = Sinusoidal; })(Phaser.Easing || (Phaser.Easing = {})); var Easing = Phaser.Easing; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Tween = (function () { function Tween(object, game) { this._object = null; this._pausedTime = 0; this._valuesStart = { }; this._valuesEnd = { }; this._duration = 1000; this._delayTime = 0; this._startTime = null; this._chainedTweens = []; this._object = object; this._game = game; this._manager = this._game.tweens; this._interpolationFunction = this._game.math.linearInterpolation; this._easingFunction = Phaser.Easing.Linear.None; this.onStart = new Phaser.Signal(); this.onUpdate = new Phaser.Signal(); this.onComplete = new Phaser.Signal(); } Tween.prototype.to = function (properties, duration, ease, autoStart) { if (typeof duration === "undefined") { duration = 1000; } if (typeof ease === "undefined") { ease = null; } if (typeof autoStart === "undefined") { autoStart = false; } this._duration = duration; this._valuesEnd = properties; if(ease !== null) { this._easingFunction = ease; } if(autoStart === true) { return this.start(); } else { return this; } }; Tween.prototype.start = function () { if(this._game === null || this._object === null) { return; } this._manager.add(this); this.onStart.dispatch(this._object); this._startTime = this._game.time.now + this._delayTime; for(var property in this._valuesEnd) { if(this._object[property] === null || !(property in this._object)) { throw Error('Phaser.Tween interpolation of null value of non-existing property'); continue; } if(this._valuesEnd[property] instanceof Array) { if(this._valuesEnd[property].length === 0) { continue; } this._valuesEnd[property] = [ this._object[property] ].concat(this._valuesEnd[property]); } this._valuesStart[property] = this._object[property]; } return this; }; Tween.prototype.stop = function () { if(this._manager !== null) { this._manager.remove(this); } return this; }; Object.defineProperty(Tween.prototype, "parent", { set: function (value) { this._game = value; this._manager = this._game.tweens; }, enumerable: true, configurable: true }); Object.defineProperty(Tween.prototype, "delay", { get: function () { return this._delayTime; }, set: function (amount) { this._delayTime = amount; }, enumerable: true, configurable: true }); Object.defineProperty(Tween.prototype, "easing", { get: function () { return this._easingFunction; }, set: function (easing) { this._easingFunction = easing; }, enumerable: true, configurable: true }); Object.defineProperty(Tween.prototype, "interpolation", { get: function () { return this._interpolationFunction; }, set: function (interpolation) { this._interpolationFunction = interpolation; }, enumerable: true, configurable: true }); Tween.prototype.chain = function (tween) { this._chainedTweens.push(tween); return this; }; Tween.prototype.update = function (time) { if(this._game.paused == true) { if(this._pausedTime == 0) { this._pausedTime = time; } } else { if(this._pausedTime > 0) { this._startTime += (time - this._pausedTime); this._pausedTime = 0; } } if(time < this._startTime) { return true; } var elapsed = (time - this._startTime) / this._duration; elapsed = elapsed > 1 ? 1 : elapsed; var value = this._easingFunction(elapsed); for(var property in this._valuesStart) { if(this._valuesEnd[property] instanceof Array) { this._object[property] = this._interpolationFunction(this._valuesEnd[property], value); } else { this._object[property] = this._valuesStart[property] + (this._valuesEnd[property] - this._valuesStart[property]) * value; } } this.onUpdate.dispatch(this._object, value); if(elapsed == 1) { this.onComplete.dispatch(this._object); for(var i = 0; i < this._chainedTweens.length; i++) { this._chainedTweens[i].start(); } return false; } return true; }; return Tween; })(); Phaser.Tween = Tween; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var TweenManager = (function () { function TweenManager(game) { this._game = game; this._tweens = []; } TweenManager.prototype.getAll = function () { return this._tweens; }; TweenManager.prototype.removeAll = function () { this._tweens.length = 0; }; TweenManager.prototype.create = function (object) { return new Phaser.Tween(object, this._game); }; TweenManager.prototype.add = function (tween) { tween.parent = this._game; this._tweens.push(tween); return tween; }; TweenManager.prototype.remove = function (tween) { var i = this._tweens.indexOf(tween); if(i !== -1) { this._tweens.splice(i, 1); } }; TweenManager.prototype.update = function () { if(this._tweens.length === 0) { return false; } var i = 0; var numTweens = this._tweens.length; while(i < numTweens) { if(this._tweens[i].update(this._game.time.now)) { i++; } else { this._tweens.splice(i, 1); numTweens--; } } return true; }; return TweenManager; })(); Phaser.TweenManager = TweenManager; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var World = (function () { function World(game, width, height) { this._game = game; this._cameras = new Phaser.CameraManager(this._game, 0, 0, width, height); this._game.camera = this._cameras.current; this.group = new Phaser.Group(this._game, 0); this.bounds = new Phaser.Rectangle(0, 0, width, height); this.worldDivisions = 6; } World.prototype.update = function () { this.group.preUpdate(); this.group.update(); this.group.postUpdate(); this._cameras.update(); }; World.prototype.render = function () { this._cameras.render(); }; World.prototype.destroy = function () { this.group.destroy(); this._cameras.destroy(); }; World.prototype.setSize = function (width, height, updateCameraBounds) { if (typeof updateCameraBounds === "undefined") { updateCameraBounds = true; } this.bounds.width = width; this.bounds.height = height; if(updateCameraBounds == true) { this._game.camera.setBounds(0, 0, width, height); } }; Object.defineProperty(World.prototype, "width", { get: function () { return this.bounds.width; }, set: function (value) { this.bounds.width = value; }, enumerable: true, configurable: true }); Object.defineProperty(World.prototype, "height", { get: function () { return this.bounds.height; }, set: function (value) { this.bounds.height = value; }, enumerable: true, configurable: true }); Object.defineProperty(World.prototype, "centerX", { get: function () { return this.bounds.halfWidth; }, enumerable: true, configurable: true }); Object.defineProperty(World.prototype, "centerY", { get: function () { return this.bounds.halfHeight; }, enumerable: true, configurable: true }); Object.defineProperty(World.prototype, "randomX", { get: function () { return Math.round(Math.random() * this.bounds.width); }, enumerable: true, configurable: true }); Object.defineProperty(World.prototype, "randomY", { get: function () { return Math.round(Math.random() * this.bounds.height); }, enumerable: true, configurable: true }); World.prototype.addExistingCamera = function (cam) { return cam; }; World.prototype.createCamera = function (x, y, width, height) { return this._cameras.addCamera(x, y, width, height); }; World.prototype.removeCamera = function (id) { return this._cameras.removeCamera(id); }; World.prototype.getAllCameras = function () { return this._cameras.getAll(); }; World.prototype.addExistingSprite = function (sprite) { return this.group.add(sprite); }; World.prototype.createSprite = function (x, y, key) { if (typeof key === "undefined") { key = ''; } return this.group.add(new Phaser.Sprite(this._game, x, y, key)); }; World.prototype.createGeomSprite = function (x, y) { return this.group.add(new Phaser.GeomSprite(this._game, x, y)); }; World.prototype.createDynamicTexture = function (key, width, height) { return new Phaser.DynamicTexture(this._game, key, width, height); }; World.prototype.createGroup = function (MaxSize) { if (typeof MaxSize === "undefined") { MaxSize = 0; } return this.group.add(new Phaser.Group(this._game, MaxSize)); }; World.prototype.createTilemap = function (key, mapData, format, tileWidth, tileHeight) { return this.group.add(new Phaser.Tilemap(this._game, key, mapData, format, tileWidth, tileHeight)); }; World.prototype.createParticle = function () { return new Phaser.Particle(this._game); }; World.prototype.createEmitter = function (x, y, size) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof size === "undefined") { size = 0; } return this.group.add(new Phaser.Emitter(this._game, x, y, size)); }; return World; })(); Phaser.World = World; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Device = (function () { function Device() { this.desktop = false; this.iOS = false; this.android = false; this.chromeOS = false; this.linux = false; this.macOS = false; this.windows = false; this.canvas = false; this.file = false; this.fileSystem = false; this.localStorage = false; this.webGL = false; this.worker = false; this.touch = false; this.css3D = false; this.arora = false; this.chrome = false; this.epiphany = false; this.firefox = false; this.ie = false; this.ieVersion = 0; this.mobileSafari = false; this.midori = false; this.opera = false; this.safari = false; this.webApp = false; this.audioData = false; this.webaudio = false; this.ogg = false; this.mp3 = false; this.wav = false; this.m4a = false; this.iPhone = false; this.iPhone4 = false; this.iPad = false; this.pixelRatio = 0; this._checkAudio(); this._checkBrowser(); this._checkCSS3D(); this._checkDevice(); this._checkFeatures(); this._checkOS(); } Device.prototype._checkOS = function () { var ua = navigator.userAgent; if(/Android/.test(ua)) { this.android = true; } else if(/CrOS/.test(ua)) { this.chromeOS = true; } else if(/iP[ao]d|iPhone/i.test(ua)) { this.iOS = true; } else if(/Linux/.test(ua)) { this.linux = true; } else if(/Mac OS/.test(ua)) { this.macOS = true; } else if(/Windows/.test(ua)) { this.windows = true; } if(this.windows || this.macOS || this.linux) { this.desktop = true; } }; Device.prototype._checkFeatures = function () { this.canvas = !!window['CanvasRenderingContext2D']; try { this.localStorage = !!localStorage.getItem; } catch (error) { this.localStorage = false; } this.file = !!window['File'] && !!window['FileReader'] && !!window['FileList'] && !!window['Blob']; this.fileSystem = !!window['requestFileSystem']; this.webGL = !!window['WebGLRenderingContext']; this.worker = !!window['Worker']; if('ontouchstart' in document.documentElement || window.navigator.msPointerEnabled) { this.touch = true; } }; Device.prototype._checkBrowser = function () { var ua = navigator.userAgent; if(/Arora/.test(ua)) { this.arora = true; } else if(/Chrome/.test(ua)) { this.chrome = true; } else if(/Epiphany/.test(ua)) { this.epiphany = true; } else if(/Firefox/.test(ua)) { this.firefox = true; } else if(/Mobile Safari/.test(ua)) { this.mobileSafari = true; } else if(/MSIE (\d+\.\d+);/.test(ua)) { this.ie = true; this.ieVersion = parseInt(RegExp.$1); } else if(/Midori/.test(ua)) { this.midori = true; } else if(/Opera/.test(ua)) { this.opera = true; } else if(/Safari/.test(ua)) { this.safari = true; } if(navigator['standalone']) { this.webApp = true; } }; Device.prototype._checkAudio = function () { this.audioData = !!(window['Audio']); this.webaudio = !!(window['webkitAudioContext'] || window['AudioContext']); var audioElement = document.createElement('audio'); var result = false; try { if(result = !!audioElement.canPlayType) { if(audioElement.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, '')) { this.ogg = true; } if(audioElement.canPlayType('audio/mpeg;').replace(/^no$/, '')) { this.mp3 = true; } if(audioElement.canPlayType('audio/wav; codecs="1"').replace(/^no$/, '')) { this.wav = true; } if(audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, '')) { this.m4a = true; } } } catch (e) { } }; Device.prototype._checkDevice = function () { this.pixelRatio = window['devicePixelRatio'] || 1; this.iPhone = navigator.userAgent.toLowerCase().indexOf('iphone') != -1; this.iPhone4 = (this.pixelRatio == 2 && this.iPhone); this.iPad = navigator.userAgent.toLowerCase().indexOf('ipad') != -1; }; Device.prototype._checkCSS3D = function () { var el = document.createElement('p'); var has3d; var transforms = { 'webkitTransform': '-webkit-transform', 'OTransform': '-o-transform', 'msTransform': '-ms-transform', 'MozTransform': '-moz-transform', 'transform': 'transform' }; document.body.insertBefore(el, null); for(var t in transforms) { if(el.style[t] !== undefined) { el.style[t] = "translate3d(1px,1px,1px)"; has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]); } } document.body.removeChild(el); this.css3D = (has3d !== undefined && has3d.length > 0 && has3d !== "none"); }; Device.prototype.getAll = function () { var output = ''; output = output.concat('Device\n'); output = output.concat('iPhone : ' + this.iPhone + '\n'); output = output.concat('iPhone4 : ' + this.iPhone4 + '\n'); output = output.concat('iPad : ' + this.iPad + '\n'); output = output.concat('\n'); output = output.concat('Operating System\n'); output = output.concat('iOS: ' + this.iOS + '\n'); output = output.concat('Android: ' + this.android + '\n'); output = output.concat('ChromeOS: ' + this.chromeOS + '\n'); output = output.concat('Linux: ' + this.linux + '\n'); output = output.concat('MacOS: ' + this.macOS + '\n'); output = output.concat('Windows: ' + this.windows + '\n'); output = output.concat('\n'); output = output.concat('Browser\n'); output = output.concat('Arora: ' + this.arora + '\n'); output = output.concat('Chrome: ' + this.chrome + '\n'); output = output.concat('Epiphany: ' + this.epiphany + '\n'); output = output.concat('Firefox: ' + this.firefox + '\n'); output = output.concat('Internet Explorer: ' + this.ie + ' (' + this.ieVersion + ')\n'); output = output.concat('Mobile Safari: ' + this.mobileSafari + '\n'); output = output.concat('Midori: ' + this.midori + '\n'); output = output.concat('Opera: ' + this.opera + '\n'); output = output.concat('Safari: ' + this.safari + '\n'); output = output.concat('\n'); output = output.concat('Features\n'); output = output.concat('Canvas: ' + this.canvas + '\n'); output = output.concat('File: ' + this.file + '\n'); output = output.concat('FileSystem: ' + this.fileSystem + '\n'); output = output.concat('LocalStorage: ' + this.localStorage + '\n'); output = output.concat('WebGL: ' + this.webGL + '\n'); output = output.concat('Worker: ' + this.worker + '\n'); output = output.concat('Touch: ' + this.touch + '\n'); output = output.concat('CSS 3D: ' + this.css3D + '\n'); output = output.concat('\n'); output = output.concat('Audio\n'); output = output.concat('Audio Data: ' + this.canvas + '\n'); output = output.concat('Web Audio: ' + this.canvas + '\n'); output = output.concat('Can play OGG: ' + this.canvas + '\n'); output = output.concat('Can play MP3: ' + this.canvas + '\n'); output = output.concat('Can play M4A: ' + this.canvas + '\n'); output = output.concat('Can play WAV: ' + this.canvas + '\n'); return output; }; return Device; })(); Phaser.Device = Device; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var RandomDataGenerator = (function () { function RandomDataGenerator(seeds) { if (typeof seeds === "undefined") { seeds = []; } this.c = 1; this.sow(seeds); } RandomDataGenerator.prototype.uint32 = function () { return this.rnd.apply(this) * 0x100000000; }; RandomDataGenerator.prototype.fract32 = function () { return this.rnd.apply(this) + (this.rnd.apply(this) * 0x200000 | 0) * 1.1102230246251565e-16; }; RandomDataGenerator.prototype.rnd = function () { var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; this.c = t | 0; this.s0 = this.s1; this.s1 = this.s2; this.s2 = t - this.c; return this.s2; }; RandomDataGenerator.prototype.hash = function (data) { var h, i, n; n = 0xefc8249d; data = data.toString(); for(i = 0; i < data.length; i++) { n += data.charCodeAt(i); h = 0.02519603282416938 * n; n = h >>> 0; h -= n; h *= n; n = h >>> 0; h -= n; n += h * 0x100000000; } return (n >>> 0) * 2.3283064365386963e-10; }; RandomDataGenerator.prototype.sow = function (seeds) { if (typeof seeds === "undefined") { seeds = []; } this.s0 = this.hash(' '); this.s1 = this.hash(this.s0); this.s2 = this.hash(this.s1); var seed; for(var i = 0; seed = seeds[i++]; ) { this.s0 -= this.hash(seed); this.s0 += ~~(this.s0 < 0); this.s1 -= this.hash(seed); this.s1 += ~~(this.s1 < 0); this.s2 -= this.hash(seed); this.s2 += ~~(this.s2 < 0); } }; Object.defineProperty(RandomDataGenerator.prototype, "integer", { get: function () { return this.uint32(); }, enumerable: true, configurable: true }); Object.defineProperty(RandomDataGenerator.prototype, "frac", { get: function () { return this.fract32(); }, enumerable: true, configurable: true }); Object.defineProperty(RandomDataGenerator.prototype, "real", { get: function () { return this.uint32() + this.fract32(); }, enumerable: true, configurable: true }); RandomDataGenerator.prototype.integerInRange = function (min, max) { return Math.floor(this.realInRange(min, max)); }; RandomDataGenerator.prototype.realInRange = function (min, max) { min = min || 0; max = max || 0; return this.frac * (max - min) + min; }; Object.defineProperty(RandomDataGenerator.prototype, "normal", { get: function () { return 1 - 2 * this.frac; }, enumerable: true, configurable: true }); Object.defineProperty(RandomDataGenerator.prototype, "uuid", { get: function () { var a, b; for(b = a = ''; a++ < 36; b += ~a % 5 | a * 3 & 4 ? (a ^ 15 ? 8 ^ this.frac * (a ^ 20 ? 16 : 4) : 4).toString(16) : '-') { ; } return b; }, enumerable: true, configurable: true }); RandomDataGenerator.prototype.pick = function (array) { return array[this.integerInRange(0, array.length)]; }; RandomDataGenerator.prototype.weightedPick = function (array) { return array[~~(Math.pow(this.frac, 2) * array.length)]; }; RandomDataGenerator.prototype.timestamp = function (min, max) { if (typeof min === "undefined") { min = 946684800000; } if (typeof max === "undefined") { max = 1577862000000; } return this.realInRange(min, max); }; Object.defineProperty(RandomDataGenerator.prototype, "angle", { get: function () { return this.integerInRange(-180, 180); }, enumerable: true, configurable: true }); return RandomDataGenerator; })(); Phaser.RandomDataGenerator = RandomDataGenerator; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var RequestAnimationFrame = (function () { function RequestAnimationFrame(callback, callbackContext) { this._isSetTimeOut = false; this.lastTime = 0; this.currentTime = 0; this.isRunning = false; this._callback = callback; this._callbackContext = callbackContext; var vendors = [ 'ms', 'moz', 'webkit', 'o' ]; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; x++) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame']; } this.start(); } RequestAnimationFrame.prototype.setCallback = function (callback) { this._callback = callback; }; RequestAnimationFrame.prototype.isUsingSetTimeOut = function () { return this._isSetTimeOut; }; RequestAnimationFrame.prototype.isUsingRAF = function () { if(this._isSetTimeOut === true) { return false; } else { return true; } }; RequestAnimationFrame.prototype.start = function (callback) { if (typeof callback === "undefined") { callback = null; } var _this = this; if(callback) { this._callback = callback; } if(!window.requestAnimationFrame) { this._isSetTimeOut = true; this._timeOutID = window.setTimeout(function () { return _this.SetTimeoutUpdate(); }, 0); } else { this._isSetTimeOut = false; window.requestAnimationFrame(function () { return _this.RAFUpdate(); }); } this.isRunning = true; }; RequestAnimationFrame.prototype.stop = function () { if(this._isSetTimeOut) { clearTimeout(this._timeOutID); } else { window.cancelAnimationFrame; } this.isRunning = false; }; RequestAnimationFrame.prototype.RAFUpdate = function () { var _this = this; this.currentTime = Date.now(); if(this._callback) { this._callback.call(this._callbackContext); } var timeToCall = Math.max(0, 16 - (this.currentTime - this.lastTime)); window.requestAnimationFrame(function () { return _this.RAFUpdate(); }); this.lastTime = this.currentTime + timeToCall; }; RequestAnimationFrame.prototype.SetTimeoutUpdate = function () { var _this = this; this.currentTime = Date.now(); if(this._callback) { this._callback.call(this._callbackContext); } var timeToCall = Math.max(0, 16 - (this.currentTime - this.lastTime)); this._timeOutID = window.setTimeout(function () { return _this.SetTimeoutUpdate(); }, timeToCall); this.lastTime = this.currentTime + timeToCall; }; return RequestAnimationFrame; })(); Phaser.RequestAnimationFrame = RequestAnimationFrame; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Input = (function () { function Input(game) { this.x = 0; this.y = 0; this.scaleX = 1; this.scaleY = 1; this.worldX = 0; this.worldY = 0; this._game = game; this.mouse = new Phaser.Mouse(this._game); this.keyboard = new Phaser.Keyboard(this._game); this.touch = new Phaser.Touch(this._game); this.onDown = new Phaser.Signal(); this.onUp = new Phaser.Signal(); } Input.prototype.update = function () { this.x = Math.round(this.x); this.y = Math.round(this.y); this.worldX = this._game.camera.worldView.x + this.x; this.worldY = this._game.camera.worldView.y + this.y; this.mouse.update(); this.touch.update(); }; Input.prototype.reset = function () { this.mouse.reset(); this.keyboard.reset(); this.touch.reset(); }; Input.prototype.getWorldX = function (camera) { if (typeof camera === "undefined") { camera = this._game.camera; } return camera.worldView.x + this.x; }; Input.prototype.getWorldY = function (camera) { if (typeof camera === "undefined") { camera = this._game.camera; } return camera.worldView.y + this.y; }; Input.prototype.renderDebugInfo = function (x, y, color) { if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } this._game.stage.context.fillStyle = color; this._game.stage.context.fillText('Input', x, y); this._game.stage.context.fillText('Screen X: ' + this.x + ' Screen Y: ' + this.y, x, y + 14); this._game.stage.context.fillText('World X: ' + this.worldX + ' World Y: ' + this.worldY, x, y + 28); this._game.stage.context.fillText('Scale X: ' + this.scaleX.toFixed(1) + ' Scale Y: ' + this.scaleY.toFixed(1), x, y + 42); }; return Input; })(); Phaser.Input = Input; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Keyboard = (function () { function Keyboard(game) { this._keys = { }; this._capture = { }; this._game = game; this.start(); } Keyboard.prototype.start = function () { var _this = this; document.body.addEventListener('keydown', function (event) { return _this.onKeyDown(event); }, false); document.body.addEventListener('keyup', function (event) { return _this.onKeyUp(event); }, false); }; Keyboard.prototype.addKeyCapture = function (keycode) { this._capture[keycode] = true; }; Keyboard.prototype.removeKeyCapture = function (keycode) { delete this._capture[keycode]; }; Keyboard.prototype.clearCaptures = function () { this._capture = { }; }; Keyboard.prototype.onKeyDown = function (event) { if(this._capture[event.keyCode]) { event.preventDefault(); } if(!this._keys[event.keyCode]) { this._keys[event.keyCode] = { isDown: true, timeDown: this._game.time.now, timeUp: 0 }; } else { this._keys[event.keyCode].isDown = true; this._keys[event.keyCode].timeDown = this._game.time.now; } }; Keyboard.prototype.onKeyUp = function (event) { if(this._capture[event.keyCode]) { event.preventDefault(); } if(!this._keys[event.keyCode]) { this._keys[event.keyCode] = { isDown: false, timeDown: 0, timeUp: this._game.time.now }; } else { this._keys[event.keyCode].isDown = false; this._keys[event.keyCode].timeUp = this._game.time.now; } }; Keyboard.prototype.reset = function () { for(var key in this._keys) { this._keys[key].isDown = false; } }; Keyboard.prototype.justPressed = function (keycode, duration) { if (typeof duration === "undefined") { duration = 250; } if(this._keys[keycode] && this._keys[keycode].isDown === true && (this._game.time.now - this._keys[keycode].timeDown < duration)) { return true; } else { return false; } }; Keyboard.prototype.justReleased = function (keycode, duration) { if (typeof duration === "undefined") { duration = 250; } if(this._keys[keycode] && this._keys[keycode].isDown === false && (this._game.time.now - this._keys[keycode].timeUp < duration)) { return true; } else { return false; } }; Keyboard.prototype.isDown = function (keycode) { if(this._keys[keycode]) { return this._keys[keycode].isDown; } else { return false; } }; Keyboard.A = "A".charCodeAt(0); Keyboard.B = "B".charCodeAt(0); Keyboard.C = "C".charCodeAt(0); Keyboard.D = "D".charCodeAt(0); Keyboard.E = "E".charCodeAt(0); Keyboard.F = "F".charCodeAt(0); Keyboard.G = "G".charCodeAt(0); Keyboard.H = "H".charCodeAt(0); Keyboard.I = "I".charCodeAt(0); Keyboard.J = "J".charCodeAt(0); Keyboard.K = "K".charCodeAt(0); Keyboard.L = "L".charCodeAt(0); Keyboard.M = "M".charCodeAt(0); Keyboard.N = "N".charCodeAt(0); Keyboard.O = "O".charCodeAt(0); Keyboard.P = "P".charCodeAt(0); Keyboard.Q = "Q".charCodeAt(0); Keyboard.R = "R".charCodeAt(0); Keyboard.S = "S".charCodeAt(0); Keyboard.T = "T".charCodeAt(0); Keyboard.U = "U".charCodeAt(0); Keyboard.V = "V".charCodeAt(0); Keyboard.W = "W".charCodeAt(0); Keyboard.X = "X".charCodeAt(0); Keyboard.Y = "Y".charCodeAt(0); Keyboard.Z = "Z".charCodeAt(0); Keyboard.ZERO = "0".charCodeAt(0); Keyboard.ONE = "1".charCodeAt(0); Keyboard.TWO = "2".charCodeAt(0); Keyboard.THREE = "3".charCodeAt(0); Keyboard.FOUR = "4".charCodeAt(0); Keyboard.FIVE = "5".charCodeAt(0); Keyboard.SIX = "6".charCodeAt(0); Keyboard.SEVEN = "7".charCodeAt(0); Keyboard.EIGHT = "8".charCodeAt(0); Keyboard.NINE = "9".charCodeAt(0); Keyboard.NUMPAD_0 = 96; Keyboard.NUMPAD_1 = 97; Keyboard.NUMPAD_2 = 98; Keyboard.NUMPAD_3 = 99; Keyboard.NUMPAD_4 = 100; Keyboard.NUMPAD_5 = 101; Keyboard.NUMPAD_6 = 102; Keyboard.NUMPAD_7 = 103; Keyboard.NUMPAD_8 = 104; Keyboard.NUMPAD_9 = 105; Keyboard.NUMPAD_MULTIPLY = 106; Keyboard.NUMPAD_ADD = 107; Keyboard.NUMPAD_ENTER = 108; Keyboard.NUMPAD_SUBTRACT = 109; Keyboard.NUMPAD_DECIMAL = 110; Keyboard.NUMPAD_DIVIDE = 111; Keyboard.F1 = 112; Keyboard.F2 = 113; Keyboard.F3 = 114; Keyboard.F4 = 115; Keyboard.F5 = 116; Keyboard.F6 = 117; Keyboard.F7 = 118; Keyboard.F8 = 119; Keyboard.F9 = 120; Keyboard.F10 = 121; Keyboard.F11 = 122; Keyboard.F12 = 123; Keyboard.F13 = 124; Keyboard.F14 = 125; Keyboard.F15 = 126; Keyboard.COLON = 186; Keyboard.EQUALS = 187; Keyboard.UNDERSCORE = 189; Keyboard.QUESTION_MARK = 191; Keyboard.TILDE = 192; Keyboard.OPEN_BRACKET = 219; Keyboard.BACKWARD_SLASH = 220; Keyboard.CLOSED_BRACKET = 221; Keyboard.QUOTES = 222; Keyboard.BACKSPACE = 8; Keyboard.TAB = 9; Keyboard.CLEAR = 12; Keyboard.ENTER = 13; Keyboard.SHIFT = 16; Keyboard.CONTROL = 17; Keyboard.ALT = 18; Keyboard.CAPS_LOCK = 20; Keyboard.ESC = 27; Keyboard.SPACEBAR = 32; Keyboard.PAGE_UP = 33; Keyboard.PAGE_DOWN = 34; Keyboard.END = 35; Keyboard.HOME = 36; Keyboard.LEFT = 37; Keyboard.UP = 38; Keyboard.RIGHT = 39; Keyboard.DOWN = 40; Keyboard.INSERT = 45; Keyboard.DELETE = 46; Keyboard.HELP = 47; Keyboard.NUM_LOCK = 144; return Keyboard; })(); Phaser.Keyboard = Keyboard; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Mouse = (function () { function Mouse(game) { this._x = 0; this._y = 0; this.isDown = false; this.isUp = true; this.timeDown = 0; this.duration = 0; this.timeUp = 0; this._game = game; this.start(); } Mouse.LEFT_BUTTON = 0; Mouse.MIDDLE_BUTTON = 1; Mouse.RIGHT_BUTTON = 2; Mouse.prototype.start = function () { var _this = this; this._game.stage.canvas.addEventListener('mousedown', function (event) { return _this.onMouseDown(event); }, true); this._game.stage.canvas.addEventListener('mousemove', function (event) { return _this.onMouseMove(event); }, true); this._game.stage.canvas.addEventListener('mouseup', function (event) { return _this.onMouseUp(event); }, true); }; Mouse.prototype.reset = function () { this.isDown = false; this.isUp = true; }; Mouse.prototype.onMouseDown = function (event) { this.button = event.button; this._x = event.clientX - this._game.stage.x; this._y = event.clientY - this._game.stage.y; this._game.input.x = this._x * this._game.input.scaleX; this._game.input.y = this._y * this._game.input.scaleY; this.isDown = true; this.isUp = false; this.timeDown = this._game.time.now; this._game.input.onDown.dispatch(this._game.input.x, this._game.input.y, this.timeDown); }; Mouse.prototype.update = function () { if(this.isDown) { this.duration = this._game.time.now - this.timeDown; } }; Mouse.prototype.onMouseMove = function (event) { this.button = event.button; this._x = event.clientX - this._game.stage.x; this._y = event.clientY - this._game.stage.y; this._game.input.x = this._x * this._game.input.scaleX; this._game.input.y = this._y * this._game.input.scaleY; }; Mouse.prototype.onMouseUp = function (event) { this.button = event.button; this.isDown = false; this.isUp = true; this.timeUp = this._game.time.now; this.duration = this.timeUp - this.timeDown; this._x = event.clientX - this._game.stage.x; this._y = event.clientY - this._game.stage.y; this._game.input.x = this._x * this._game.input.scaleX; this._game.input.y = this._y * this._game.input.scaleY; this._game.input.onUp.dispatch(this._game.input.x, this._game.input.y, this.timeDown); }; return Mouse; })(); Phaser.Mouse = Mouse; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Finger = (function () { function Finger(game) { this.point = null; this.circle = null; this.withinGame = false; 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.isDown = false; this.isUp = false; this.timeDown = 0; this.duration = 0; this.timeUp = 0; this.justPressedRate = 200; this.justReleasedRate = 200; this._game = game; this.active = false; } Finger.prototype.start = function (event) { this.identifier = event.identifier; this.target = event.target; if(this.point === null) { this.point = new Phaser.Point(); } if(this.circle === null) { this.circle = new Phaser.Circle(0, 0, 44); } this.move(event); this.active = true; this.withinGame = true; this.isDown = true; this.isUp = false; this.timeDown = this._game.time.now; }; Finger.prototype.move = function (event) { this.clientX = event.clientX; this.clientY = event.clientY; this.pageX = event.pageX; this.pageY = event.pageY; this.screenX = event.screenX; this.screenY = event.screenY; this.x = this.pageX - this._game.stage.offset.x; this.y = this.pageY - this._game.stage.offset.y; this.point.setTo(this.x, this.y); this.circle.setTo(this.x, this.y, 44); this.duration = this._game.time.now - this.timeDown; }; Finger.prototype.leave = function (event) { this.withinGame = false; this.move(event); }; Finger.prototype.stop = function (event) { this.active = false; this.withinGame = false; this.isDown = false; this.isUp = true; this.timeUp = this._game.time.now; this.duration = this.timeUp - this.timeDown; }; Finger.prototype.justPressed = function (duration) { if (typeof duration === "undefined") { duration = this.justPressedRate; } if(this.isDown === true && (this.timeDown + duration) > this._game.time.now) { return true; } else { return false; } }; Finger.prototype.justReleased = function (duration) { if (typeof duration === "undefined") { duration = this.justReleasedRate; } if(this.isUp === true && (this.timeUp + duration) > this._game.time.now) { return true; } else { return false; } }; Finger.prototype.toString = function () { return "[{Finger (identifer=" + this.identifier + " active=" + this.active + " duration=" + this.duration + " withinGame=" + this.withinGame + " x=" + this.x + " y=" + this.y + " clientX=" + this.clientX + " clientY=" + this.clientY + " screenX=" + this.screenX + " screenY=" + this.screenY + " pageX=" + this.pageX + " pageY=" + this.pageY + ")}]"; }; return Finger; })(); Phaser.Finger = Finger; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Touch = (function () { function Touch(game) { this.x = 0; this.y = 0; this.isDown = false; this.isUp = true; this._game = game; this.finger1 = new Phaser.Finger(this._game); this.finger2 = new Phaser.Finger(this._game); this.finger3 = new Phaser.Finger(this._game); this.finger4 = new Phaser.Finger(this._game); this.finger5 = new Phaser.Finger(this._game); this.finger6 = new Phaser.Finger(this._game); this.finger7 = new Phaser.Finger(this._game); this.finger8 = new Phaser.Finger(this._game); this.finger9 = new Phaser.Finger(this._game); this.finger10 = new Phaser.Finger(this._game); this._fingers = [ this.finger1, this.finger2, this.finger3, this.finger4, this.finger5, this.finger6, this.finger7, this.finger8, this.finger9, this.finger10 ]; this.touchDown = new Phaser.Signal(); this.touchUp = new Phaser.Signal(); this.start(); } Touch.prototype.start = function () { var _this = this; this._game.stage.canvas.addEventListener('touchstart', function (event) { return _this.onTouchStart(event); }, false); this._game.stage.canvas.addEventListener('touchmove', function (event) { return _this.onTouchMove(event); }, false); this._game.stage.canvas.addEventListener('touchend', function (event) { return _this.onTouchEnd(event); }, false); this._game.stage.canvas.addEventListener('touchenter', function (event) { return _this.onTouchEnter(event); }, false); this._game.stage.canvas.addEventListener('touchleave', function (event) { return _this.onTouchLeave(event); }, false); this._game.stage.canvas.addEventListener('touchcancel', function (event) { return _this.onTouchCancel(event); }, false); document.addEventListener('touchmove', function (event) { return _this.consumeTouchMove(event); }, false); }; Touch.prototype.consumeTouchMove = function (event) { event.preventDefault(); }; Touch.prototype.onTouchStart = function (event) { event.preventDefault(); for(var i = 0; i < event.changedTouches.length; i++) { for(var f = 0; f < this._fingers.length; f++) { if(this._fingers[f].active === false) { this._fingers[f].start(event.changedTouches[i]); this.x = this._fingers[f].x; this.y = this._fingers[f].y; this._game.input.x = this.x * this._game.input.scaleX; this._game.input.y = this.y * this._game.input.scaleY; this.touchDown.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration); this._game.input.onDown.dispatch(this._game.input.x, this._game.input.y, this._fingers[f].timeDown); this.isDown = true; this.isUp = false; break; } } } }; Touch.prototype.onTouchCancel = function (event) { event.preventDefault(); for(var i = 0; i < event.changedTouches.length; i++) { for(var f = 0; f < this._fingers.length; f++) { if(this._fingers[f].identifier === event.changedTouches[i].identifier) { this._fingers[f].stop(event.changedTouches[i]); break; } } } }; Touch.prototype.onTouchEnter = function (event) { event.preventDefault(); for(var i = 0; i < event.changedTouches.length; i++) { for(var f = 0; f < this._fingers.length; f++) { if(this._fingers[f].active === false) { this._fingers[f].start(event.changedTouches[i]); break; } } } }; Touch.prototype.onTouchLeave = function (event) { event.preventDefault(); for(var i = 0; i < event.changedTouches.length; i++) { for(var f = 0; f < this._fingers.length; f++) { if(this._fingers[f].identifier === event.changedTouches[i].identifier) { this._fingers[f].leave(event.changedTouches[i]); break; } } } }; Touch.prototype.onTouchMove = function (event) { event.preventDefault(); for(var i = 0; i < event.changedTouches.length; i++) { for(var f = 0; f < this._fingers.length; f++) { if(this._fingers[f].identifier === event.changedTouches[i].identifier) { this._fingers[f].move(event.changedTouches[i]); this.x = this._fingers[f].x; this.y = this._fingers[f].y; this._game.input.x = this.x * this._game.input.scaleX; this._game.input.y = this.y * this._game.input.scaleY; break; } } } }; Touch.prototype.onTouchEnd = function (event) { event.preventDefault(); for(var i = 0; i < event.changedTouches.length; i++) { for(var f = 0; f < this._fingers.length; f++) { if(this._fingers[f].identifier === event.changedTouches[i].identifier) { this._fingers[f].stop(event.changedTouches[i]); this.x = this._fingers[f].x; this.y = this._fingers[f].y; this._game.input.x = this.x * this._game.input.scaleX; this._game.input.y = this.y * this._game.input.scaleY; this.touchUp.dispatch(this._fingers[f].x, this._fingers[f].y, this._fingers[f].timeDown, this._fingers[f].timeUp, this._fingers[f].duration); this._game.input.onUp.dispatch(this._game.input.x, this._game.input.y, this._fingers[f].timeUp); this.isDown = false; this.isUp = true; break; } } } }; Touch.prototype.calculateDistance = function (finger1, finger2) { }; Touch.prototype.calculateAngle = function (finger1, finger2) { }; Touch.prototype.checkOverlap = function (finger1, finger2) { }; Touch.prototype.update = function () { }; Touch.prototype.stop = function () { }; Touch.prototype.reset = function () { this.isDown = false; this.isUp = false; }; return Touch; })(); Phaser.Touch = Touch; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Emitter = (function (_super) { __extends(Emitter, _super); function Emitter(game, X, Y, Size) { if (typeof X === "undefined") { X = 0; } if (typeof Y === "undefined") { Y = 0; } if (typeof Size === "undefined") { Size = 0; } _super.call(this, game, Size); this.x = X; this.y = Y; this.width = 0; this.height = 0; this.minParticleSpeed = new Phaser.Point(-100, -100); this.maxParticleSpeed = new Phaser.Point(100, 100); this.minRotation = -360; this.maxRotation = 360; this.gravity = 0; this.particleClass = null; this.particleDrag = new Phaser.Point(); this.frequency = 0.1; this.lifespan = 3; this.bounce = 0; this._quantity = 0; this._counter = 0; this._explode = true; this.on = false; this._point = new Phaser.Point(); } Emitter.prototype.destroy = function () { this.minParticleSpeed = null; this.maxParticleSpeed = null; this.particleDrag = null; this.particleClass = null; this._point = null; _super.prototype.destroy.call(this); }; Emitter.prototype.makeParticles = function (Graphics, Quantity, BakedRotations, Multiple, Collide) { if (typeof Quantity === "undefined") { Quantity = 50; } if (typeof BakedRotations === "undefined") { BakedRotations = 16; } if (typeof Multiple === "undefined") { Multiple = false; } if (typeof Collide === "undefined") { Collide = 0.8; } this.maxSize = Quantity; var totalFrames = 1; var randomFrame; var particle; var i = 0; while(i < Quantity) { if(this.particleClass == null) { particle = new Phaser.Particle(this._game); } else { particle = new this.particleClass(this._game); } if(Multiple) { } else { if(Graphics) { particle.loadGraphic(Graphics); } } if(Collide > 0) { particle.width *= Collide; particle.height *= Collide; } else { particle.allowCollisions = Phaser.Collision.NONE; } particle.exists = false; this.add(particle); i++; } return this; }; Emitter.prototype.update = function () { if(this.on) { if(this._explode) { this.on = false; var i = 0; var l = this._quantity; if((l <= 0) || (l > this.length)) { l = this.length; } while(i < l) { this.emitParticle(); i++; } this._quantity = 0; } else { this._timer += this._game.time.elapsed; while((this.frequency > 0) && (this._timer > this.frequency) && this.on) { this._timer -= this.frequency; this.emitParticle(); if((this._quantity > 0) && (++this._counter >= this._quantity)) { this.on = false; this._quantity = 0; } } } } _super.prototype.update.call(this); }; Emitter.prototype.kill = function () { this.on = false; _super.prototype.kill.call(this); }; Emitter.prototype.start = function (Explode, Lifespan, Frequency, Quantity) { if (typeof Explode === "undefined") { Explode = true; } if (typeof Lifespan === "undefined") { Lifespan = 0; } if (typeof Frequency === "undefined") { Frequency = 0.1; } if (typeof Quantity === "undefined") { Quantity = 0; } this.revive(); this.visible = true; this.on = true; this._explode = Explode; this.lifespan = Lifespan; this.frequency = Frequency; this._quantity += Quantity; this._counter = 0; this._timer = 0; }; Emitter.prototype.emitParticle = function () { var particle = this.recycle(Phaser.Particle); particle.lifespan = this.lifespan; particle.elasticity = this.bounce; particle.reset(this.x - (particle.width >> 1) + this._game.math.random() * this.width, this.y - (particle.height >> 1) + this._game.math.random() * this.height); particle.visible = true; if(this.minParticleSpeed.x != this.maxParticleSpeed.x) { particle.velocity.x = this.minParticleSpeed.x + this._game.math.random() * (this.maxParticleSpeed.x - this.minParticleSpeed.x); } else { particle.velocity.x = this.minParticleSpeed.x; } if(this.minParticleSpeed.y != this.maxParticleSpeed.y) { particle.velocity.y = this.minParticleSpeed.y + this._game.math.random() * (this.maxParticleSpeed.y - this.minParticleSpeed.y); } else { particle.velocity.y = this.minParticleSpeed.y; } particle.acceleration.y = this.gravity; if(this.minRotation != this.maxRotation) { particle.angularVelocity = this.minRotation + this._game.math.random() * (this.maxRotation - this.minRotation); } else { particle.angularVelocity = this.minRotation; } if(particle.angularVelocity != 0) { particle.angle = this._game.math.random() * 360 - 180; } particle.drag.x = this.particleDrag.x; particle.drag.y = this.particleDrag.y; particle.onEmit(); }; Emitter.prototype.setSize = function (Width, Height) { this.width = Width; this.height = Height; }; Emitter.prototype.setXSpeed = function (Min, Max) { if (typeof Min === "undefined") { Min = 0; } if (typeof Max === "undefined") { Max = 0; } this.minParticleSpeed.x = Min; this.maxParticleSpeed.x = Max; }; Emitter.prototype.setYSpeed = function (Min, Max) { if (typeof Min === "undefined") { Min = 0; } if (typeof Max === "undefined") { Max = 0; } this.minParticleSpeed.y = Min; this.maxParticleSpeed.y = Max; }; Emitter.prototype.setRotation = function (Min, Max) { if (typeof Min === "undefined") { Min = 0; } if (typeof Max === "undefined") { Max = 0; } this.minRotation = Min; this.maxRotation = Max; }; Emitter.prototype.at = function (Object) { Object.getMidpoint(this._point); this.x = this._point.x - (this.width >> 1); this.y = this._point.y - (this.height >> 1); }; return Emitter; })(Phaser.Group); Phaser.Emitter = Emitter; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var GeomSprite = (function (_super) { __extends(GeomSprite, _super); function GeomSprite(game, x, y) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } _super.call(this, game, x, y); this._dx = 0; this._dy = 0; this._dw = 0; this._dh = 0; this.type = 0; this.renderOutline = true; this.renderFill = true; this.lineWidth = 1; this.lineColor = 'rgb(0,255,0)'; this.fillColor = 'rgb(0,100,0)'; this.type = GeomSprite.UNASSIGNED; return this; } GeomSprite.UNASSIGNED = 0; GeomSprite.CIRCLE = 1; GeomSprite.LINE = 2; GeomSprite.POINT = 3; GeomSprite.RECTANGLE = 4; GeomSprite.prototype.loadCircle = function (circle) { this.refresh(); this.circle = circle; this.type = GeomSprite.CIRCLE; return this; }; GeomSprite.prototype.loadLine = function (line) { this.refresh(); this.line = line; this.type = GeomSprite.LINE; return this; }; GeomSprite.prototype.loadPoint = function (point) { this.refresh(); this.point = point; this.type = GeomSprite.POINT; return this; }; GeomSprite.prototype.loadRectangle = function (rect) { this.refresh(); this.rect = rect; this.type = GeomSprite.RECTANGLE; return this; }; GeomSprite.prototype.createCircle = function (diameter) { this.refresh(); this.circle = new Phaser.Circle(this.x, this.y, diameter); this.type = GeomSprite.CIRCLE; this.bounds.setTo(this.circle.x - this.circle.radius, this.circle.y - this.circle.radius, this.circle.diameter, this.circle.diameter); return this; }; GeomSprite.prototype.createLine = function (x, y) { this.refresh(); this.line = new Phaser.Line(this.x, this.y, x, y); this.type = GeomSprite.LINE; this.bounds.setTo(this.x, this.y, this.line.width, this.line.height); return this; }; GeomSprite.prototype.createPoint = function () { this.refresh(); this.point = new Phaser.Point(this.x, this.y); this.type = GeomSprite.POINT; this.bounds.width = 1; this.bounds.height = 1; return this; }; GeomSprite.prototype.createRectangle = function (width, height) { this.refresh(); this.rect = new Phaser.Rectangle(this.x, this.y, width, height); this.type = GeomSprite.RECTANGLE; this.bounds.copyFrom(this.rect); return this; }; GeomSprite.prototype.refresh = function () { this.circle = null; this.line = null; this.point = null; this.rect = null; }; GeomSprite.prototype.update = function () { if(this.type == GeomSprite.UNASSIGNED) { return; } else if(this.type == GeomSprite.CIRCLE) { this.circle.x = this.x; this.circle.y = this.y; this.bounds.width = this.circle.diameter; this.bounds.height = this.circle.diameter; } else if(this.type == GeomSprite.LINE) { this.line.x1 = this.x; this.line.y1 = this.y; this.bounds.setTo(this.x, this.y, this.line.width, this.line.height); } else if(this.type == GeomSprite.POINT) { this.point.x = this.x; this.point.y = this.y; } else if(this.type == GeomSprite.RECTANGLE) { this.rect.x = this.x; this.rect.y = this.y; this.bounds.copyFrom(this.rect); } }; GeomSprite.prototype.inCamera = function (camera) { if(this.scrollFactor.x !== 1.0 || this.scrollFactor.y !== 1.0) { this._dx = this.bounds.x - (camera.x * this.scrollFactor.x); this._dy = this.bounds.y - (camera.y * this.scrollFactor.x); this._dw = this.bounds.width * this.scale.x; this._dh = this.bounds.height * this.scale.y; return (camera.right > this._dx) && (camera.x < this._dx + this._dw) && (camera.bottom > this._dy) && (camera.y < this._dy + this._dh); } else { return camera.intersects(this.bounds); } }; GeomSprite.prototype.render = function (camera, cameraOffsetX, cameraOffsetY) { if(this.type == GeomSprite.UNASSIGNED || this.visible === false || this.scale.x == 0 || this.scale.y == 0 || this.alpha < 0.1 || this.inCamera(camera.worldView) == false) { return false; } if(this.alpha !== 1) { var globalAlpha = this._game.stage.context.globalAlpha; this._game.stage.context.globalAlpha = this.alpha; } this._dx = cameraOffsetX + (this.bounds.x - camera.worldView.x); this._dy = cameraOffsetY + (this.bounds.y - camera.worldView.y); this._dw = this.bounds.width * this.scale.x; this._dh = this.bounds.height * this.scale.y; if(this.type == GeomSprite.CIRCLE) { this._dx += this.circle.radius; this._dy += this.circle.radius; } if(this.scrollFactor.x !== 1.0 || this.scrollFactor.y !== 1.0) { this._dx -= (camera.worldView.x * this.scrollFactor.x); this._dy -= (camera.worldView.y * this.scrollFactor.y); } this._dx = Math.round(this._dx); this._dy = Math.round(this._dy); this._dw = Math.round(this._dw); this._dh = Math.round(this._dh); this._game.stage.saveCanvasValues(); this._game.stage.context.lineWidth = this.lineWidth; this._game.stage.context.strokeStyle = this.lineColor; this._game.stage.context.fillStyle = this.fillColor; if(this._game.stage.fillStyle !== this.fillColor) { } if(this.type == GeomSprite.CIRCLE) { this._game.stage.context.beginPath(); this._game.stage.context.arc(this._dx, this._dy, this.circle.radius, 0, Math.PI * 2); this._game.stage.context.stroke(); if(this.renderFill) { this._game.stage.context.fill(); } this._game.stage.context.closePath(); } else if(this.type == GeomSprite.LINE) { this._game.stage.context.beginPath(); this._game.stage.context.moveTo(this._dx, this._dy); this._game.stage.context.lineTo(this.line.x2, this.line.y2); this._game.stage.context.stroke(); this._game.stage.context.closePath(); } else if(this.type == GeomSprite.POINT) { this._game.stage.context.fillRect(this._dx, this._dy, 2, 2); } else if(this.type == GeomSprite.RECTANGLE) { if(this.renderOutline == false) { this._game.stage.context.fillRect(this._dx, this._dy, this.rect.width, this.rect.height); } else { this._game.stage.context.beginPath(); this._game.stage.context.rect(this._dx, this._dy, this.rect.width, this.rect.height); this._game.stage.context.stroke(); if(this.renderFill) { this._game.stage.context.fill(); } this._game.stage.context.closePath(); } this._game.stage.context.fillStyle = 'rgb(255,255,255)'; this.renderPoint(this._dx, this._dy, this.rect.topLeft, 2); this.renderPoint(this._dx, this._dy, this.rect.topCenter, 2); this.renderPoint(this._dx, this._dy, this.rect.topRight, 2); this.renderPoint(this._dx, this._dy, this.rect.leftCenter, 2); this.renderPoint(this._dx, this._dy, this.rect.center, 2); this.renderPoint(this._dx, this._dy, this.rect.rightCenter, 2); this.renderPoint(this._dx, this._dy, this.rect.bottomLeft, 2); this.renderPoint(this._dx, this._dy, this.rect.bottomCenter, 2); this.renderPoint(this._dx, this._dy, this.rect.bottomRight, 2); } this._game.stage.restoreCanvasValues(); if(this.rotation !== 0) { this._game.stage.context.translate(0, 0); this._game.stage.context.restore(); } if(globalAlpha > -1) { this._game.stage.context.globalAlpha = globalAlpha; } return true; }; GeomSprite.prototype.renderPoint = function (offsetX, offsetY, point, size) { offsetX = 0; offsetY = 0; this._game.stage.context.fillRect(offsetX + point.x, offsetY + point.y, 1, 1); }; GeomSprite.prototype.renderDebugInfo = function (x, y, color) { if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } }; GeomSprite.prototype.collide = function (source) { if(this.type == GeomSprite.CIRCLE && source.type == GeomSprite.CIRCLE) { return Phaser.Collision.circleToCircle(this.circle, source.circle).result; } if(this.type == GeomSprite.CIRCLE && source.type == GeomSprite.RECTANGLE) { return Phaser.Collision.circleToRectangle(this.circle, source.rect).result; } if(this.type == GeomSprite.CIRCLE && source.type == GeomSprite.POINT) { return Phaser.Collision.circleContainsPoint(this.circle, source.point).result; } if(this.type == GeomSprite.CIRCLE && source.type == GeomSprite.LINE) { return Phaser.Collision.lineToCircle(source.line, this.circle).result; } if(this.type == GeomSprite.RECTANGLE && source.type == GeomSprite.RECTANGLE) { return Phaser.Collision.rectangleToRectangle(this.rect, source.rect).result; } if(this.type == GeomSprite.RECTANGLE && source.type == GeomSprite.CIRCLE) { return Phaser.Collision.circleToRectangle(source.circle, this.rect).result; } if(this.type == GeomSprite.RECTANGLE && source.type == GeomSprite.POINT) { return Phaser.Collision.pointToRectangle(source.point, this.rect).result; } if(this.type == GeomSprite.RECTANGLE && source.type == GeomSprite.LINE) { return Phaser.Collision.lineToRectangle(source.line, this.rect).result; } if(this.type == GeomSprite.POINT && source.type == GeomSprite.POINT) { return this.point.equals(source.point); } if(this.type == GeomSprite.POINT && source.type == GeomSprite.CIRCLE) { return Phaser.Collision.circleContainsPoint(source.circle, this.point).result; } if(this.type == GeomSprite.POINT && source.type == GeomSprite.RECTANGLE) { return Phaser.Collision.pointToRectangle(this.point, source.rect).result; } if(this.type == GeomSprite.POINT && source.type == GeomSprite.LINE) { return source.line.isPointOnLine(this.point.x, this.point.y); } if(this.type == GeomSprite.LINE && source.type == GeomSprite.LINE) { return Phaser.Collision.lineSegmentToLineSegment(this.line, source.line).result; } if(this.type == GeomSprite.LINE && source.type == GeomSprite.CIRCLE) { return Phaser.Collision.lineToCircle(this.line, source.circle).result; } if(this.type == GeomSprite.LINE && source.type == GeomSprite.RECTANGLE) { return Phaser.Collision.lineSegmentToRectangle(this.line, source.rect).result; } if(this.type == GeomSprite.LINE && source.type == GeomSprite.POINT) { return this.line.isPointOnLine(source.point.x, source.point.y); } return false; }; return GeomSprite; })(Phaser.GameObject); Phaser.GeomSprite = GeomSprite; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Particle = (function (_super) { __extends(Particle, _super); function Particle(game) { _super.call(this, game); this.lifespan = 0; this.friction = 500; } Particle.prototype.update = function () { if(this.lifespan <= 0) { return; } this.lifespan -= this._game.time.elapsed; if(this.lifespan <= 0) { this.kill(); } if(this.touching) { if(this.angularVelocity != 0) { this.angularVelocity = -this.angularVelocity; } } if(this.acceleration.y > 0) { if(this.touching & Phaser.Collision.FLOOR) { this.drag.x = this.friction; if(!(this.wasTouching & Phaser.Collision.FLOOR)) { if(this.velocity.y < -this.elasticity * 10) { if(this.angularVelocity != 0) { this.angularVelocity *= -this.elasticity; } } else { this.velocity.y = 0; this.angularVelocity = 0; } } } else { this.drag.x = 0; } } }; Particle.prototype.onEmit = function () { }; return Particle; })(Phaser.Sprite); Phaser.Particle = Particle; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Tile = (function (_super) { __extends(Tile, _super); function Tile(game, Tilemap, Index, Width, Height, Visible, AllowCollisions) { _super.call(this, game, 0, 0, Width, Height); this.immovable = true; this.moves = false; this.callback = null; this.filter = null; this.tilemap = Tilemap; this.index = Index; this.visible = Visible; this.allowCollisions = AllowCollisions; this.mapIndex = 0; } Tile.prototype.destroy = function () { _super.prototype.destroy.call(this); this.callback = null; this.tilemap = null; }; return Tile; })(Phaser.GameObject); Phaser.Tile = Tile; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var TilemapBuffer = (function () { function TilemapBuffer(game, camera, tilemap, texture, tileOffsets) { this._startX = 0; this._maxX = 0; this._startY = 0; this._maxY = 0; this._tx = 0; this._ty = 0; this._dx = 0; this._dy = 0; this._oldCameraX = 0; this._oldCameraY = 0; this._dirty = true; this._game = game; this.camera = camera; this._tilemap = tilemap; this._texture = texture; this._tileOffsets = tileOffsets; } TilemapBuffer.prototype.createCanvas = function () { this.canvas = document.createElement('canvas'); this.canvas.width = this._game.stage.width; this.canvas.height = this._game.stage.height; this.context = this.canvas.getContext('2d'); }; TilemapBuffer.prototype.update = function () { }; TilemapBuffer.prototype.renderDebugInfo = function (x, y, color) { if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } this._game.stage.context.fillStyle = color; this._game.stage.context.fillText('TilemapBuffer', x, y); this._game.stage.context.fillText('startX: ' + this._startX + ' endX: ' + this._maxX, x, y + 14); this._game.stage.context.fillText('startY: ' + this._startY + ' endY: ' + this._maxY, x, y + 28); this._game.stage.context.fillText('dx: ' + this._dx + ' dy: ' + this._dy, x, y + 42); this._game.stage.context.fillText('Dirty: ' + this._dirty, x, y + 56); }; TilemapBuffer.prototype.render = function (dx, dy) { this._maxX = this._game.math.ceil(this.camera.width / this._tilemap.tileWidth) + 1; this._maxY = this._game.math.ceil(this.camera.height / this._tilemap.tileHeight) + 1; this._startX = this._game.math.floor(this.camera.worldView.x / this._tilemap.tileWidth); this._startY = this._game.math.floor(this.camera.worldView.y / this._tilemap.tileHeight); if(this._startX < 0) { this._startX = 0; } if(this._startY < 0) { this._startY = 0; } if(this._startX + this._maxX > this._tilemap.widthInTiles) { this._startX = this._tilemap.widthInTiles - this._maxX; } if(this._startY + this._maxY > this._tilemap.heightInTiles) { this._startY = this._tilemap.heightInTiles - this._maxY; } this._dx = dx; this._dy = dy; this._dx += -(this.camera.worldView.x - (this._startX * this._tilemap.tileWidth)); this._dy += -(this.camera.worldView.y - (this._startY * this._tilemap.tileHeight)); this._tx = this._dx; this._ty = this._dy; for(var row = this._startY; row < this._startY + this._maxY; row++) { this._columnData = this._tilemap.mapData[row]; for(var tile = this._startX; tile < this._startX + this._maxX; tile++) { if(this._tileOffsets[this._columnData[tile]]) { this._game.stage.context.drawImage(this._texture, this._tileOffsets[this._columnData[tile]].x, this._tileOffsets[this._columnData[tile]].y, this._tilemap.tileWidth, this._tilemap.tileHeight, this._tx, this._ty, this._tilemap.tileWidth, this._tilemap.tileHeight); this._tx += this._tilemap.tileWidth; } } this._tx = this._dx; this._ty += this._tilemap.tileHeight; } return true; }; return TilemapBuffer; })(); Phaser.TilemapBuffer = TilemapBuffer; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Tilemap = (function (_super) { __extends(Tilemap, _super); function Tilemap(game, key, mapData, format, tileWidth, tileHeight) { if (typeof tileWidth === "undefined") { tileWidth = 0; } if (typeof tileHeight === "undefined") { tileHeight = 0; } _super.call(this, game); this._dx = 0; this._dy = 0; this.widthInTiles = 0; this.heightInTiles = 0; this.widthInPixels = 0; this.heightInPixels = 0; this.tileBoundary = 10; this._texture = this._game.cache.getImage(key); this._tilemapBuffers = []; this.isGroup = false; this.tileWidth = tileWidth; this.tileHeight = tileHeight; this.boundsInTiles = new Phaser.Rectangle(); this.mapFormat = format; switch(format) { case Tilemap.FORMAT_CSV: this.parseCSV(game.cache.getText(mapData)); break; case Tilemap.FORMAT_TILED_JSON: this.parseTiledJSON(game.cache.getText(mapData)); break; } this.parseTileOffsets(); this.createTilemapBuffers(); } Tilemap.FORMAT_CSV = 0; Tilemap.FORMAT_TILED_JSON = 1; Tilemap.prototype.parseCSV = function (data) { this.mapData = []; data = data.trim(); var rows = data.split("\n"); for(var i = 0; i < rows.length; i++) { var column = rows[i].split(","); var output = []; if(column.length > 0) { if(this.widthInTiles == 0) { this.widthInTiles = column.length; } this.heightInTiles++; for(var c = 0; c < column.length; c++) { output[c] = parseInt(column[c]); } this.mapData.push(output); } } if(this.widthInTiles > 0) { this.widthInPixels = this.tileWidth * this.widthInTiles; } if(this.heightInTiles > 0) { this.heightInPixels = this.tileHeight * this.heightInTiles; } this.boundsInTiles.setTo(0, 0, this.widthInTiles, this.heightInTiles); }; Tilemap.prototype.parseTiledJSON = function (data) { this.mapData = []; data = data.trim(); var json = JSON.parse(data); this.tileWidth = json.tilewidth; this.tileHeight = json.tileheight; this.widthInTiles = json.layers[0].width; this.heightInTiles = json.layers[0].height; this.widthInPixels = this.widthInTiles * this.tileWidth; this.heightInPixels = this.heightInTiles * this.tileHeight; this.boundsInTiles.setTo(0, 0, this.widthInTiles, this.heightInTiles); var c = 0; var row; for(var i = 0; i < json.layers[0].data.length; i++) { if(c == 0) { row = []; } row.push(json.layers[0].data[i]); c++; if(c == this.widthInTiles) { this.mapData.push(row); c = 0; } } }; Tilemap.prototype.getMapSegment = function (area) { }; Tilemap.prototype.createTilemapBuffers = function () { var cams = this._game.world.getAllCameras(); for(var i = 0; i < cams.length; i++) { this._tilemapBuffers[cams[i].ID] = new Phaser.TilemapBuffer(this._game, cams[i], this, this._texture, this._tileOffsets); } }; Tilemap.prototype.parseTileOffsets = function () { this._tileOffsets = []; var i = 0; if(this.mapFormat == Tilemap.FORMAT_TILED_JSON) { this._tileOffsets[0] = null; i = 1; } for(var ty = 0; ty < this._texture.height; ty += this.tileHeight) { for(var tx = 0; tx < this._texture.width; tx += this.tileWidth) { this._tileOffsets[i] = { x: tx, y: ty }; i++; } } }; Tilemap.prototype.update = function () { this._tilemapBuffers[0].update(); }; Tilemap.prototype.renderDebugInfo = function (x, y, color) { if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } this._tilemapBuffers[0].renderDebugInfo(x, y, color); }; Tilemap.prototype.render = function (camera, cameraOffsetX, cameraOffsetY) { if(this.visible === false || this.scale.x == 0 || this.scale.y == 0 || this.alpha < 0.1) { return false; } this._dx = cameraOffsetX + (this.bounds.x - camera.worldView.x); this._dy = cameraOffsetY + (this.bounds.y - camera.worldView.y); this._dx = Math.round(this._dx); this._dy = Math.round(this._dy); if(this._tilemapBuffers[camera.ID]) { this._tilemapBuffers[camera.ID].render(cameraOffsetX, cameraOffsetY); } return true; }; return Tilemap; })(Phaser.GameObject); Phaser.Tilemap = Tilemap; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Game = (function () { function Game(callbackContext, parent, width, height, initCallback, createCallback, updateCallback, renderCallback) { if (typeof parent === "undefined") { parent = ''; } if (typeof width === "undefined") { width = 800; } if (typeof height === "undefined") { height = 600; } if (typeof initCallback === "undefined") { initCallback = null; } if (typeof createCallback === "undefined") { createCallback = null; } if (typeof updateCallback === "undefined") { updateCallback = null; } if (typeof renderCallback === "undefined") { renderCallback = null; } var _this = this; this._maxAccumulation = 32; this._accumulator = 0; this._step = 0; this._loadComplete = false; this._paused = false; this._pendingState = null; this.onInitCallback = null; this.onCreateCallback = null; this.onUpdateCallback = null; this.onRenderCallback = null; this.onPausedCallback = null; this.isBooted = false; this.callbackContext = callbackContext; this.onInitCallback = initCallback; this.onCreateCallback = createCallback; this.onUpdateCallback = updateCallback; this.onRenderCallback = renderCallback; if(document.readyState === 'complete' || document.readyState === 'interactive') { this.boot(parent, width, height); } else { document.addEventListener('DOMContentLoaded', function () { return _this.boot(parent, width, height); }, false); } } Game.prototype.boot = function (parent, width, height) { var _this = this; if(!document.body) { window.setTimeout(function () { return _this.boot(parent, width, height); }, 13); } else { this.device = new Phaser.Device(); this.motion = new Phaser.Motion(this); this.math = new Phaser.GameMath(this); this.stage = new Phaser.Stage(this, parent, width, height); this.world = new Phaser.World(this, width, height); this.sound = new Phaser.SoundManager(this); this.cache = new Phaser.Cache(this); this.collision = new Phaser.Collision(this); this.loader = new Phaser.Loader(this, this.loadComplete); this.time = new Phaser.Time(this); this.tweens = new Phaser.TweenManager(this); this.input = new Phaser.Input(this); this.rnd = new Phaser.RandomDataGenerator([ (Date.now() * Math.random()).toString() ]); this.framerate = 60; if(this.onInitCallback == null && this.onCreateCallback == null && this.onUpdateCallback == null && this.onRenderCallback == null && this._pendingState == null) { this.isBooted = false; this.stage.drawInitScreen(); } else { this.isBooted = true; this._loadComplete = false; this._raf = new Phaser.RequestAnimationFrame(this.loop, this); if(this._pendingState) { this.switchState(this._pendingState, false, false); } else { this.startState(); } } } }; Game.prototype.loadComplete = function () { this._loadComplete = true; }; Game.prototype.loop = function () { this.time.update(); this.tweens.update(); if(this._paused == true) { if(this.onPausedCallback !== null) { this.onPausedCallback.call(this.callbackContext); } return; } this.input.update(); this.stage.update(); this._accumulator += this.time.delta; if(this._accumulator > this._maxAccumulation) { this._accumulator = this._maxAccumulation; } while(this._accumulator >= this._step) { this.time.elapsed = this.time.timeScale * (this._step / 1000); this.world.update(); this._accumulator = this._accumulator - this._step; } if(this._loadComplete && this.onUpdateCallback) { this.onUpdateCallback.call(this.callbackContext); } this.world.render(); if(this._loadComplete && this.onRenderCallback) { this.onRenderCallback.call(this.callbackContext); } }; Game.prototype.startState = function () { if(this.onInitCallback !== null) { this.onInitCallback.call(this.callbackContext); } else { if(this.onCreateCallback !== null) { this.onCreateCallback.call(this.callbackContext); } this._loadComplete = true; } }; Game.prototype.setCallbacks = function (initCallback, createCallback, updateCallback, renderCallback) { if (typeof initCallback === "undefined") { initCallback = null; } if (typeof createCallback === "undefined") { createCallback = null; } if (typeof updateCallback === "undefined") { updateCallback = null; } if (typeof renderCallback === "undefined") { renderCallback = null; } this.onInitCallback = initCallback; this.onCreateCallback = createCallback; this.onUpdateCallback = updateCallback; this.onRenderCallback = renderCallback; }; Game.prototype.switchState = function (state, clearWorld, clearCache) { if (typeof clearWorld === "undefined") { clearWorld = true; } if (typeof clearCache === "undefined") { clearCache = false; } if(this.isBooted == false) { this._pendingState = state; return; } if(typeof state === 'function') { state = new state(this); } if(state['create'] || state['update']) { this.callbackContext = state; this.onInitCallback = null; this.onCreateCallback = null; this.onUpdateCallback = null; this.onRenderCallback = null; this.onPausedCallback = null; if(state['init']) { this.onInitCallback = state['init']; } if(state['create']) { this.onCreateCallback = state['create']; } if(state['update']) { this.onUpdateCallback = state['update']; } if(state['render']) { this.onRenderCallback = state['render']; } if(state['paused']) { this.onPausedCallback = state['paused']; } if(clearWorld) { this.world.destroy(); if(clearCache == true) { this.cache.destroy(); } } this._loadComplete = false; this.startState(); } else { throw Error("Invalid State object given. Must contain at least a create or update function."); return; } }; Game.prototype.destroy = function () { this.callbackContext = null; this.onInitCallback = null; this.onCreateCallback = null; this.onUpdateCallback = null; this.onRenderCallback = null; this.onPausedCallback = null; this.camera = null; this.cache = null; this.input = null; this.loader = null; this.sound = null; this.stage = null; this.time = null; this.world = null; this.isBooted = false; }; Object.defineProperty(Game.prototype, "paused", { get: function () { return this._paused; }, set: function (value) { if(value == true && this._paused == false) { this._paused = true; } else if(value == false && this._paused == true) { this._paused = false; this.time.time = Date.now(); this.input.reset(); } }, enumerable: true, configurable: true }); Object.defineProperty(Game.prototype, "framerate", { get: function () { return 1000 / this._step; }, set: function (value) { this._step = 1000 / value; if(this._maxAccumulation < this._step) { this._maxAccumulation = this._step; } }, enumerable: true, configurable: true }); Game.prototype.createCamera = function (x, y, width, height) { return this.world.createCamera(x, y, width, height); }; Game.prototype.createGeomSprite = function (x, y) { return this.world.createGeomSprite(x, y); }; Game.prototype.createSprite = function (x, y, key) { if (typeof key === "undefined") { key = ''; } return this.world.createSprite(x, y, key); }; Game.prototype.createDynamicTexture = function (key, width, height) { return this.world.createDynamicTexture(key, width, height); }; Game.prototype.createGroup = function (MaxSize) { if (typeof MaxSize === "undefined") { MaxSize = 0; } return this.world.createGroup(MaxSize); }; Game.prototype.createParticle = function () { return this.world.createParticle(); }; Game.prototype.createEmitter = function (x, y, size) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof size === "undefined") { size = 0; } return this.world.createEmitter(x, y, size); }; Game.prototype.createTilemap = function (key, mapData, format, tileWidth, tileHeight) { return this.world.createTilemap(key, mapData, format, tileWidth, tileHeight); }; Game.prototype.createTween = function (obj) { return this.tweens.create(obj); }; Game.prototype.collide = function (ObjectOrGroup1, ObjectOrGroup2, NotifyCallback) { if (typeof ObjectOrGroup1 === "undefined") { ObjectOrGroup1 = null; } if (typeof ObjectOrGroup2 === "undefined") { ObjectOrGroup2 = null; } if (typeof NotifyCallback === "undefined") { NotifyCallback = null; } return this.collision.overlap(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, Phaser.Collision.separate); }; return Game; })(); Phaser.Game = Game; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Animation = (function () { function Animation(game, parent, frameData, name, frames, delay, looped) { this._game = game; this._parent = parent; this._frames = frames; this._frameData = frameData; this.name = name; this.delay = 1000 / delay; this.looped = looped; this.isFinished = false; this.isPlaying = false; } Object.defineProperty(Animation.prototype, "frameTotal", { get: function () { return this._frames.length; }, enumerable: true, configurable: true }); Object.defineProperty(Animation.prototype, "frame", { get: function () { return this._frameIndex; }, set: function (value) { this.currentFrame = this._frameData.getFrame(value); if(this.currentFrame !== null) { this._parent.bounds.width = this.currentFrame.width; this._parent.bounds.height = this.currentFrame.height; this._frameIndex = value; } }, enumerable: true, configurable: true }); Animation.prototype.play = function (frameRate, loop) { if (typeof frameRate === "undefined") { frameRate = null; } if(frameRate !== null) { this.delay = 1000 / frameRate; } if(loop !== undefined) { this.looped = loop; } this.isPlaying = true; this.isFinished = false; 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]); }; Animation.prototype.onComplete = function () { this.isPlaying = false; this.isFinished = true; }; Animation.prototype.stop = function () { this.isPlaying = false; this.isFinished = true; }; Animation.prototype.update = function () { if(this.isPlaying == true && this._game.time.now >= this._timeNextFrame) { this._frameIndex++; if(this._frameIndex == this._frames.length) { if(this.looped) { this._frameIndex = 0; this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]); } else { this.onComplete(); } } else { this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]); } this._timeLastFrame = this._game.time.now; this._timeNextFrame = this._game.time.now + this.delay; return true; } return false; }; Animation.prototype.destroy = function () { this._game = null; this._parent = null; this._frames = null; this._frameData = null; this.currentFrame = null; this.isPlaying = false; }; return Animation; })(); Phaser.Animation = Animation; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var AnimationLoader = (function () { function AnimationLoader() { } AnimationLoader.parseSpriteSheet = function parseSpriteSheet(game, key, frameWidth, frameHeight, frameMax) { var img = game.cache.getImage(key); if(img == null) { return null; } var width = img.width; var height = img.height; var row = Math.round(width / frameWidth); var column = Math.round(height / frameHeight); var total = row * column; if(frameMax !== -1) { total = frameMax; } if(width == 0 || height == 0 || width < frameWidth || height < frameHeight || total === 0) { return null; } var data = new Phaser.FrameData(); var x = 0; var y = 0; for(var i = 0; i < total; i++) { data.addFrame(new Phaser.Frame(x, y, frameWidth, frameHeight, '')); x += frameWidth; if(x === width) { x = 0; y += frameHeight; } } return data; }; AnimationLoader.parseJSONData = function parseJSONData(game, json) { var data = new Phaser.FrameData(); var frames = json; var newFrame; for(var i = 0; i < frames.length; i++) { newFrame = data.addFrame(new Phaser.Frame(frames[i].frame.x, frames[i].frame.y, frames[i].frame.w, frames[i].frame.h, frames[i].filename)); newFrame.setTrim(frames[i].trimmed, frames[i].sourceSize.w, frames[i].sourceSize.h, frames[i].spriteSourceSize.x, frames[i].spriteSourceSize.y, frames[i].spriteSourceSize.w, frames[i].spriteSourceSize.h); } return data; }; return AnimationLoader; })(); Phaser.AnimationLoader = AnimationLoader; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var Frame = (function () { function Frame(x, y, width, height, name) { this.name = ''; this.rotated = false; this.rotationDirection = 'cw'; this.x = x; this.y = y; this.width = width; this.height = height; this.name = name; this.rotated = false; this.trimmed = false; } Frame.prototype.setRotation = function (rotated, rotationDirection) { }; Frame.prototype.setTrim = function (trimmed, actualWidth, actualHeight, destX, destY, destWidth, destHeight) { this.trimmed = trimmed; this.sourceSizeW = actualWidth; this.sourceSizeH = actualHeight; this.spriteSourceSizeX = destX; this.spriteSourceSizeY = destY; this.spriteSourceSizeW = destWidth; this.spriteSourceSizeH = destHeight; }; return Frame; })(); Phaser.Frame = Frame; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var FrameData = (function () { function FrameData() { this._frames = []; this._frameNames = []; } Object.defineProperty(FrameData.prototype, "total", { get: function () { return this._frames.length; }, enumerable: true, configurable: true }); FrameData.prototype.addFrame = function (frame) { frame.index = this._frames.length; this._frames.push(frame); if(frame.name !== '') { this._frameNames[frame.name] = frame.index; } return frame; }; FrameData.prototype.getFrame = function (index) { if(this._frames[index]) { return this._frames[index]; } return null; }; FrameData.prototype.getFrameByName = function (name) { if(this._frameNames[name] >= 0) { return this._frames[this._frameNames[name]]; } return null; }; FrameData.prototype.checkFrameName = function (name) { if(this._frameNames[name] >= 0) { return true; } return false; }; FrameData.prototype.getFrameRange = function (start, end, output) { if (typeof output === "undefined") { output = []; } for(var i = start; i <= end; i++) { output.push(this._frames[i]); } return output; }; FrameData.prototype.getFrameIndexes = function (output) { if (typeof output === "undefined") { output = []; } output.length = 0; for(var i = 0; i < this._frames.length; i++) { output.push(i); } return output; }; FrameData.prototype.getFrameIndexesByName = function (input) { var output = []; for(var i = 0; i < input.length; i++) { if(this.getFrameByName(input[i])) { output.push(this.getFrameByName(input[i]).index); } } return output; }; FrameData.prototype.getAllFrames = function () { return this._frames; }; FrameData.prototype.getFrames = function (range) { var output = []; for(var i = 0; i < range.length; i++) { output.push(this._frames[i]); } return output; }; return FrameData; })(); Phaser.FrameData = FrameData; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var AnimationManager = (function () { function AnimationManager(game, parent) { this._frameData = null; this.currentFrame = null; this._game = game; this._parent = parent; this._anims = { }; } AnimationManager.prototype.loadFrameData = function (frameData) { this._frameData = frameData; this.frame = 0; }; AnimationManager.prototype.add = function (name, frames, frameRate, loop, useNumericIndex) { if (typeof frames === "undefined") { frames = null; } if (typeof frameRate === "undefined") { frameRate = 60; } if (typeof loop === "undefined") { loop = false; } if (typeof useNumericIndex === "undefined") { useNumericIndex = true; } if(this._frameData == null) { return; } if(frames == null) { frames = this._frameData.getFrameIndexes(); } else { if(this.validateFrames(frames, useNumericIndex) == false) { return; } } if(useNumericIndex == false) { frames = this._frameData.getFrameIndexesByName(frames); } this._anims[name] = new Phaser.Animation(this._game, this._parent, this._frameData, name, frames, frameRate, loop); this.currentAnim = this._anims[name]; }; AnimationManager.prototype.validateFrames = function (frames, useNumericIndex) { for(var i = 0; i < frames.length; i++) { if(useNumericIndex == true) { if(frames[i] > this._frameData.total) { return false; } } else { if(this._frameData.checkFrameName(frames[i]) == false) { return false; } } } return true; }; AnimationManager.prototype.play = function (name, frameRate, loop) { if (typeof frameRate === "undefined") { frameRate = null; } if(this._anims[name]) { this.currentAnim = this._anims[name]; this.currentAnim.play(frameRate, loop); } }; AnimationManager.prototype.stop = function (name) { if(this._anims[name]) { this.currentAnim = this._anims[name]; this.currentAnim.stop(); } }; AnimationManager.prototype.update = function () { if(this.currentAnim && this.currentAnim.update() == true) { this.currentFrame = this.currentAnim.currentFrame; this._parent.bounds.width = this.currentFrame.width; this._parent.bounds.height = this.currentFrame.height; } }; Object.defineProperty(AnimationManager.prototype, "frameData", { get: function () { return this._frameData; }, enumerable: true, configurable: true }); Object.defineProperty(AnimationManager.prototype, "frameTotal", { get: function () { return this._frameData.total; }, enumerable: true, configurable: true }); Object.defineProperty(AnimationManager.prototype, "frame", { get: function () { return this._frameIndex; }, set: function (value) { this.currentFrame = this._frameData.getFrame(value); if(this.currentFrame !== null) { this._parent.bounds.width = this.currentFrame.width; this._parent.bounds.height = this.currentFrame.height; this._frameIndex = value; } }, enumerable: true, configurable: true }); Object.defineProperty(AnimationManager.prototype, "frameName", { get: function () { return this.currentFrame.name; }, set: function (value) { this.currentFrame = this._frameData.getFrameByName(value); if(this.currentFrame !== null) { this._parent.bounds.width = this.currentFrame.width; this._parent.bounds.height = this.currentFrame.height; this._frameIndex = this.currentFrame.index; } }, enumerable: true, configurable: true }); return AnimationManager; })(); Phaser.AnimationManager = AnimationManager; })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { var State = (function () { function State(game) { this.game = game; this.camera = game.camera; this.cache = game.cache; this.collision = game.collision; this.input = game.input; this.loader = game.loader; this.math = game.math; this.motion = game.motion; this.sound = game.sound; this.stage = game.stage; this.time = game.time; this.tweens = game.tweens; this.world = game.world; } State.prototype.init = function () { }; State.prototype.create = function () { }; State.prototype.update = function () { }; State.prototype.render = function () { }; State.prototype.paused = function () { }; State.prototype.createCamera = function (x, y, width, height) { return this.game.world.createCamera(x, y, width, height); }; State.prototype.createGeomSprite = function (x, y) { return this.world.createGeomSprite(x, y); }; State.prototype.createSprite = function (x, y, key) { if (typeof key === "undefined") { key = ''; } return this.game.world.createSprite(x, y, key); }; State.prototype.createDynamicTexture = function (key, width, height) { return this.game.world.createDynamicTexture(key, width, height); }; State.prototype.createGroup = function (MaxSize) { if (typeof MaxSize === "undefined") { MaxSize = 0; } return this.game.world.createGroup(MaxSize); }; State.prototype.createParticle = function () { return this.game.world.createParticle(); }; State.prototype.createEmitter = function (x, y, size) { if (typeof x === "undefined") { x = 0; } if (typeof y === "undefined") { y = 0; } if (typeof size === "undefined") { size = 0; } return this.game.world.createEmitter(x, y, size); }; State.prototype.createTilemap = function (key, mapData, format, tileWidth, tileHeight) { return this.game.world.createTilemap(key, mapData, format, tileWidth, tileHeight); }; State.prototype.createTween = function (obj) { return this.game.tweens.create(obj); }; State.prototype.collide = function (ObjectOrGroup1, ObjectOrGroup2, NotifyCallback) { if (typeof ObjectOrGroup1 === "undefined") { ObjectOrGroup1 = null; } if (typeof ObjectOrGroup2 === "undefined") { ObjectOrGroup2 = null; } if (typeof NotifyCallback === "undefined") { NotifyCallback = null; } return this.collision.overlap(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, Phaser.Collision.separate); }; return State; })(); Phaser.State = State; })(Phaser || (Phaser = {}));