diff --git a/Gruntfile.js b/Gruntfile.js
index 42d62b78..17b86ec4 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -105,7 +105,6 @@ module.exports = function (grunt) {
'src/math/Math.js',
'src/math/RandomDataGenerator.js',
- 'src/math/QuadTree.js',
'src/net/Net.js',
diff --git a/README.md b/README.md
index e80a93e1..3ecb7eb0 100644
--- a/README.md
+++ b/README.md
@@ -89,6 +89,7 @@ Significant API changes:
* World preUpdate, update and postUpdate have all been moved to Stage. So all children are updated regardless where on the display list they live.
* Cache.getImageKeys and similar has been removed, please use Cache.getKeys(Phaser.Cache.IMAGE) instead, this now supports all 10 Cache data types.
* After defining tiles that collide on a Tilemap, you need to call Tilemap.generateCollisionData(layer) to populate the physics world with the data required.
+* Phaser.QuadTree has been removed from core and moved to a plugin. It's no longer required, nor works with the physics system.
New features:
diff --git a/build/config.php b/build/config.php
index fb00fa88..de9615d2 100644
--- a/build/config.php
+++ b/build/config.php
@@ -151,7 +151,6 @@
-
diff --git a/examples/wip/cannon.js b/examples/wip/cannon.js
index 0ed68d25..b2c5fac7 100644
--- a/examples/wip/cannon.js
+++ b/examples/wip/cannon.js
@@ -17,9 +17,6 @@ var angle = 0;
var fireRate = 100;
var nextFire = 0;
var cursors;
-// var PLAYER;
-// var BULLET;
-// var WORLD;
var boxes;
var playerGroup;
var bulletGroup;
@@ -44,31 +41,21 @@ function create() {
bulletGroup = game.physics.createCollisionGroup();
boxGroup = game.physics.createCollisionGroup();
- // cannon.body.data.shapes[0].collisionGroup = PLAYER.mask;
- // cannon.body.data.shapes[0].collisionMask = game.physics.WORLD.mask;
-
cannon.body.setCollisionGroup(playerGroup);
cannon.body.collides(boxGroup);
-
boxes = game.add.group();
- for (var i = 0; i < 10; i++)
+ for (var i = 0; i < 30; i++)
{
var box = boxes.create(game.rnd.integerInRange(100, 700), game.rnd.integerInRange(100, 500), 'box');
box.name = 'box' + i;
- box.scale.set(0.5);
- // box.scale.set(game.rnd.realInRange(0.2, 0.7));
+ box.scale.set(game.rnd.realInRange(0.2, 0.7));
box.physicsEnabled = true;
box.body.setCollisionGroup(boxGroup);
- box.body.collides(playerGroup);
- box.body.collides(bulletGroup);
- // box.body.mass = 10;
- // box.body.setMaterial(boxMaterial);
- // box.body.fixedRotation = true;
+ box.body.collides( [ playerGroup, bulletGroup, boxGroup ]);
}
-
cursors = game.input.keyboard.createCursorKeys();
}
@@ -87,7 +74,7 @@ function fire() {
bullet.exists = true;
bullet.position.set(cannon.x, cannon.y);
bullet.physicsEnabled = true;
-
+ bullet.body.collideWorldBounds = false;
bullet.body.rotation = cannon.rotation + game.math.degToRad(90);
var magnitude = game.math.px2p(-500);
@@ -98,9 +85,6 @@ function fire() {
bullet.body.setCollisionGroup(bulletGroup);
bullet.body.collides(boxGroup);
-
- // bullet.body.data.shapes[0].collisionGroup = BULLET;
- // bullet.body.data.shapes[0].collisionMask = WORLD | BULLET;
}
}
diff --git a/src/math/QuadTree.js b/plugins/QuadTree.js
similarity index 100%
rename from src/math/QuadTree.js
rename to plugins/QuadTree.js
diff --git a/src/physics/Body.js b/src/physics/Body.js
index 9e1faf87..19043272 100644
--- a/src/physics/Body.js
+++ b/src/physics/Body.js
@@ -90,6 +90,13 @@ Phaser.Physics.Body = function (game, sprite, x, y, mass) {
Phaser.Physics.Body.prototype = {
+ /**
+ * Sets the given CollisionGroup to be the collision group for all shapes in this Body, unless a shape is specified.
+ *
+ * @method Phaser.Physics.Body#setCollisionGroup
+ * @param {Phaser.Physics.CollisionGroup|array} group - The Collision Group that this Bodies shapes will use.
+ * @param {p2.Shape} [shape] - An optional Shape. If not provided the collision group will be added to all Shapes in this Body.
+ */
setCollisionGroup: function (group, shape) {
if (typeof shape === 'undefined')
@@ -107,19 +114,70 @@ Phaser.Physics.Body.prototype = {
},
/**
- * Adds the given CollisionGroup to the list of groups that this body will collide with and updates the collision mask.
+ * Clears the collision data from the shapes in this Body. Optionally clears Group and/or Mask.
+ *
+ * @method Phaser.Physics.Body#clearCollision
+ * @param {boolean} [clearGroup=true] - Clear the collisionGroup value from the shape/s?
+ * @param {boolean} [clearMask=true] - Clear the collisionMask value from the shape/s?
+ * @param {p2.Shape} [shape] - An optional Shape. If not provided the collision data will be cleared from all Shapes in this Body.
+ */
+ clearCollision: function (clearGroup, clearMask, shape) {
+
+ if (typeof shape === 'undefined')
+ {
+ for (var i = this.data.shapes.length - 1; i >= 0; i--)
+ {
+ if (clearGroup)
+ {
+ this.data.shapes[i].collisionGroup = null;
+ }
+
+ if (clearMask)
+ {
+ this.data.shapes[i].collisionMask = null;
+ }
+ }
+ }
+ else
+ {
+ if (clearGroup)
+ {
+ shapes.collisionGroup = null;
+ }
+
+ if (clearMask)
+ {
+ shapes.collisionMask = null;
+ }
+ }
+
+ },
+
+ /**
+ * Adds the given CollisionGroup, or array of CollisionGroups, to the list of groups that this body will collide with and updates the collision masks.
*
* @method Phaser.Physics.Body#collides
- * @param {Phaser.Physics.CollisionGroup} group - The Collision Group that this Bodies shapes will collide with.
+ * @param {Phaser.Physics.CollisionGroup|array} group - The Collision Group or Array of Collision Groups that this Bodies shapes will collide with.
* @param {p2.Shape} [shape] - An optional Shape. If not provided the collision mask will be added to all Shapes in this Body.
*/
collides: function (group, shape) {
- // TODO: group can be an array
-
- if (this.collidesWith.indexOf(group) === -1)
+ if (Array.isArray(group))
{
- this.collidesWith.push(group);
+ for (var i = 0; i < group.length; i++)
+ {
+ if (this.collidesWith.indexOf(group[i]) === -1)
+ {
+ this.collidesWith.push(group[i]);
+ }
+ }
+ }
+ else
+ {
+ if (this.collidesWith.indexOf(group) === -1)
+ {
+ this.collidesWith.push(group);
+ }
}
var mask = 0;
@@ -146,8 +204,6 @@ Phaser.Physics.Body.prototype = {
shape.collisionMask = mask;
}
- console.log('collides', this.sprite.name, group, mask);
-
},
/**