From c647792c129704c40dcd6d6ab8118913a1051119 Mon Sep 17 00:00:00 2001 From: Richard Davey Date: Wed, 26 Jun 2013 14:18:48 +0100 Subject: [PATCH] Physics updates --- GruntFile.js | 26 +- Phaser/components/Transform.ts | 11 +- Phaser/gameobjects/GameObjectFactory.ts | 5 +- Phaser/math/Vec2.ts | 2 + Phaser/math/Vec2Utils.ts | 4 +- Phaser/phaser.js | 16 - Phaser/physics/Body.ts | 16 +- Phaser/physics/Space.ts | 2 +- Phaser/physics/shapes/Box.ts | 6 + Phaser/physics/shapes/IShape.ts | 2 + Phaser/utils/DebugUtils.ts | 47 +- Tests/phaser-fx.js | 202 +------- Tests/phaser.js | 614 +++++++++++++----------- Tests/physics/simple test 1.js | 46 +- Tests/physics/simple test 1.ts | 15 +- build/phaser.d.ts | 414 ++++++++-------- build/phaser.js | 614 +++++++++++++----------- 17 files changed, 998 insertions(+), 1044 deletions(-) diff --git a/GruntFile.js b/GruntFile.js index d48f7e066..ae8e8ff80 100644 --- a/GruntFile.js +++ b/GruntFile.js @@ -51,15 +51,23 @@ module.exports = function (grunt) { comments: true } }, - fx: { - src: ['SpecialFX/**/*.ts'], - dest: 'build/phaser-fx.js', - options: { - target: 'ES5', - declaration: true, - comments: true - } - } + //tests: { + // src: ['Tests/**/*.ts'], + // options: { + // target: 'ES5', + // declaration: true, + // comments: true + // } + // } + //fx: { + // src: ['SpecialFX/**/*.ts'], + // dest: 'build/phaser-fx.js', + // options: { + // target: 'ES5', + // declaration: true, + // comments: true + // } + //} }, copy: { main: { diff --git a/Phaser/components/Transform.ts b/Phaser/components/Transform.ts index 47e518669..4d9cf796e 100644 --- a/Phaser/components/Transform.ts +++ b/Phaser/components/Transform.ts @@ -1,5 +1,6 @@ /// /// +/// /** * Phaser - Components - Transform @@ -98,7 +99,7 @@ module Phaser.Components { this._halfSize.y = this.parent.height / 2; this._offset.x = this.origin.x * this.parent.width; this._offset.y = this.origin.y * this.parent.height; - this._angle = Math.atan2(this.halfHeight - this._offset.y, this.halfWidth - this._offset.x); + this._angle = Math.atan2(this.halfHeight - this._offset.x, this.halfWidth - this._offset.y); this._distance = Math.sqrt(((this._offset.x - this._halfSize.x) * (this._offset.x - this._halfSize.x)) + ((this._offset.y - this._halfSize.y) * (this._offset.y - this._halfSize.y))); this._size.x = this.parent.width; this._size.y = this.parent.height; @@ -240,22 +241,22 @@ module Phaser.Components { /** * Scale of the object. A scale of 1.0 is the original size. 0.5 half size. 2.0 double sized. */ - public scale: Phaser.Vec2; + public scale: Vec2; /** * Skew the object along the x and y axis. A skew value of 0 is no skew. */ - public skew: Phaser.Vec2; + public skew: Vec2; /** * The influence of camera movement upon the object, if supported. */ - public scrollFactor: Phaser.Vec2; + public scrollFactor: Vec2; /** * The origin is the point around which scale and rotation takes place and defaults to the top-left of the sprite. */ - public origin: Phaser.Vec2; + public origin: Vec2; /** * This value is added to the rotation of the object. diff --git a/Phaser/gameobjects/GameObjectFactory.ts b/Phaser/gameobjects/GameObjectFactory.ts index 47bc8f2bf..dc9e071f2 100644 --- a/Phaser/gameobjects/GameObjectFactory.ts +++ b/Phaser/gameobjects/GameObjectFactory.ts @@ -83,11 +83,12 @@ module Phaser { * @param y {number} Y position of the new sprite. * @param [key] {string} The image key as defined in the Game.Cache to use as the texture for this sprite * @param [frame] {string|number} If the sprite uses an image from a texture atlas or sprite sheet you can pass the frame here. Either a number for a frame ID or a string for a frame name. + * @param [bodyType] {number} The physics body type of the object (defaults to BODY_DYNAMIC) * @param [shapeType] The default body shape is either 0 for a Box or 1 for a Circle. See Sprite.body.addShape for custom shapes (polygons, etc) * @returns {Sprite} The newly created sprite object. */ - public physicsSprite(x: number, y: number, key?: string = '', frame? = null, shapeType?:number = 0): Sprite { - return this._world.group.add(new Sprite(this._game, x, y, key, frame, Phaser.Types.BODY_DYNAMIC, shapeType)); + public physicsSprite(x: number, y: number, key?: string = '', frame? = null, bodyType?: number = Phaser.Types.BODY_DYNAMIC, shapeType?:number = 0): Sprite { + return this._world.group.add(new Sprite(this._game, x, y, key, frame, bodyType, shapeType)); } /** diff --git a/Phaser/math/Vec2.ts b/Phaser/math/Vec2.ts index 14c451b3b..d9bfab0fd 100644 --- a/Phaser/math/Vec2.ts +++ b/Phaser/math/Vec2.ts @@ -23,6 +23,8 @@ module Phaser { this.x = x; this.y = y; + return this; + } /** diff --git a/Phaser/math/Vec2Utils.ts b/Phaser/math/Vec2Utils.ts index ec46d7b45..f78a26ff6 100644 --- a/Phaser/math/Vec2Utils.ts +++ b/Phaser/math/Vec2Utils.ts @@ -68,7 +68,7 @@ module Phaser { * @param {Vec2} out The output Vec2 that is the result of the operation. * @return {Vec2} A Vec2 that is the scaled vector. */ - static scale(a: Vec2, s: number, out?: Vec2 = new Vec2): Vec2 { + static scale(a: Phaser.Vec2, s: number, out?: Phaser.Vec2 = new Phaser.Vec2): Phaser.Vec2 { return out.setTo(a.x * s, a.y * s); } @@ -212,7 +212,7 @@ module Phaser { * @param {Vec2} out The output Vec2 that is the result of the operation. * @return {Vec2} A Vec2. */ - static normalRightHand(a: Vec2, out?: Vec2 = this): Vec2 { + static normalRightHand(a: Vec2, out?: Vec2 = new Vec2): Vec2 { return out.setTo(a.y * -1, a.x); } diff --git a/Phaser/phaser.js b/Phaser/phaser.js index 7b20a194e..ec56656ed 100644 --- a/Phaser/phaser.js +++ b/Phaser/phaser.js @@ -1,19 +1,3 @@ -/** -* Phaser -* -* v1.0.0 - June XX 2013 -* -* A small and feature-packed 2D canvas game framework born from the firey pits of Flixel and Kiwi. -* -* Richard Davey (@photonstorm) -* -* Many thanks to Adam Saltsman (@ADAMATOMIC) for releasing Flixel, from both which Phaser -* and my love of game development took a lot of inspiration. -* -* "If you want your children to be intelligent, read them fairy tales." -* "If you want them to be more intelligent, read them more fairy tales." -* -- Albert Einstein -*/ var Phaser; (function (Phaser) { Phaser.VERSION = 'Phaser version 1.0.0'; diff --git a/Phaser/physics/Body.ts b/Phaser/physics/Body.ts index aa9c82d1f..0e65ebabd 100644 --- a/Phaser/physics/Body.ts +++ b/Phaser/physics/Body.ts @@ -91,7 +91,7 @@ module Phaser.Physics { /** * Reference to Phaser.Game */ - public game: Game; + public game: Phaser.Game; /** * Reference to the parent Sprite @@ -461,7 +461,7 @@ module Phaser.Physics { this.bounds.clear(); - for (var i = 0; i < this.shapes.length; i++) + for (var i = 0; i < this.shapesLength; i++) { var shape: IShape = this.shapes[i]; shape.cacheData(this.transform); @@ -534,13 +534,13 @@ module Phaser.Physics { this.angle += this.angularVelocity * dt; - if (this.sprite) - { - this.sprite.x = this.position.x * 50; - this.sprite.y = this.position.y * 50; + if (this.sprite) + { + this.sprite.x = this.position.x * 50; + this.sprite.y = this.position.y * 50; // Obey fixed rotation? - this.sprite.rotation = this.game.math.radiansToDegrees(this.angle); - } + this.sprite.rotation = this.game.math.radiansToDegrees(this.angle); + } } diff --git a/Phaser/physics/Space.ts b/Phaser/physics/Space.ts index f8e8d9bbe..c9b3b8098 100644 --- a/Phaser/physics/Space.ts +++ b/Phaser/physics/Space.ts @@ -723,7 +723,7 @@ module Phaser.Physics { Manager.dump("Velocity Solvers", this.bodies[1]); - // 6) Intergrate position + // 6) Integrate position for (var i = 0; i < this._bl; i++) { if (this.bodies[i] && this.bodies[i].isDynamic && this.bodies[i].isAwake) diff --git a/Phaser/physics/shapes/Box.ts b/Phaser/physics/shapes/Box.ts index 461faf869..3650e803e 100644 --- a/Phaser/physics/shapes/Box.ts +++ b/Phaser/physics/shapes/Box.ts @@ -17,14 +17,20 @@ module Phaser.Physics.Shapes { // Give in pixels constructor(x, y, width, height) { + console.log('Box px', x, y, width, height); + x = Manager.pixelsToMeters(x); y = Manager.pixelsToMeters(y); width = Manager.pixelsToMeters(width); height = Manager.pixelsToMeters(height); + console.log('Box m', x, y, width, height); + var hw = width * 0.5; var hh = height * 0.5; + console.log('Box hh', hw, hh); + super([ { x: -hw + x, y: +hh + y }, { x: -hw + x, y: -hh + y }, diff --git a/Phaser/physics/shapes/IShape.ts b/Phaser/physics/shapes/IShape.ts index 1e49f5a9c..c1f0ddb47 100644 --- a/Phaser/physics/shapes/IShape.ts +++ b/Phaser/physics/shapes/IShape.ts @@ -33,8 +33,10 @@ module Phaser.Physics { findEdgeByPoint(p: Phaser.Vec2, minDist: number): number; findVertexByPoint(p: Phaser.Vec2, minDist: number): number; + // The verts of the shape (in local coordinate space) verts: Phaser.Vec2[]; planes: Phaser.Physics.Plane[]; + // The translated verts (in world space) tverts: Phaser.Vec2[]; tplanes: Phaser.Physics.Plane[]; convexity: bool; diff --git a/Phaser/utils/DebugUtils.ts b/Phaser/utils/DebugUtils.ts index c593f7ede..a4ae9613f 100644 --- a/Phaser/utils/DebugUtils.ts +++ b/Phaser/utils/DebugUtils.ts @@ -42,6 +42,40 @@ module Phaser { } + /** + * Render debug infos. (including name, bounds info, position and some other properties) + * @param x {number} X position of the debug info to be rendered. + * @param y {number} Y position of the debug info to be rendered. + * @param [color] {number} color of the debug info to be rendered. (format is css color string) + */ + static renderPhysicsBodyInfo(body: Phaser.Physics.Body, x: number, y: number, color?: string = 'rgb(255,255,255)') { + + DebugUtils.context.fillStyle = color; + DebugUtils.context.fillText('Body ID: ' + body.name, x, y); + DebugUtils.context.fillText('Position x: ' + body.position.x.toFixed(1) + ' y: ' + body.position.y.toFixed(1) + ' rotation: ' + body.angle.toFixed(1), x, y + 14); + DebugUtils.context.fillText('World x: ' + (body.position.x * 50).toFixed(1) + ' y: ' + (body.position.y * 50).toFixed(1), x, y + 28); + DebugUtils.context.fillText('Velocity x: ' + body.velocity.x.toFixed(1) + ' y: ' + body.velocity.y.toFixed(1), x, y + 42); + + if (body.shapes[0].verts.length > 0) + { + + DebugUtils.context.fillText('Vert 1 x: ' + (body.shapes[0].verts[0].x * 50) + ' y: ' + (body.shapes[0].verts[0].y * 50), x, y + 56); + DebugUtils.context.fillText('Vert 2 x: ' + (body.shapes[0].verts[1].x * 50) + ' y: ' + (body.shapes[0].verts[1].y * 50), x, y + 70); + DebugUtils.context.fillText('Vert 3 x: ' + (body.shapes[0].tverts[2].x * 50) + ' y: ' + (body.shapes[0].tverts[2].y * 50), x, y + 84); + DebugUtils.context.fillText('Vert 4 x: ' + (body.shapes[0].tverts[3].x * 50) + ' y: ' + (body.shapes[0].tverts[3].y * 50), x, y + 98); + + +/* + DebugUtils.context.fillText('Vert 1 x: ' + body.shapes[0].verts[0].x.toFixed(1) + ' y: ' + body.shapes[0].verts[0].y.toFixed(1), x, y + 56); + DebugUtils.context.fillText('Vert 2 x: ' + body.shapes[0].verts[1].x.toFixed(1) + ' y: ' + body.shapes[0].verts[1].y.toFixed(1), x, y + 70); + DebugUtils.context.fillText('Vert 3 x: ' + body.shapes[0].verts[2].x.toFixed(1) + ' y: ' + body.shapes[0].verts[2].y.toFixed(1), x, y + 84); + DebugUtils.context.fillText('Vert 4 x: ' + body.shapes[0].verts[3].x.toFixed(1) + ' y: ' + body.shapes[0].verts[3].y.toFixed(1), x, y + 98); +*/ + + } + + } + static renderSpriteBounds(sprite: Sprite, camera?: Camera = null, color?: string = 'rgba(0,255,0,0.2)') { if (camera == null) @@ -59,7 +93,7 @@ module Phaser { static renderPhysicsBody(body: Phaser.Physics.Body, lineWidth: number = 1, fillStyle: string = 'rgba(0,255,0,0.2)', sleepStyle: string = 'rgba(100,100,100,0.2)') { - for (var s = 0; s < body.shapes.length; s++) + for (var s = 0; s < body.shapesLength; s++) { DebugUtils.context.beginPath(); @@ -67,13 +101,16 @@ module Phaser { { var verts = body.shapes[s].tverts; - DebugUtils.context.moveTo((body.position.x + verts[0].x) * 50, (body.position.y + verts[0].y) * 50); +// DebugUtils.context.moveTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); + DebugUtils.context.moveTo(verts[0].x * 50, verts[0].y * 50); - for (var i = 0; i < verts.length; i++) { - DebugUtils.context.lineTo((body.position.x + verts[i].x) * 50, (body.position.y + verts[i].y) * 50); + for (var i = 1; i < verts.length; i++) { +// DebugUtils.context.lineTo(body.position.x * 50 + verts[i].x, body.position.y * 50 + verts[i].y); + DebugUtils.context.lineTo(verts[i].x * 50, verts[i].y * 50); } - DebugUtils.context.lineTo((body.position.x + verts[verts.length - 1].x) * 50, (body.position.y + verts[verts.length - 1].y) * 50); +// DebugUtils.context.lineTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); + DebugUtils.context.lineTo(verts[0].x * 50, verts[0].y * 50); } else if (body.shapes[s].type == Phaser.Physics.Manager.SHAPE_TYPE_CIRCLE) { diff --git a/Tests/phaser-fx.js b/Tests/phaser-fx.js index 6499d8dac..dc65ef514 100644 --- a/Tests/phaser-fx.js +++ b/Tests/phaser-fx.js @@ -1,12 +1,6 @@ var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Flash - * - * The camera is filled with the given color and returns to normal at the given duration. - */ (function (Camera) { var Flash = (function () { function Flash(game) { @@ -15,21 +9,12 @@ var Phaser; this._fxFlashAlpha = 0; this._game = game; } - Flash.prototype.start = /** - * The camera is filled with this color and returns to normal at the given duration. - * - * @param Color The color you want to use in 0xRRGGBB format, i.e. 0xffffff for white. - * @param Duration How long it takes for the flash to fade. - * @param OnComplete An optional function you want to run when the flash finishes. Set to null for no callback. - * @param Force Force an already running flash effect to reset. - */ - function (color, duration, onComplete, force) { + Flash.prototype.start = 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) { - // You can't flash again unless you force it return; } if(duration <= 0) { @@ -44,7 +29,6 @@ var Phaser; this._fxFlashComplete = onComplete; }; Flash.prototype.postUpdate = function () { - // Update the Flash effect if(this._fxFlashAlpha > 0) { this._fxFlashAlpha -= this._game.time.elapsed / this._fxFlashDuration; if(this._game.math.roundTo(this._fxFlashAlpha, -2) <= 0) { @@ -72,38 +56,17 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Border - * - * Creates a border around a camera. - */ (function (Camera) { var Border = (function () { function Border(game, parent) { - /** - * Whether render border of this camera or not. (default is false) - * @type {boolean} - */ this.showBorder = false; - /** - * Color of border of this camera. (in css color string) - * @type {string} - */ this.borderColor = 'rgb(255,255,255)'; this._game = game; this._parent = parent; } - Border.prototype.start = /** - * You can name the function that starts the effect whatever you like, but we used 'start' in our effects. - */ - function () { + Border.prototype.start = function () { }; - Border.prototype.postRender = /** - * Post-render is called during the objects render cycle, after the children/image data has been rendered. - * It happens directly BEFORE a canvas context.restore has happened if added to a Camera. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { + Border.prototype.postRender = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { if(this.showBorder == true) { this._game.stage.context.strokeStyle = this.borderColor; this._game.stage.context.lineWidth = 1; @@ -122,50 +85,23 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Template - * - * A Template FX file you can use to create your own Camera FX. - * If you don't use any of the methods below (i.e. preUpdate, render, etc) then DELETE THEM to avoid un-necessary calls by the FXManager. - */ (function (Camera) { var Template = (function () { function Template(game, parent) { this._game = game; this._parent = parent; } - Template.prototype.start = /** - * You can name the function that starts the effect whatever you like, but we used 'start' in our effects. - */ - function () { + Template.prototype.start = function () { }; - Template.prototype.preUpdate = /** - * Pre-update is called at the start of the objects update cycle, before any other updates have taken place. - */ - function () { + Template.prototype.preUpdate = function () { }; - Template.prototype.postUpdate = /** - * Post-update is called at the end of the objects update cycle, after other update logic has taken place. - */ - function () { + Template.prototype.postUpdate = function () { }; - Template.prototype.preRender = /** - * Pre-render is called at the start of the object render cycle, before any transforms have taken place. - * It happens directly AFTER a canvas context.save has happened if added to a Camera. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { + Template.prototype.preRender = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { }; - Template.prototype.render = /** - * render is called during the objects render cycle, right after all transforms have finished, but before any children/image data is rendered. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { + Template.prototype.render = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { }; - Template.prototype.postRender = /** - * Post-render is called during the objects render cycle, after the children/image data has been rendered. - * It happens directly BEFORE a canvas context.restore has happened if added to a Camera. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { + Template.prototype.postRender = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { }; return Template; })(); @@ -178,13 +114,6 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Mirror - * - * Creates a mirror effect for a camera. - * Can mirror the camera image horizontally, vertically or both with an optional fill color overlay. - */ (function (Camera) { var Mirror = (function () { function Mirror(game, parent) { @@ -199,11 +128,7 @@ var Phaser; this._canvas.height = parent.height; this._context = this._canvas.getContext('2d'); } - Mirror.prototype.start = /** - * This is the rectangular region to grab from the Camera used in the Mirror effect - * It is rendered to the Stage at Mirror.x/y (note the use of Stage coordinates, not World coordinates) - */ - function (x, y, region, fillColor) { + Mirror.prototype.start = function (x, y, region, fillColor) { if (typeof fillColor === "undefined") { fillColor = 'rgba(0, 0, 100, 0.5)'; } this.x = x; this.y = y; @@ -216,15 +141,7 @@ var Phaser; this._context.fillStyle = this._mirrorColor; } }; - Mirror.prototype.postRender = /** - * Post-render is called during the objects render cycle, after the children/image data has been rendered. - * It happens directly BEFORE a canvas context.restore has happened if added to a Camera. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { - //if (this.cls) - //{ - // this._context.clearRect(0, 0, this._mirrorWidth, this._mirrorHeight); - //} + Mirror.prototype.postRender = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { this._sx = cameraX + this._mirrorX; this._sy = cameraY + this._mirrorY; if(this.flipX == true && this.flipY == false) { @@ -232,16 +149,7 @@ var Phaser; } else if(this.flipY == true && this.flipX == false) { this._sy = 0; } - this._context.drawImage(this._game.stage.canvas, // Source Image - this._sx, // Source X (location within the source image) - this._sy, // Source Y - this._mirrorWidth, // Source Width - this._mirrorHeight, // Source Height - 0, // Destination X (where on the canvas it'll be drawn) - 0, // Destination Y - this._mirrorWidth, // Destination Width (always same as Source Width unless scaled) - this._mirrorHeight); - // Destination Height (always same as Source Height unless scaled) + this._context.drawImage(this._game.stage.canvas, this._sx, this._sy, this._mirrorWidth, this._mirrorHeight, 0, 0, this._mirrorWidth, this._mirrorHeight); if(this._mirrorColor) { this._context.fillRect(0, 0, this._mirrorWidth, this._mirrorHeight); } @@ -267,49 +175,19 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Shadow - * - * Creates a drop-shadow effect on the camera window. - */ (function (Camera) { var Shadow = (function () { function Shadow(game, parent) { - /** - * Render camera shadow or not. (default is false) - * @type {boolean} - */ this.showShadow = false; - /** - * Color of shadow, in css color string. - * @type {string} - */ this.shadowColor = 'rgb(0,0,0)'; - /** - * Blur factor of shadow. - * @type {number} - */ this.shadowBlur = 10; - /** - * Offset of the shadow from camera's position. - * @type {Point} - */ this.shadowOffset = new Phaser.Point(4, 4); this._game = game; this._parent = parent; } - Shadow.prototype.start = /** - * You can name the function that starts the effect whatever you like, but we used 'start' in our effects. - */ - function () { + Shadow.prototype.start = function () { }; - Shadow.prototype.preRender = /** - * Pre-render is called at the start of the object render cycle, before any transforms have taken place. - * It happens directly AFTER a canvas context.save has happened if added to a Camera. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { - // Shadow + Shadow.prototype.preRender = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { if(this.showShadow == true) { this._game.stage.context.shadowColor = this.shadowColor; this._game.stage.context.shadowBlur = this.shadowBlur; @@ -317,11 +195,7 @@ var Phaser; this._game.stage.context.shadowOffsetY = this.shadowOffset.y; } }; - Shadow.prototype.render = /** - * render is called during the objects render cycle, right after all transforms have finished, but before any children/image data is rendered. - */ - function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { - // Shadow off + Shadow.prototype.render = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { if(this.showShadow == true) { this._game.stage.context.shadowBlur = 0; this._game.stage.context.shadowOffsetX = 0; @@ -339,12 +213,6 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Scanlines - * - * Give your game that classic retro feel! - */ (function (Camera) { var Scanlines = (function () { function Scanlines(game, parent) { @@ -370,12 +238,6 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Shake - * - * A simple camera shake effect. - */ (function (Camera) { var Shake = (function () { function Shake(game, camera) { @@ -392,16 +254,7 @@ var Phaser; Shake.SHAKE_BOTH_AXES = 0; Shake.SHAKE_HORIZONTAL_ONLY = 1; Shake.SHAKE_VERTICAL_ONLY = 2; - Shake.prototype.start = /** - * A simple camera shake effect. - * - * @param Intensity Percentage of screen size representing the maximum distance that the screen can move while shaking. - * @param Duration The length in seconds that the shaking effect should last. - * @param OnComplete A function you want to run when the shake effect finishes. - * @param Force Force the effect to reset (default = true, unlike flash() and fade()!). - * @param Direction Whether to shake on both axes, just up and down, or just side to side (use class constants SHAKE_BOTH_AXES, SHAKE_VERTICAL_ONLY, or SHAKE_HORIZONTAL_ONLY). - */ - function (intensity, duration, onComplete, force, direction) { + Shake.prototype.start = 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; } @@ -410,7 +263,6 @@ var Phaser; if(!force && ((this._fxShakeOffset.x != 0) || (this._fxShakeOffset.y != 0))) { return; } - // If a shake is not already running we need to store the offsets here if(this._fxShakeOffset.x == 0 && this._fxShakeOffset.y == 0) { this._fxShakePrevX = this._parent.x; this._fxShakePrevY = this._parent.y; @@ -422,7 +274,6 @@ var Phaser; this._fxShakeOffset.setTo(0, 0); }; Shake.prototype.postUpdate = function () { - // Update the "shake" special effect if(this._fxShakeDuration > 0) { this._fxShakeDuration -= this._game.time.elapsed; if(this._game.math.roundTo(this._fxShakeDuration, -2) <= 0) { @@ -435,11 +286,9 @@ var Phaser; } } else { if((this._fxShakeDirection == Shake.SHAKE_BOTH_AXES) || (this._fxShakeDirection == Shake.SHAKE_HORIZONTAL_ONLY)) { - //this._fxShakeOffset.x = ((this._game.math.random() * this._fxShakeIntensity * this.worldView.width * 2 - this._fxShakeIntensity * this.worldView.width) * this._zoom; this._fxShakeOffset.x = (this._game.math.random() * this._fxShakeIntensity * this._parent.worldView.width * 2 - this._fxShakeIntensity * this._parent.worldView.width); } if((this._fxShakeDirection == Shake.SHAKE_BOTH_AXES) || (this._fxShakeDirection == Shake.SHAKE_VERTICAL_ONLY)) { - //this._fxShakeOffset.y = (this._game.math.random() * this._fxShakeIntensity * this.worldView.height * 2 - this._fxShakeIntensity * this.worldView.height) * this._zoom; this._fxShakeOffset.y = (this._game.math.random() * this._fxShakeIntensity * this._parent.worldView.height * 2 - this._fxShakeIntensity * this._parent.worldView.height); } } @@ -462,12 +311,6 @@ var Phaser; var Phaser; (function (Phaser) { (function (FX) { - /// - /** - * Phaser - FX - Camera - Fade - * - * The camera is filled with the given color and returns to normal at the given duration. - */ (function (Camera) { var Fade = (function () { function Fade(game) { @@ -476,21 +319,12 @@ var Phaser; this._fxFadeAlpha = 0; this._game = game; } - Fade.prototype.start = /** - * The camera is gradually filled with this color. - * - * @param Color The color you want to use in 0xRRGGBB format, i.e. 0xffffff for white. - * @param Duration How long it takes for the flash to fade. - * @param OnComplete An optional function you want to run when the flash finishes. Set to null for no callback. - * @param Force Force an already running flash effect to reset. - */ - function (color, duration, onComplete, force) { + Fade.prototype.start = 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) { - // You can't fade again unless you force it return; } if(duration <= 0) { @@ -505,7 +339,6 @@ var Phaser; this._fxFadeComplete = onComplete; }; Fade.prototype.postUpdate = function () { - // Update the Fade effect if(this._fxFadeAlpha > 0) { this._fxFadeAlpha += this._game.time.elapsed / this._fxFadeDuration; if(this._game.math.roundTo(this._fxFadeAlpha, -2) >= 1) { @@ -517,7 +350,6 @@ var Phaser; } }; Fade.prototype.postRender = function (camera, cameraX, cameraY, cameraWidth, cameraHeight) { - // "Fade" FX if(this._fxFadeAlpha > 0) { this._game.stage.context.fillStyle = this._fxFadeColor + this._fxFadeAlpha + ')'; this._game.stage.context.fillRect(cameraX, cameraY, cameraWidth, cameraHeight); diff --git a/Tests/phaser.js b/Tests/phaser.js index 661e4d306..0df38b194 100644 --- a/Tests/phaser.js +++ b/Tests/phaser.js @@ -760,6 +760,7 @@ var Phaser; if (typeof y === "undefined") { y = 0; } this.x = x; this.y = y; + return this; } Vec2.prototype.copyFrom = /** * Copies the x and y properties from any given object to this Vec2. @@ -3086,6 +3087,7 @@ var Phaser; (function (Phaser) { /// /// + /// /** * Phaser - Components - Transform */ @@ -3138,7 +3140,7 @@ var Phaser; this._halfSize.y = this.parent.height / 2; this._offset.x = this.origin.x * this.parent.width; this._offset.y = this.origin.y * this.parent.height; - this._angle = Math.atan2(this.halfHeight - this._offset.y, this.halfWidth - this._offset.x); + this._angle = Math.atan2(this.halfHeight - this._offset.x, this.halfWidth - this._offset.y); this._distance = Math.sqrt(((this._offset.x - this._halfSize.x) * (this._offset.x - this._halfSize.x)) + ((this._offset.y - this._halfSize.y) * (this._offset.y - this._halfSize.y))); this._size.x = this.parent.width; this._size.y = this.parent.height; @@ -4123,7 +4125,7 @@ var Phaser; * @return {Vec2} A Vec2. */ function normalRightHand(a, out) { - if (typeof out === "undefined") { out = this; } + if (typeof out === "undefined") { out = new Phaser.Vec2(); } return out.setTo(a.y * -1, a.x); }; Vec2Utils.normalize = /** @@ -6466,7 +6468,7 @@ var Phaser; // 5) Iterative velocity constraints solver this.velocitySolver(velocityIterations); Physics.Manager.dump("Velocity Solvers", this.bodies[1]); - // 6) Intergrate position + // 6) Integrate position for(var i = 0; i < this._bl; i++) { if(this.bodies[i] && this.bodies[i].isDynamic && this.bodies[i].isAwake) { this.bodies[i].updatePosition(this._delta); @@ -6597,12 +6599,15 @@ var Phaser; __extends(Box, _super); // Give in pixels function Box(x, y, width, height) { + console.log('Box px', x, y, width, height); x = Physics.Manager.pixelsToMeters(x); y = Physics.Manager.pixelsToMeters(y); width = Physics.Manager.pixelsToMeters(width); height = Physics.Manager.pixelsToMeters(height); + console.log('Box m', x, y, width, height); var hw = width * 0.5; var hh = height * 0.5; + console.log('Box hh', hw, hh); _super.call(this, [ { x: -hw + x, @@ -6932,7 +6937,7 @@ var Phaser; Physics.Manager.write('p: ' + this.position.toString()); Physics.Manager.write('xf: ' + this.transform.toString()); this.bounds.clear(); - for(var i = 0; i < this.shapes.length; i++) { + for(var i = 0; i < this.shapesLength; i++) { var shape = this.shapes[i]; shape.cacheData(this.transform); this.bounds.addBounds(shape.bounds); @@ -13573,14 +13578,16 @@ var Phaser; * @param y {number} Y position of the new sprite. * @param [key] {string} The image key as defined in the Game.Cache to use as the texture for this sprite * @param [frame] {string|number} If the sprite uses an image from a texture atlas or sprite sheet you can pass the frame here. Either a number for a frame ID or a string for a frame name. + * @param [bodyType] {number} The physics body type of the object (defaults to BODY_DYNAMIC) * @param [shapeType] The default body shape is either 0 for a Box or 1 for a Circle. See Sprite.body.addShape for custom shapes (polygons, etc) * @returns {Sprite} The newly created sprite object. */ - function (x, y, key, frame, shapeType) { + function (x, y, key, frame, bodyType, shapeType) { if (typeof key === "undefined") { key = ''; } if (typeof frame === "undefined") { frame = null; } + if (typeof bodyType === "undefined") { bodyType = Phaser.Types.BODY_DYNAMIC; } if (typeof shapeType === "undefined") { shapeType = 0; } - return this._world.group.add(new Phaser.Sprite(this._game, x, y, key, frame, Phaser.Types.BODY_DYNAMIC, shapeType)); + return this._world.group.add(new Phaser.Sprite(this._game, x, y, key, frame, bodyType, shapeType)); }; GameObjectFactory.prototype.dynamicTexture = /** * Create a new DynamicTexture with specific size. @@ -18582,6 +18589,32 @@ var Phaser; DebugUtils.context.fillText('cx: ' + sprite.cameraView.x + ' cy: ' + sprite.cameraView.y + ' cw: ' + sprite.cameraView.width + ' ch: ' + sprite.cameraView.height + ' cb: ' + sprite.cameraView.bottom + ' cr: ' + sprite.cameraView.right, x, y + 70); DebugUtils.context.fillText('inCamera: ' + DebugUtils.game.renderer.inCamera(DebugUtils.game.camera, sprite), x, y + 84); }; + DebugUtils.renderPhysicsBodyInfo = /** + * Render debug infos. (including name, bounds info, position and some other properties) + * @param x {number} X position of the debug info to be rendered. + * @param y {number} Y position of the debug info to be rendered. + * @param [color] {number} color of the debug info to be rendered. (format is css color string) + */ + function renderPhysicsBodyInfo(body, x, y, color) { + if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } + DebugUtils.context.fillStyle = color; + DebugUtils.context.fillText('Body ID: ' + body.name, x, y); + DebugUtils.context.fillText('Position x: ' + body.position.x.toFixed(1) + ' y: ' + body.position.y.toFixed(1) + ' rotation: ' + body.angle.toFixed(1), x, y + 14); + DebugUtils.context.fillText('World x: ' + (body.position.x * 50).toFixed(1) + ' y: ' + (body.position.y * 50).toFixed(1), x, y + 28); + DebugUtils.context.fillText('Velocity x: ' + body.velocity.x.toFixed(1) + ' y: ' + body.velocity.y.toFixed(1), x, y + 42); + if(body.shapes[0].verts.length > 0) { + DebugUtils.context.fillText('Vert 1 x: ' + (body.shapes[0].verts[0].x * 50) + ' y: ' + (body.shapes[0].verts[0].y * 50), x, y + 56); + DebugUtils.context.fillText('Vert 2 x: ' + (body.shapes[0].verts[1].x * 50) + ' y: ' + (body.shapes[0].verts[1].y * 50), x, y + 70); + DebugUtils.context.fillText('Vert 3 x: ' + (body.shapes[0].tverts[2].x * 50) + ' y: ' + (body.shapes[0].tverts[2].y * 50), x, y + 84); + DebugUtils.context.fillText('Vert 4 x: ' + (body.shapes[0].tverts[3].x * 50) + ' y: ' + (body.shapes[0].tverts[3].y * 50), x, y + 98); + /* + DebugUtils.context.fillText('Vert 1 x: ' + body.shapes[0].verts[0].x.toFixed(1) + ' y: ' + body.shapes[0].verts[0].y.toFixed(1), x, y + 56); + DebugUtils.context.fillText('Vert 2 x: ' + body.shapes[0].verts[1].x.toFixed(1) + ' y: ' + body.shapes[0].verts[1].y.toFixed(1), x, y + 70); + DebugUtils.context.fillText('Vert 3 x: ' + body.shapes[0].verts[2].x.toFixed(1) + ' y: ' + body.shapes[0].verts[2].y.toFixed(1), x, y + 84); + DebugUtils.context.fillText('Vert 4 x: ' + body.shapes[0].verts[3].x.toFixed(1) + ' y: ' + body.shapes[0].verts[3].y.toFixed(1), x, y + 98); + */ + } + }; DebugUtils.renderSpriteBounds = function renderSpriteBounds(sprite, camera, color) { if (typeof camera === "undefined") { camera = null; } if (typeof color === "undefined") { color = 'rgba(0,255,0,0.2)'; } @@ -18597,15 +18630,18 @@ var Phaser; if (typeof lineWidth === "undefined") { lineWidth = 1; } if (typeof fillStyle === "undefined") { fillStyle = 'rgba(0,255,0,0.2)'; } if (typeof sleepStyle === "undefined") { sleepStyle = 'rgba(100,100,100,0.2)'; } - for(var s = 0; s < body.shapes.length; s++) { + for(var s = 0; s < body.shapesLength; s++) { DebugUtils.context.beginPath(); if(body.shapes[s].type == Phaser.Physics.Manager.SHAPE_TYPE_POLY) { var verts = body.shapes[s].tverts; - DebugUtils.context.moveTo((body.position.x + verts[0].x) * 50, (body.position.y + verts[0].y) * 50); - for(var i = 0; i < verts.length; i++) { - DebugUtils.context.lineTo((body.position.x + verts[i].x) * 50, (body.position.y + verts[i].y) * 50); + // DebugUtils.context.moveTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); + DebugUtils.context.moveTo(verts[0].x * 50, verts[0].y * 50); + for(var i = 1; i < verts.length; i++) { + // DebugUtils.context.lineTo(body.position.x * 50 + verts[i].x, body.position.y * 50 + verts[i].y); + DebugUtils.context.lineTo(verts[i].x * 50, verts[i].y * 50); } - DebugUtils.context.lineTo((body.position.x + verts[verts.length - 1].x) * 50, (body.position.y + verts[verts.length - 1].y) * 50); + // DebugUtils.context.lineTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); + DebugUtils.context.lineTo(verts[0].x * 50, verts[0].y * 50); } else if(body.shapes[s].type == Phaser.Physics.Manager.SHAPE_TYPE_CIRCLE) { var circle = body.shapes[s]; DebugUtils.context.arc(circle.tc.x * 50, circle.tc.y * 50, circle.radius * 50, 0, Math.PI * 2, false); @@ -19058,6 +19094,84 @@ var Phaser; })(); Phaser.Game = Game; })(Phaser || (Phaser = {})); +/// +/** +* Phaser - State +* +* This is a base State class which can be extended if you are creating your game using TypeScript. +*/ +var Phaser; +(function (Phaser) { + var State = (function () { + /** + * State constructor + * Create a new State. + */ + function State(game) { + this.game = game; + this.add = game.add; + this.camera = game.camera; + this.cache = game.cache; + this.input = game.input; + this.load = game.load; + 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 = // Override these in your own States + /** + * Override this method to add some load operations. + * If you need to use the loader, you may need to use them here. + */ + function () { + }; + State.prototype.create = /** + * This method is called after the game engine successfully switches states. + * Feel free to add any setup code here.(Do not load anything here, override init() instead) + */ + function () { + }; + State.prototype.update = /** + * Put update logic here. + */ + function () { + }; + State.prototype.render = /** + * Put render operations here. + */ + function () { + }; + State.prototype.paused = /** + * This method will be called when game paused. + */ + function () { + }; + State.prototype.destroy = /** + * This method will be called when the state is destroyed + */ + function () { + }; + return State; + })(); + Phaser.State = State; + /** + * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. + * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. + * @param object1 The first GameObject or Group to check. If null the world.group is used. + * @param object2 The second GameObject or Group to check. + * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. + * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. + * @param context The context in which the callbacks will be called + * @returns {boolean} true if the objects overlap, otherwise false. + */ + //public collide(objectOrGroup1 = null, objectOrGroup2 = null, notifyCallback = null, context? = this.game.callbackContext): bool { + // return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Collision.separate, context); + //} + })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { /** @@ -19400,6 +19514,206 @@ var Phaser; Phaser.Line = Line; })(Phaser || (Phaser = {})); /// +/** +* Phaser - IntersectResult +* +* A light-weight result object to hold the results of an intersection. For when you need more than just true/false. +*/ +var Phaser; +(function (Phaser) { + var IntersectResult = (function () { + function IntersectResult() { + /** + * Did they intersect or not? + * @property result + * @type {Boolean} + */ + this.result = false; + } + IntersectResult.prototype.setTo = /** + * + * @method setTo + * @param {Number} x1 + * @param {Number} y1 + * @param {Number} [x2] + * @param {Number} [y2] + * @param {Number} [width] + * @param {Number} [height] + */ + 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 = {})); +/// +/// +/// +/** +* Phaser - Mat3Utils +* +* A collection of methods useful for manipulating and performing operations on Mat3 objects. +* +*/ +var Phaser; +(function (Phaser) { + var Mat3Utils = (function () { + function Mat3Utils() { } + Mat3Utils.transpose = /** + * Transpose the values of a Mat3 + **/ + function transpose(source, dest) { + if (typeof dest === "undefined") { dest = null; } + if(dest === null) { + // Transpose ourselves + var a01 = source.data[1]; + var a02 = source.data[2]; + var a12 = source.data[5]; + source.data[1] = source.data[3]; + source.data[2] = source.data[6]; + source.data[3] = a01; + source.data[5] = source.data[7]; + source.data[6] = a02; + source.data[7] = a12; + } else { + source.data[0] = dest.data[0]; + source.data[1] = dest.data[3]; + source.data[2] = dest.data[6]; + source.data[3] = dest.data[1]; + source.data[4] = dest.data[4]; + source.data[5] = dest.data[7]; + source.data[6] = dest.data[2]; + source.data[7] = dest.data[5]; + source.data[8] = dest.data[8]; + } + return source; + }; + Mat3Utils.invert = /** + * Inverts a Mat3 + **/ + function invert(source) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + var b01 = a22 * a11 - a12 * a21; + var b11 = -a22 * a10 + a12 * a20; + var b21 = a21 * a10 - a11 * a20; + // Determinant + var det = a00 * b01 + a01 * b11 + a02 * b21; + if(!det) { + return null; + } + det = 1.0 / det; + source.data[0] = b01 * det; + source.data[1] = (-a22 * a01 + a02 * a21) * det; + source.data[2] = (a12 * a01 - a02 * a11) * det; + source.data[3] = b11 * det; + source.data[4] = (a22 * a00 - a02 * a20) * det; + source.data[5] = (-a12 * a00 + a02 * a10) * det; + source.data[6] = b21 * det; + source.data[7] = (-a21 * a00 + a01 * a20) * det; + source.data[8] = (a11 * a00 - a01 * a10) * det; + return source; + }; + Mat3Utils.adjoint = /** + * Calculates the adjugate of a Mat3 + **/ + function adjoint(source) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + source.data[0] = (a11 * a22 - a12 * a21); + source.data[1] = (a02 * a21 - a01 * a22); + source.data[2] = (a01 * a12 - a02 * a11); + source.data[3] = (a12 * a20 - a10 * a22); + source.data[4] = (a00 * a22 - a02 * a20); + source.data[5] = (a02 * a10 - a00 * a12); + source.data[6] = (a10 * a21 - a11 * a20); + source.data[7] = (a01 * a20 - a00 * a21); + source.data[8] = (a00 * a11 - a01 * a10); + return source; + }; + Mat3Utils.determinant = /** + * Calculates the adjugate of a Mat3 + **/ + function determinant(source) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); + }; + Mat3Utils.multiply = /** + * Multiplies two Mat3s + **/ + function multiply(source, b) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + var b00 = b.data[0]; + var b01 = b.data[1]; + var b02 = b.data[2]; + var b10 = b.data[3]; + var b11 = b.data[4]; + var b12 = b.data[5]; + var b20 = b.data[6]; + var b21 = b.data[7]; + var b22 = b.data[8]; + source.data[0] = b00 * a00 + b01 * a10 + b02 * a20; + source.data[1] = b00 * a01 + b01 * a11 + b02 * a21; + source.data[2] = b00 * a02 + b01 * a12 + b02 * a22; + source.data[3] = b10 * a00 + b11 * a10 + b12 * a20; + source.data[4] = b10 * a01 + b11 * a11 + b12 * a21; + source.data[5] = b10 * a02 + b11 * a12 + b12 * a22; + source.data[6] = b20 * a00 + b21 * a10 + b22 * a20; + source.data[7] = b20 * a01 + b21 * a11 + b22 * a21; + source.data[8] = b20 * a02 + b21 * a12 + b22 * a22; + return source; + }; + Mat3Utils.fromQuaternion = function fromQuaternion() { + }; + Mat3Utils.normalFromMat4 = function normalFromMat4() { + }; + return Mat3Utils; + })(); + Phaser.Mat3Utils = Mat3Utils; +})(Phaser || (Phaser = {})); +/// /// /// /// @@ -19563,161 +19877,6 @@ var Phaser; Phaser.CircleUtils = CircleUtils; })(Phaser || (Phaser = {})); /// -/// -/// -/** -* Phaser - Mat3Utils -* -* A collection of methods useful for manipulating and performing operations on Mat3 objects. -* -*/ -var Phaser; -(function (Phaser) { - var Mat3Utils = (function () { - function Mat3Utils() { } - Mat3Utils.transpose = /** - * Transpose the values of a Mat3 - **/ - function transpose(source, dest) { - if (typeof dest === "undefined") { dest = null; } - if(dest === null) { - // Transpose ourselves - var a01 = source.data[1]; - var a02 = source.data[2]; - var a12 = source.data[5]; - source.data[1] = source.data[3]; - source.data[2] = source.data[6]; - source.data[3] = a01; - source.data[5] = source.data[7]; - source.data[6] = a02; - source.data[7] = a12; - } else { - source.data[0] = dest.data[0]; - source.data[1] = dest.data[3]; - source.data[2] = dest.data[6]; - source.data[3] = dest.data[1]; - source.data[4] = dest.data[4]; - source.data[5] = dest.data[7]; - source.data[6] = dest.data[2]; - source.data[7] = dest.data[5]; - source.data[8] = dest.data[8]; - } - return source; - }; - Mat3Utils.invert = /** - * Inverts a Mat3 - **/ - function invert(source) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - var b01 = a22 * a11 - a12 * a21; - var b11 = -a22 * a10 + a12 * a20; - var b21 = a21 * a10 - a11 * a20; - // Determinant - var det = a00 * b01 + a01 * b11 + a02 * b21; - if(!det) { - return null; - } - det = 1.0 / det; - source.data[0] = b01 * det; - source.data[1] = (-a22 * a01 + a02 * a21) * det; - source.data[2] = (a12 * a01 - a02 * a11) * det; - source.data[3] = b11 * det; - source.data[4] = (a22 * a00 - a02 * a20) * det; - source.data[5] = (-a12 * a00 + a02 * a10) * det; - source.data[6] = b21 * det; - source.data[7] = (-a21 * a00 + a01 * a20) * det; - source.data[8] = (a11 * a00 - a01 * a10) * det; - return source; - }; - Mat3Utils.adjoint = /** - * Calculates the adjugate of a Mat3 - **/ - function adjoint(source) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - source.data[0] = (a11 * a22 - a12 * a21); - source.data[1] = (a02 * a21 - a01 * a22); - source.data[2] = (a01 * a12 - a02 * a11); - source.data[3] = (a12 * a20 - a10 * a22); - source.data[4] = (a00 * a22 - a02 * a20); - source.data[5] = (a02 * a10 - a00 * a12); - source.data[6] = (a10 * a21 - a11 * a20); - source.data[7] = (a01 * a20 - a00 * a21); - source.data[8] = (a00 * a11 - a01 * a10); - return source; - }; - Mat3Utils.determinant = /** - * Calculates the adjugate of a Mat3 - **/ - function determinant(source) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); - }; - Mat3Utils.multiply = /** - * Multiplies two Mat3s - **/ - function multiply(source, b) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - var b00 = b.data[0]; - var b01 = b.data[1]; - var b02 = b.data[2]; - var b10 = b.data[3]; - var b11 = b.data[4]; - var b12 = b.data[5]; - var b20 = b.data[6]; - var b21 = b.data[7]; - var b22 = b.data[8]; - source.data[0] = b00 * a00 + b01 * a10 + b02 * a20; - source.data[1] = b00 * a01 + b01 * a11 + b02 * a21; - source.data[2] = b00 * a02 + b01 * a12 + b02 * a22; - source.data[3] = b10 * a00 + b11 * a10 + b12 * a20; - source.data[4] = b10 * a01 + b11 * a11 + b12 * a21; - source.data[5] = b10 * a02 + b11 * a12 + b12 * a22; - source.data[6] = b20 * a00 + b21 * a10 + b22 * a20; - source.data[7] = b20 * a01 + b21 * a11 + b22 * a21; - source.data[8] = b20 * a02 + b21 * a12 + b22 * a22; - return source; - }; - Mat3Utils.fromQuaternion = function fromQuaternion() { - }; - Mat3Utils.normalFromMat4 = function normalFromMat4() { - }; - return Mat3Utils; - })(); - Phaser.Mat3Utils = Mat3Utils; -})(Phaser || (Phaser = {})); -/// /// /// /// @@ -19745,126 +19904,3 @@ var Phaser; })(); Phaser.PixelUtils = PixelUtils; })(Phaser || (Phaser = {})); -/// -/** -* Phaser - IntersectResult -* -* A light-weight result object to hold the results of an intersection. For when you need more than just true/false. -*/ -var Phaser; -(function (Phaser) { - var IntersectResult = (function () { - function IntersectResult() { - /** - * Did they intersect or not? - * @property result - * @type {Boolean} - */ - this.result = false; - } - IntersectResult.prototype.setTo = /** - * - * @method setTo - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} [x2] - * @param {Number} [y2] - * @param {Number} [width] - * @param {Number} [height] - */ - 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 = {})); -/// -/** -* Phaser - State -* -* This is a base State class which can be extended if you are creating your game using TypeScript. -*/ -var Phaser; -(function (Phaser) { - var State = (function () { - /** - * State constructor - * Create a new State. - */ - function State(game) { - this.game = game; - this.add = game.add; - this.camera = game.camera; - this.cache = game.cache; - this.input = game.input; - this.load = game.load; - 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 = // Override these in your own States - /** - * Override this method to add some load operations. - * If you need to use the loader, you may need to use them here. - */ - function () { - }; - State.prototype.create = /** - * This method is called after the game engine successfully switches states. - * Feel free to add any setup code here.(Do not load anything here, override init() instead) - */ - function () { - }; - State.prototype.update = /** - * Put update logic here. - */ - function () { - }; - State.prototype.render = /** - * Put render operations here. - */ - function () { - }; - State.prototype.paused = /** - * This method will be called when game paused. - */ - function () { - }; - State.prototype.destroy = /** - * This method will be called when the state is destroyed - */ - function () { - }; - return State; - })(); - Phaser.State = State; - /** - * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. - * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. - * @param object1 The first GameObject or Group to check. If null the world.group is used. - * @param object2 The second GameObject or Group to check. - * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. - * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. - * @param context The context in which the callbacks will be called - * @returns {boolean} true if the objects overlap, otherwise false. - */ - //public collide(objectOrGroup1 = null, objectOrGroup2 = null, notifyCallback = null, context? = this.game.callbackContext): bool { - // return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Collision.separate, context); - //} - })(Phaser || (Phaser = {})); diff --git a/Tests/physics/simple test 1.js b/Tests/physics/simple test 1.js index 7ecb08023..44a660aaa 100644 --- a/Tests/physics/simple test 1.js +++ b/Tests/physics/simple test 1.js @@ -1,25 +1,21 @@ -/// -(function () { - var game = new Phaser.Game(this, 'game', 800, 600, init, create, null, render); - function init() { - // Using Phasers asset loader we load up a PNG from the assets folder - game.load.image('atari', 'assets/sprites/atari130xe.png'); - game.load.image('ball', 'assets/sprites/shinyball.png'); - game.load.start(); - } - var atari; - var ball; - function create() { - // Add some gravity to the world, otherwise nothing will actually happen - game.physics.gravity.setTo(0, 10); - //atari = game.add.physicsSprite(220/2, 450, 'atari'); - atari = game.add.physicsSprite(320, 450, 'atari'); - // We'll make the atari sprite a static body, so it won't be influenced by gravity or other forces - atari.body.type = Phaser.Types.BODY_STATIC; - ball = game.add.physicsSprite(330, 0, 'ball', null, 0); - } - function render() { - Phaser.DebugUtils.renderPhysicsBody(atari.body); - Phaser.DebugUtils.renderPhysicsBody(ball.body); - } -})(); +(function () { + var game = new Phaser.Game(this, 'game', 800, 600, init, create, null, render); + function init() { + game.load.image('atari', 'assets/sprites/atari130xe.png'); + game.load.image('ball', 'assets/sprites/shinyball.png'); + game.load.start(); + } + var atari; + var ball; + function create() { + game.physics.gravity.setTo(0, 5); + atari = game.add.physicsSprite(300, 450, 'atari', null, Phaser.Types.BODY_STATIC); + ball = game.add.physicsSprite(300 - 20, 0, 'ball'); + } + function render() { + Phaser.DebugUtils.renderPhysicsBodyInfo(atari.body, 32, 32); + Phaser.DebugUtils.renderPhysicsBodyInfo(ball.body, 320, 32); + Phaser.DebugUtils.renderPhysicsBody(atari.body); + Phaser.DebugUtils.renderPhysicsBody(ball.body); + } +})(); diff --git a/Tests/physics/simple test 1.ts b/Tests/physics/simple test 1.ts index c35cc3c1d..aef0b3413 100644 --- a/Tests/physics/simple test 1.ts +++ b/Tests/physics/simple test 1.ts @@ -19,19 +19,24 @@ function create() { // Add some gravity to the world, otherwise nothing will actually happen - game.physics.gravity.setTo(0, 10); + game.physics.gravity.setTo(0, 5); - //atari = game.add.physicsSprite(220/2, 450, 'atari'); - atari = game.add.physicsSprite(320, 450, 'atari'); // We'll make the atari sprite a static body, so it won't be influenced by gravity or other forces - atari.body.type = Phaser.Types.BODY_STATIC; + atari = game.add.physicsSprite(300, 450, 'atari', null, Phaser.Types.BODY_STATIC); - ball = game.add.physicsSprite(330, 0, 'ball', null, 0); + // atari = 220px width (110 = center x) + // ball = 32px width (16 = center x) + + // Ball will be a dynamic body and fall based on gravity + ball = game.add.physicsSprite(300-20, 0, 'ball'); } function render() { + Phaser.DebugUtils.renderPhysicsBodyInfo(atari.body, 32, 32); + Phaser.DebugUtils.renderPhysicsBodyInfo(ball.body, 320, 32); + Phaser.DebugUtils.renderPhysicsBody(atari.body); Phaser.DebugUtils.renderPhysicsBody(ball.body); diff --git a/build/phaser.d.ts b/build/phaser.d.ts index d09681a83..ca8759253 100644 --- a/build/phaser.d.ts +++ b/build/phaser.d.ts @@ -6666,10 +6666,11 @@ module Phaser { * @param y {number} Y position of the new sprite. * @param [key] {string} The image key as defined in the Game.Cache to use as the texture for this sprite * @param [frame] {string|number} If the sprite uses an image from a texture atlas or sprite sheet you can pass the frame here. Either a number for a frame ID or a string for a frame name. + * @param [bodyType] {number} The physics body type of the object (defaults to BODY_DYNAMIC) * @param [shapeType] The default body shape is either 0 for a Box or 1 for a Circle. See Sprite.body.addShape for custom shapes (polygons, etc) * @returns {Sprite} The newly created sprite object. */ - public physicsSprite(x: number, y: number, key?: string, frame?, shapeType?: number): Sprite; + public physicsSprite(x: number, y: number, key?: string, frame?, bodyType?: number, shapeType?: number): Sprite; /** * Create a new DynamicTexture with specific size. * @@ -9300,6 +9301,13 @@ module Phaser { * @param [color] {number} color of the debug info to be rendered. (format is css color string) */ static renderSpriteInfo(sprite: Sprite, x: number, y: number, color?: string): void; + /** + * Render debug infos. (including name, bounds info, position and some other properties) + * @param x {number} X position of the debug info to be rendered. + * @param y {number} Y position of the debug info to be rendered. + * @param [color] {number} color of the debug info to be rendered. (format is css color string) + */ + static renderPhysicsBodyInfo(body: Physics.Body, x: number, y: number, color?: string): void; static renderSpriteBounds(sprite: Sprite, camera?: Camera, color?: string): void; static renderPhysicsBody(body: Physics.Body, lineWidth?: number, fillStyle?: string, sleepStyle?: string): void; } @@ -9543,6 +9551,110 @@ module Phaser { } } /** +* Phaser - State +* +* This is a base State class which can be extended if you are creating your game using TypeScript. +*/ +module Phaser { + class State { + /** + * State constructor + * Create a new State. + */ + constructor(game: Game); + /** + * Reference to Game. + */ + public game: Game; + /** + * Currently used camera. + * @type {Camera} + */ + public camera: Camera; + /** + * Reference to the assets cache. + * @type {Cache} + */ + public cache: Cache; + /** + * Reference to the GameObject Factory. + * @type {GameObjectFactory} + */ + public add: GameObjectFactory; + /** + * Reference to the input manager + * @type {Input} + */ + public input: Input; + /** + * Reference to the assets loader. + * @type {Loader} + */ + public load: Loader; + /** + * Reference to the math helper. + * @type {GameMath} + */ + public math: GameMath; + /** + * Reference to the motion helper. + * @type {Motion} + */ + public motion: Motion; + /** + * Reference to the sound manager. + * @type {SoundManager} + */ + public sound: SoundManager; + /** + * Reference to the stage. + * @type {Stage} + */ + public stage: Stage; + /** + * Reference to game clock. + * @type {Time} + */ + public time: Time; + /** + * Reference to the tween manager. + * @type {TweenManager} + */ + public tweens: TweenManager; + /** + * Reference to the world. + * @type {World} + */ + public world: World; + /** + * Override this method to add some load operations. + * If you need to use the loader, you may need to use them here. + */ + public init(): void; + /** + * This method is called after the game engine successfully switches states. + * Feel free to add any setup code here.(Do not load anything here, override init() instead) + */ + public create(): void; + /** + * Put update logic here. + */ + public update(): void; + /** + * Put render operations here. + */ + public render(): void; + /** + * This method will be called when game paused. + */ + public paused(): void; + /** + * This method will be called when the state is destroyed + */ + public destroy(): void; + } +} +/** * Phaser - Components - Debug * * @@ -9723,6 +9835,104 @@ module Phaser { } } /** +* Phaser - IntersectResult +* +* A light-weight result object to hold the results of an intersection. For when you need more than just true/false. +*/ +module Phaser { + class IntersectResult { + /** + * Did they intersect or not? + * @property result + * @type {Boolean} + */ + public result: bool; + /** + * @property x + * @type {Number} + */ + public x: number; + /** + * @property y + * @type {Number} + */ + public y: number; + /** + * @property x1 + * @type {Number} + */ + public x1: number; + /** + * @property y1 + * @type {Number} + */ + public y1: number; + /** + * @property x2 + * @type {Number} + */ + public x2: number; + /** + * @property y2 + * @type {Number} + */ + public y2: number; + /** + * @property width + * @type {Number} + */ + public width: number; + /** + * @property height + * @type {Number} + */ + public height: number; + /** + * + * @method setTo + * @param {Number} x1 + * @param {Number} y1 + * @param {Number} [x2] + * @param {Number} [y2] + * @param {Number} [width] + * @param {Number} [height] + */ + public setTo(x1: number, y1: number, x2?: number, y2?: number, width?: number, height?: number): void; + } +} +/** +* Phaser - Mat3Utils +* +* A collection of methods useful for manipulating and performing operations on Mat3 objects. +* +*/ +module Phaser { + class Mat3Utils { + /** + * Transpose the values of a Mat3 + **/ + static transpose(source: Mat3, dest?: Mat3): Mat3; + /** + * Inverts a Mat3 + **/ + static invert(source: Mat3): Mat3; + /** + * Calculates the adjugate of a Mat3 + **/ + static adjoint(source: Mat3): Mat3; + /** + * Calculates the adjugate of a Mat3 + **/ + static determinant(source: Mat3): number; + /** + * Multiplies two Mat3s + **/ + static multiply(source: Mat3, b: Mat3): Mat3; + static fromQuaternion(): void; + static normalFromMat4(): void; + } +} +/** * Phaser - CircleUtils * * A collection of methods useful for manipulating and comparing Circle objects. @@ -9806,38 +10016,6 @@ module Phaser { } } /** -* Phaser - Mat3Utils -* -* A collection of methods useful for manipulating and performing operations on Mat3 objects. -* -*/ -module Phaser { - class Mat3Utils { - /** - * Transpose the values of a Mat3 - **/ - static transpose(source: Mat3, dest?: Mat3): Mat3; - /** - * Inverts a Mat3 - **/ - static invert(source: Mat3): Mat3; - /** - * Calculates the adjugate of a Mat3 - **/ - static adjoint(source: Mat3): Mat3; - /** - * Calculates the adjugate of a Mat3 - **/ - static determinant(source: Mat3): number; - /** - * Multiplies two Mat3s - **/ - static multiply(source: Mat3, b: Mat3): Mat3; - static fromQuaternion(): void; - static normalFromMat4(): void; - } -} -/** * Phaser - PixelUtils * * A collection of methods useful for manipulating pixels. @@ -9858,173 +10036,3 @@ module Phaser { static getPixel(key: string, x: number, y: number): number; } } -/** -* Phaser - IntersectResult -* -* A light-weight result object to hold the results of an intersection. For when you need more than just true/false. -*/ -module Phaser { - class IntersectResult { - /** - * Did they intersect or not? - * @property result - * @type {Boolean} - */ - public result: bool; - /** - * @property x - * @type {Number} - */ - public x: number; - /** - * @property y - * @type {Number} - */ - public y: number; - /** - * @property x1 - * @type {Number} - */ - public x1: number; - /** - * @property y1 - * @type {Number} - */ - public y1: number; - /** - * @property x2 - * @type {Number} - */ - public x2: number; - /** - * @property y2 - * @type {Number} - */ - public y2: number; - /** - * @property width - * @type {Number} - */ - public width: number; - /** - * @property height - * @type {Number} - */ - public height: number; - /** - * - * @method setTo - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} [x2] - * @param {Number} [y2] - * @param {Number} [width] - * @param {Number} [height] - */ - public setTo(x1: number, y1: number, x2?: number, y2?: number, width?: number, height?: number): void; - } -} -/** -* Phaser - State -* -* This is a base State class which can be extended if you are creating your game using TypeScript. -*/ -module Phaser { - class State { - /** - * State constructor - * Create a new State. - */ - constructor(game: Game); - /** - * Reference to Game. - */ - public game: Game; - /** - * Currently used camera. - * @type {Camera} - */ - public camera: Camera; - /** - * Reference to the assets cache. - * @type {Cache} - */ - public cache: Cache; - /** - * Reference to the GameObject Factory. - * @type {GameObjectFactory} - */ - public add: GameObjectFactory; - /** - * Reference to the input manager - * @type {Input} - */ - public input: Input; - /** - * Reference to the assets loader. - * @type {Loader} - */ - public load: Loader; - /** - * Reference to the math helper. - * @type {GameMath} - */ - public math: GameMath; - /** - * Reference to the motion helper. - * @type {Motion} - */ - public motion: Motion; - /** - * Reference to the sound manager. - * @type {SoundManager} - */ - public sound: SoundManager; - /** - * Reference to the stage. - * @type {Stage} - */ - public stage: Stage; - /** - * Reference to game clock. - * @type {Time} - */ - public time: Time; - /** - * Reference to the tween manager. - * @type {TweenManager} - */ - public tweens: TweenManager; - /** - * Reference to the world. - * @type {World} - */ - public world: World; - /** - * Override this method to add some load operations. - * If you need to use the loader, you may need to use them here. - */ - public init(): void; - /** - * This method is called after the game engine successfully switches states. - * Feel free to add any setup code here.(Do not load anything here, override init() instead) - */ - public create(): void; - /** - * Put update logic here. - */ - public update(): void; - /** - * Put render operations here. - */ - public render(): void; - /** - * This method will be called when game paused. - */ - public paused(): void; - /** - * This method will be called when the state is destroyed - */ - public destroy(): void; - } -} diff --git a/build/phaser.js b/build/phaser.js index 661e4d306..0df38b194 100644 --- a/build/phaser.js +++ b/build/phaser.js @@ -760,6 +760,7 @@ var Phaser; if (typeof y === "undefined") { y = 0; } this.x = x; this.y = y; + return this; } Vec2.prototype.copyFrom = /** * Copies the x and y properties from any given object to this Vec2. @@ -3086,6 +3087,7 @@ var Phaser; (function (Phaser) { /// /// + /// /** * Phaser - Components - Transform */ @@ -3138,7 +3140,7 @@ var Phaser; this._halfSize.y = this.parent.height / 2; this._offset.x = this.origin.x * this.parent.width; this._offset.y = this.origin.y * this.parent.height; - this._angle = Math.atan2(this.halfHeight - this._offset.y, this.halfWidth - this._offset.x); + this._angle = Math.atan2(this.halfHeight - this._offset.x, this.halfWidth - this._offset.y); this._distance = Math.sqrt(((this._offset.x - this._halfSize.x) * (this._offset.x - this._halfSize.x)) + ((this._offset.y - this._halfSize.y) * (this._offset.y - this._halfSize.y))); this._size.x = this.parent.width; this._size.y = this.parent.height; @@ -4123,7 +4125,7 @@ var Phaser; * @return {Vec2} A Vec2. */ function normalRightHand(a, out) { - if (typeof out === "undefined") { out = this; } + if (typeof out === "undefined") { out = new Phaser.Vec2(); } return out.setTo(a.y * -1, a.x); }; Vec2Utils.normalize = /** @@ -6466,7 +6468,7 @@ var Phaser; // 5) Iterative velocity constraints solver this.velocitySolver(velocityIterations); Physics.Manager.dump("Velocity Solvers", this.bodies[1]); - // 6) Intergrate position + // 6) Integrate position for(var i = 0; i < this._bl; i++) { if(this.bodies[i] && this.bodies[i].isDynamic && this.bodies[i].isAwake) { this.bodies[i].updatePosition(this._delta); @@ -6597,12 +6599,15 @@ var Phaser; __extends(Box, _super); // Give in pixels function Box(x, y, width, height) { + console.log('Box px', x, y, width, height); x = Physics.Manager.pixelsToMeters(x); y = Physics.Manager.pixelsToMeters(y); width = Physics.Manager.pixelsToMeters(width); height = Physics.Manager.pixelsToMeters(height); + console.log('Box m', x, y, width, height); var hw = width * 0.5; var hh = height * 0.5; + console.log('Box hh', hw, hh); _super.call(this, [ { x: -hw + x, @@ -6932,7 +6937,7 @@ var Phaser; Physics.Manager.write('p: ' + this.position.toString()); Physics.Manager.write('xf: ' + this.transform.toString()); this.bounds.clear(); - for(var i = 0; i < this.shapes.length; i++) { + for(var i = 0; i < this.shapesLength; i++) { var shape = this.shapes[i]; shape.cacheData(this.transform); this.bounds.addBounds(shape.bounds); @@ -13573,14 +13578,16 @@ var Phaser; * @param y {number} Y position of the new sprite. * @param [key] {string} The image key as defined in the Game.Cache to use as the texture for this sprite * @param [frame] {string|number} If the sprite uses an image from a texture atlas or sprite sheet you can pass the frame here. Either a number for a frame ID or a string for a frame name. + * @param [bodyType] {number} The physics body type of the object (defaults to BODY_DYNAMIC) * @param [shapeType] The default body shape is either 0 for a Box or 1 for a Circle. See Sprite.body.addShape for custom shapes (polygons, etc) * @returns {Sprite} The newly created sprite object. */ - function (x, y, key, frame, shapeType) { + function (x, y, key, frame, bodyType, shapeType) { if (typeof key === "undefined") { key = ''; } if (typeof frame === "undefined") { frame = null; } + if (typeof bodyType === "undefined") { bodyType = Phaser.Types.BODY_DYNAMIC; } if (typeof shapeType === "undefined") { shapeType = 0; } - return this._world.group.add(new Phaser.Sprite(this._game, x, y, key, frame, Phaser.Types.BODY_DYNAMIC, shapeType)); + return this._world.group.add(new Phaser.Sprite(this._game, x, y, key, frame, bodyType, shapeType)); }; GameObjectFactory.prototype.dynamicTexture = /** * Create a new DynamicTexture with specific size. @@ -18582,6 +18589,32 @@ var Phaser; DebugUtils.context.fillText('cx: ' + sprite.cameraView.x + ' cy: ' + sprite.cameraView.y + ' cw: ' + sprite.cameraView.width + ' ch: ' + sprite.cameraView.height + ' cb: ' + sprite.cameraView.bottom + ' cr: ' + sprite.cameraView.right, x, y + 70); DebugUtils.context.fillText('inCamera: ' + DebugUtils.game.renderer.inCamera(DebugUtils.game.camera, sprite), x, y + 84); }; + DebugUtils.renderPhysicsBodyInfo = /** + * Render debug infos. (including name, bounds info, position and some other properties) + * @param x {number} X position of the debug info to be rendered. + * @param y {number} Y position of the debug info to be rendered. + * @param [color] {number} color of the debug info to be rendered. (format is css color string) + */ + function renderPhysicsBodyInfo(body, x, y, color) { + if (typeof color === "undefined") { color = 'rgb(255,255,255)'; } + DebugUtils.context.fillStyle = color; + DebugUtils.context.fillText('Body ID: ' + body.name, x, y); + DebugUtils.context.fillText('Position x: ' + body.position.x.toFixed(1) + ' y: ' + body.position.y.toFixed(1) + ' rotation: ' + body.angle.toFixed(1), x, y + 14); + DebugUtils.context.fillText('World x: ' + (body.position.x * 50).toFixed(1) + ' y: ' + (body.position.y * 50).toFixed(1), x, y + 28); + DebugUtils.context.fillText('Velocity x: ' + body.velocity.x.toFixed(1) + ' y: ' + body.velocity.y.toFixed(1), x, y + 42); + if(body.shapes[0].verts.length > 0) { + DebugUtils.context.fillText('Vert 1 x: ' + (body.shapes[0].verts[0].x * 50) + ' y: ' + (body.shapes[0].verts[0].y * 50), x, y + 56); + DebugUtils.context.fillText('Vert 2 x: ' + (body.shapes[0].verts[1].x * 50) + ' y: ' + (body.shapes[0].verts[1].y * 50), x, y + 70); + DebugUtils.context.fillText('Vert 3 x: ' + (body.shapes[0].tverts[2].x * 50) + ' y: ' + (body.shapes[0].tverts[2].y * 50), x, y + 84); + DebugUtils.context.fillText('Vert 4 x: ' + (body.shapes[0].tverts[3].x * 50) + ' y: ' + (body.shapes[0].tverts[3].y * 50), x, y + 98); + /* + DebugUtils.context.fillText('Vert 1 x: ' + body.shapes[0].verts[0].x.toFixed(1) + ' y: ' + body.shapes[0].verts[0].y.toFixed(1), x, y + 56); + DebugUtils.context.fillText('Vert 2 x: ' + body.shapes[0].verts[1].x.toFixed(1) + ' y: ' + body.shapes[0].verts[1].y.toFixed(1), x, y + 70); + DebugUtils.context.fillText('Vert 3 x: ' + body.shapes[0].verts[2].x.toFixed(1) + ' y: ' + body.shapes[0].verts[2].y.toFixed(1), x, y + 84); + DebugUtils.context.fillText('Vert 4 x: ' + body.shapes[0].verts[3].x.toFixed(1) + ' y: ' + body.shapes[0].verts[3].y.toFixed(1), x, y + 98); + */ + } + }; DebugUtils.renderSpriteBounds = function renderSpriteBounds(sprite, camera, color) { if (typeof camera === "undefined") { camera = null; } if (typeof color === "undefined") { color = 'rgba(0,255,0,0.2)'; } @@ -18597,15 +18630,18 @@ var Phaser; if (typeof lineWidth === "undefined") { lineWidth = 1; } if (typeof fillStyle === "undefined") { fillStyle = 'rgba(0,255,0,0.2)'; } if (typeof sleepStyle === "undefined") { sleepStyle = 'rgba(100,100,100,0.2)'; } - for(var s = 0; s < body.shapes.length; s++) { + for(var s = 0; s < body.shapesLength; s++) { DebugUtils.context.beginPath(); if(body.shapes[s].type == Phaser.Physics.Manager.SHAPE_TYPE_POLY) { var verts = body.shapes[s].tverts; - DebugUtils.context.moveTo((body.position.x + verts[0].x) * 50, (body.position.y + verts[0].y) * 50); - for(var i = 0; i < verts.length; i++) { - DebugUtils.context.lineTo((body.position.x + verts[i].x) * 50, (body.position.y + verts[i].y) * 50); + // DebugUtils.context.moveTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); + DebugUtils.context.moveTo(verts[0].x * 50, verts[0].y * 50); + for(var i = 1; i < verts.length; i++) { + // DebugUtils.context.lineTo(body.position.x * 50 + verts[i].x, body.position.y * 50 + verts[i].y); + DebugUtils.context.lineTo(verts[i].x * 50, verts[i].y * 50); } - DebugUtils.context.lineTo((body.position.x + verts[verts.length - 1].x) * 50, (body.position.y + verts[verts.length - 1].y) * 50); + // DebugUtils.context.lineTo(body.position.x * 50 + verts[0].x, body.position.y * 50 + verts[0].y); + DebugUtils.context.lineTo(verts[0].x * 50, verts[0].y * 50); } else if(body.shapes[s].type == Phaser.Physics.Manager.SHAPE_TYPE_CIRCLE) { var circle = body.shapes[s]; DebugUtils.context.arc(circle.tc.x * 50, circle.tc.y * 50, circle.radius * 50, 0, Math.PI * 2, false); @@ -19058,6 +19094,84 @@ var Phaser; })(); Phaser.Game = Game; })(Phaser || (Phaser = {})); +/// +/** +* Phaser - State +* +* This is a base State class which can be extended if you are creating your game using TypeScript. +*/ +var Phaser; +(function (Phaser) { + var State = (function () { + /** + * State constructor + * Create a new State. + */ + function State(game) { + this.game = game; + this.add = game.add; + this.camera = game.camera; + this.cache = game.cache; + this.input = game.input; + this.load = game.load; + 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 = // Override these in your own States + /** + * Override this method to add some load operations. + * If you need to use the loader, you may need to use them here. + */ + function () { + }; + State.prototype.create = /** + * This method is called after the game engine successfully switches states. + * Feel free to add any setup code here.(Do not load anything here, override init() instead) + */ + function () { + }; + State.prototype.update = /** + * Put update logic here. + */ + function () { + }; + State.prototype.render = /** + * Put render operations here. + */ + function () { + }; + State.prototype.paused = /** + * This method will be called when game paused. + */ + function () { + }; + State.prototype.destroy = /** + * This method will be called when the state is destroyed + */ + function () { + }; + return State; + })(); + Phaser.State = State; + /** + * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. + * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. + * @param object1 The first GameObject or Group to check. If null the world.group is used. + * @param object2 The second GameObject or Group to check. + * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. + * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. + * @param context The context in which the callbacks will be called + * @returns {boolean} true if the objects overlap, otherwise false. + */ + //public collide(objectOrGroup1 = null, objectOrGroup2 = null, notifyCallback = null, context? = this.game.callbackContext): bool { + // return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Collision.separate, context); + //} + })(Phaser || (Phaser = {})); var Phaser; (function (Phaser) { /** @@ -19400,6 +19514,206 @@ var Phaser; Phaser.Line = Line; })(Phaser || (Phaser = {})); /// +/** +* Phaser - IntersectResult +* +* A light-weight result object to hold the results of an intersection. For when you need more than just true/false. +*/ +var Phaser; +(function (Phaser) { + var IntersectResult = (function () { + function IntersectResult() { + /** + * Did they intersect or not? + * @property result + * @type {Boolean} + */ + this.result = false; + } + IntersectResult.prototype.setTo = /** + * + * @method setTo + * @param {Number} x1 + * @param {Number} y1 + * @param {Number} [x2] + * @param {Number} [y2] + * @param {Number} [width] + * @param {Number} [height] + */ + 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 = {})); +/// +/// +/// +/** +* Phaser - Mat3Utils +* +* A collection of methods useful for manipulating and performing operations on Mat3 objects. +* +*/ +var Phaser; +(function (Phaser) { + var Mat3Utils = (function () { + function Mat3Utils() { } + Mat3Utils.transpose = /** + * Transpose the values of a Mat3 + **/ + function transpose(source, dest) { + if (typeof dest === "undefined") { dest = null; } + if(dest === null) { + // Transpose ourselves + var a01 = source.data[1]; + var a02 = source.data[2]; + var a12 = source.data[5]; + source.data[1] = source.data[3]; + source.data[2] = source.data[6]; + source.data[3] = a01; + source.data[5] = source.data[7]; + source.data[6] = a02; + source.data[7] = a12; + } else { + source.data[0] = dest.data[0]; + source.data[1] = dest.data[3]; + source.data[2] = dest.data[6]; + source.data[3] = dest.data[1]; + source.data[4] = dest.data[4]; + source.data[5] = dest.data[7]; + source.data[6] = dest.data[2]; + source.data[7] = dest.data[5]; + source.data[8] = dest.data[8]; + } + return source; + }; + Mat3Utils.invert = /** + * Inverts a Mat3 + **/ + function invert(source) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + var b01 = a22 * a11 - a12 * a21; + var b11 = -a22 * a10 + a12 * a20; + var b21 = a21 * a10 - a11 * a20; + // Determinant + var det = a00 * b01 + a01 * b11 + a02 * b21; + if(!det) { + return null; + } + det = 1.0 / det; + source.data[0] = b01 * det; + source.data[1] = (-a22 * a01 + a02 * a21) * det; + source.data[2] = (a12 * a01 - a02 * a11) * det; + source.data[3] = b11 * det; + source.data[4] = (a22 * a00 - a02 * a20) * det; + source.data[5] = (-a12 * a00 + a02 * a10) * det; + source.data[6] = b21 * det; + source.data[7] = (-a21 * a00 + a01 * a20) * det; + source.data[8] = (a11 * a00 - a01 * a10) * det; + return source; + }; + Mat3Utils.adjoint = /** + * Calculates the adjugate of a Mat3 + **/ + function adjoint(source) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + source.data[0] = (a11 * a22 - a12 * a21); + source.data[1] = (a02 * a21 - a01 * a22); + source.data[2] = (a01 * a12 - a02 * a11); + source.data[3] = (a12 * a20 - a10 * a22); + source.data[4] = (a00 * a22 - a02 * a20); + source.data[5] = (a02 * a10 - a00 * a12); + source.data[6] = (a10 * a21 - a11 * a20); + source.data[7] = (a01 * a20 - a00 * a21); + source.data[8] = (a00 * a11 - a01 * a10); + return source; + }; + Mat3Utils.determinant = /** + * Calculates the adjugate of a Mat3 + **/ + function determinant(source) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); + }; + Mat3Utils.multiply = /** + * Multiplies two Mat3s + **/ + function multiply(source, b) { + var a00 = source.data[0]; + var a01 = source.data[1]; + var a02 = source.data[2]; + var a10 = source.data[3]; + var a11 = source.data[4]; + var a12 = source.data[5]; + var a20 = source.data[6]; + var a21 = source.data[7]; + var a22 = source.data[8]; + var b00 = b.data[0]; + var b01 = b.data[1]; + var b02 = b.data[2]; + var b10 = b.data[3]; + var b11 = b.data[4]; + var b12 = b.data[5]; + var b20 = b.data[6]; + var b21 = b.data[7]; + var b22 = b.data[8]; + source.data[0] = b00 * a00 + b01 * a10 + b02 * a20; + source.data[1] = b00 * a01 + b01 * a11 + b02 * a21; + source.data[2] = b00 * a02 + b01 * a12 + b02 * a22; + source.data[3] = b10 * a00 + b11 * a10 + b12 * a20; + source.data[4] = b10 * a01 + b11 * a11 + b12 * a21; + source.data[5] = b10 * a02 + b11 * a12 + b12 * a22; + source.data[6] = b20 * a00 + b21 * a10 + b22 * a20; + source.data[7] = b20 * a01 + b21 * a11 + b22 * a21; + source.data[8] = b20 * a02 + b21 * a12 + b22 * a22; + return source; + }; + Mat3Utils.fromQuaternion = function fromQuaternion() { + }; + Mat3Utils.normalFromMat4 = function normalFromMat4() { + }; + return Mat3Utils; + })(); + Phaser.Mat3Utils = Mat3Utils; +})(Phaser || (Phaser = {})); +/// /// /// /// @@ -19563,161 +19877,6 @@ var Phaser; Phaser.CircleUtils = CircleUtils; })(Phaser || (Phaser = {})); /// -/// -/// -/** -* Phaser - Mat3Utils -* -* A collection of methods useful for manipulating and performing operations on Mat3 objects. -* -*/ -var Phaser; -(function (Phaser) { - var Mat3Utils = (function () { - function Mat3Utils() { } - Mat3Utils.transpose = /** - * Transpose the values of a Mat3 - **/ - function transpose(source, dest) { - if (typeof dest === "undefined") { dest = null; } - if(dest === null) { - // Transpose ourselves - var a01 = source.data[1]; - var a02 = source.data[2]; - var a12 = source.data[5]; - source.data[1] = source.data[3]; - source.data[2] = source.data[6]; - source.data[3] = a01; - source.data[5] = source.data[7]; - source.data[6] = a02; - source.data[7] = a12; - } else { - source.data[0] = dest.data[0]; - source.data[1] = dest.data[3]; - source.data[2] = dest.data[6]; - source.data[3] = dest.data[1]; - source.data[4] = dest.data[4]; - source.data[5] = dest.data[7]; - source.data[6] = dest.data[2]; - source.data[7] = dest.data[5]; - source.data[8] = dest.data[8]; - } - return source; - }; - Mat3Utils.invert = /** - * Inverts a Mat3 - **/ - function invert(source) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - var b01 = a22 * a11 - a12 * a21; - var b11 = -a22 * a10 + a12 * a20; - var b21 = a21 * a10 - a11 * a20; - // Determinant - var det = a00 * b01 + a01 * b11 + a02 * b21; - if(!det) { - return null; - } - det = 1.0 / det; - source.data[0] = b01 * det; - source.data[1] = (-a22 * a01 + a02 * a21) * det; - source.data[2] = (a12 * a01 - a02 * a11) * det; - source.data[3] = b11 * det; - source.data[4] = (a22 * a00 - a02 * a20) * det; - source.data[5] = (-a12 * a00 + a02 * a10) * det; - source.data[6] = b21 * det; - source.data[7] = (-a21 * a00 + a01 * a20) * det; - source.data[8] = (a11 * a00 - a01 * a10) * det; - return source; - }; - Mat3Utils.adjoint = /** - * Calculates the adjugate of a Mat3 - **/ - function adjoint(source) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - source.data[0] = (a11 * a22 - a12 * a21); - source.data[1] = (a02 * a21 - a01 * a22); - source.data[2] = (a01 * a12 - a02 * a11); - source.data[3] = (a12 * a20 - a10 * a22); - source.data[4] = (a00 * a22 - a02 * a20); - source.data[5] = (a02 * a10 - a00 * a12); - source.data[6] = (a10 * a21 - a11 * a20); - source.data[7] = (a01 * a20 - a00 * a21); - source.data[8] = (a00 * a11 - a01 * a10); - return source; - }; - Mat3Utils.determinant = /** - * Calculates the adjugate of a Mat3 - **/ - function determinant(source) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); - }; - Mat3Utils.multiply = /** - * Multiplies two Mat3s - **/ - function multiply(source, b) { - var a00 = source.data[0]; - var a01 = source.data[1]; - var a02 = source.data[2]; - var a10 = source.data[3]; - var a11 = source.data[4]; - var a12 = source.data[5]; - var a20 = source.data[6]; - var a21 = source.data[7]; - var a22 = source.data[8]; - var b00 = b.data[0]; - var b01 = b.data[1]; - var b02 = b.data[2]; - var b10 = b.data[3]; - var b11 = b.data[4]; - var b12 = b.data[5]; - var b20 = b.data[6]; - var b21 = b.data[7]; - var b22 = b.data[8]; - source.data[0] = b00 * a00 + b01 * a10 + b02 * a20; - source.data[1] = b00 * a01 + b01 * a11 + b02 * a21; - source.data[2] = b00 * a02 + b01 * a12 + b02 * a22; - source.data[3] = b10 * a00 + b11 * a10 + b12 * a20; - source.data[4] = b10 * a01 + b11 * a11 + b12 * a21; - source.data[5] = b10 * a02 + b11 * a12 + b12 * a22; - source.data[6] = b20 * a00 + b21 * a10 + b22 * a20; - source.data[7] = b20 * a01 + b21 * a11 + b22 * a21; - source.data[8] = b20 * a02 + b21 * a12 + b22 * a22; - return source; - }; - Mat3Utils.fromQuaternion = function fromQuaternion() { - }; - Mat3Utils.normalFromMat4 = function normalFromMat4() { - }; - return Mat3Utils; - })(); - Phaser.Mat3Utils = Mat3Utils; -})(Phaser || (Phaser = {})); -/// /// /// /// @@ -19745,126 +19904,3 @@ var Phaser; })(); Phaser.PixelUtils = PixelUtils; })(Phaser || (Phaser = {})); -/// -/** -* Phaser - IntersectResult -* -* A light-weight result object to hold the results of an intersection. For when you need more than just true/false. -*/ -var Phaser; -(function (Phaser) { - var IntersectResult = (function () { - function IntersectResult() { - /** - * Did they intersect or not? - * @property result - * @type {Boolean} - */ - this.result = false; - } - IntersectResult.prototype.setTo = /** - * - * @method setTo - * @param {Number} x1 - * @param {Number} y1 - * @param {Number} [x2] - * @param {Number} [y2] - * @param {Number} [width] - * @param {Number} [height] - */ - 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 = {})); -/// -/** -* Phaser - State -* -* This is a base State class which can be extended if you are creating your game using TypeScript. -*/ -var Phaser; -(function (Phaser) { - var State = (function () { - /** - * State constructor - * Create a new State. - */ - function State(game) { - this.game = game; - this.add = game.add; - this.camera = game.camera; - this.cache = game.cache; - this.input = game.input; - this.load = game.load; - 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 = // Override these in your own States - /** - * Override this method to add some load operations. - * If you need to use the loader, you may need to use them here. - */ - function () { - }; - State.prototype.create = /** - * This method is called after the game engine successfully switches states. - * Feel free to add any setup code here.(Do not load anything here, override init() instead) - */ - function () { - }; - State.prototype.update = /** - * Put update logic here. - */ - function () { - }; - State.prototype.render = /** - * Put render operations here. - */ - function () { - }; - State.prototype.paused = /** - * This method will be called when game paused. - */ - function () { - }; - State.prototype.destroy = /** - * This method will be called when the state is destroyed - */ - function () { - }; - return State; - })(); - Phaser.State = State; - /** - * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. - * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. - * @param object1 The first GameObject or Group to check. If null the world.group is used. - * @param object2 The second GameObject or Group to check. - * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. - * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. - * @param context The context in which the callbacks will be called - * @returns {boolean} true if the objects overlap, otherwise false. - */ - //public collide(objectOrGroup1 = null, objectOrGroup2 = null, notifyCallback = null, context? = this.game.callbackContext): bool { - // return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Collision.separate, context); - //} - })(Phaser || (Phaser = {}));