phaser/build/phaser.js
2013-04-20 01:24:38 +01:00

7737 lines
318 KiB
JavaScript

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 = {}));