File: src/collision/NaiveBroadphase.js
- module.exports = NaiveBroadphase;
-
- var Broadphase = require('./Broadphase');
- var AABB = require('./AABB');
-
- /**
- * Naive broadphase implementation, used in lack of better ones.
- * @class NaiveBroadphase
- * @constructor
- * @description The naive broadphase looks at all possible pairs without restriction, therefore it has complexity N^2 (which is bad)
- * @extends Broadphase
- */
- function NaiveBroadphase(){
- Broadphase.apply(this);
- }
- NaiveBroadphase.prototype = new Broadphase();
- NaiveBroadphase.prototype.constructor = NaiveBroadphase;
-
- /**
- * Get all the collision pairs in the physics world
- * @method collisionPairs
- * @param {World} world
- * @param {Array} pairs1
- * @param {Array} pairs2
- */
- NaiveBroadphase.prototype.collisionPairs = function(world,pairs1,pairs2){
- var bodies = world.bodies,
- n = bodies.length,
- i,j,bi,bj;
-
- // Naive N^2 ftw!
- for(i=0; i!==n; i++){
- for(j=0; j!==i; j++){
-
- bi = bodies[i];
- bj = bodies[j];
-
- if(!this.needBroadphaseCollision(bi,bj)){
- continue;
- }
-
- this.intersectionTest(bi,bj,pairs1,pairs2);
- }
- }
- };
-
- var tmpAABB = new AABB();
-
- /**
- * Returns all the bodies within an AABB.
- * @method aabbQuery
- * @param {World} world
- * @param {AABB} aabb
- * @param {array} result An array to store resulting bodies in.
- * @return {array}
- */
- NaiveBroadphase.prototype.aabbQuery = function(world, aabb, result){
- result = result || [];
-
- for(var i = 0; i < world.bodies.length; i++){
- var b = world.bodies[i];
-
- if(b.aabbNeedsUpdate){
- b.computeAABB();
- }
-
- // Ugly hack until Body gets aabb
- if(b.aabb.overlaps(aabb)){
- result.push(b);
- }
- }
-
- return result;
- };
-