Skip to content

Commit b062e20

Browse files
committed
Added new Collider class. Allows you to create automatic collide and overlap checks and callbacks without needing an 'update' function in your Scene.
1 parent 0ee9339 commit b062e20

3 files changed

Lines changed: 83 additions & 0 deletions

File tree

v3/src/physics/arcade/Collider.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Phaser.Physics.Arcade.Collider
2+
3+
var Class = require('../../utils/Class');
4+
5+
var Collider = new Class({
6+
7+
initialize:
8+
9+
function Collider (world, overlapOnly, object1, object2, collideCallback, processCallback, callbackContext)
10+
{
11+
this.world = world;
12+
13+
this.overlapOnly = overlapOnly;
14+
15+
this.object1 = object1;
16+
this.object2 = object2;
17+
18+
this.collideCallback = collideCallback;
19+
this.processCallback = processCallback;
20+
this.callbackContext = callbackContext;
21+
},
22+
23+
update: function ()
24+
{
25+
this.world.collideObjects(
26+
this.object1,
27+
this.object2,
28+
this.collideCallback,
29+
this.processCallback,
30+
this.callbackContext,
31+
this.overlapOnly
32+
);
33+
}
34+
35+
});
36+
37+
module.exports = Collider;

v3/src/physics/arcade/Factory.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ var Factory = new Class({
1818
this.sys = world.scene.sys;
1919
},
2020

21+
collider: function (object1, object2, collideCallback, processCallback, callbackContext)
22+
{
23+
return this.world.addCollider(object1, object2, collideCallback, processCallback, callbackContext);
24+
},
25+
26+
overlap: function (object1, object2, collideCallback, processCallback, callbackContext)
27+
{
28+
return this.world.addOverlap(object1, object2, collideCallback, processCallback, callbackContext);
29+
},
30+
2131
staticImage: function (x, y, key, frame)
2232
{
2333
var image = new ArcadeImage(this.scene, x, y, key, frame);

v3/src/physics/arcade/World.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var Body = require('./Body');
44
var Class = require('../../utils/Class');
5+
var Collider = require('./Collider');
56
var CONST = require('./const');
67
var GetValue = require('../../utils/object/GetValue');
78
var Rectangle = require('../../geom/rectangle/Rectangle');
@@ -26,6 +27,8 @@ var World = new Class({
2627
// Static Bodies
2728
this.staticBodies = new Set();
2829

30+
this.colliders = [];
31+
2932
this.gravity = new Vector2(GetValue(config, 'gravity.x', 0), GetValue(config, 'gravity.y', 0));
3033

3134
this.bounds = new Rectangle(
@@ -220,6 +223,32 @@ var World = new Class({
220223
return this;
221224
},
222225

226+
addCollider: function (object1, object2, collideCallback, processCallback, callbackContext)
227+
{
228+
if (collideCallback === undefined) { collideCallback = null; }
229+
if (processCallback === undefined) { processCallback = null; }
230+
if (callbackContext === undefined) { callbackContext = collideCallback; }
231+
232+
var collider = new Collider(this, false, object1, object2, collideCallback, processCallback, callbackContext);
233+
234+
this.colliders.push(collider);
235+
236+
return collider;
237+
},
238+
239+
addOverlap: function (object1, object2, collideCallback, processCallback, callbackContext)
240+
{
241+
if (collideCallback === undefined) { collideCallback = null; }
242+
if (processCallback === undefined) { processCallback = null; }
243+
if (callbackContext === undefined) { callbackContext = collideCallback; }
244+
245+
var collider = new Collider(this, true, object1, object2, collideCallback, processCallback, callbackContext);
246+
247+
this.colliders.push(collider);
248+
249+
return collider;
250+
},
251+
223252
update: function (time, delta)
224253
{
225254
if (this.isPaused || this.bodies.size === 0)
@@ -252,6 +281,13 @@ var World = new Class({
252281
// Populate our dynamic collision tree
253282
this.tree.clear();
254283
this.tree.load(bodies);
284+
285+
// Process any colliders
286+
287+
for (i = 0; i < this.colliders.length; i++)
288+
{
289+
this.colliders[i].update();
290+
}
255291
},
256292

257293
postUpdate: function ()

0 commit comments

Comments
 (0)