File: src\classes\ContactManifoldList.js
/**
* List/Manager of ContactManifolds
*
* @Class ContactManifoldList
* @constructor
*/
Goblin.ContactManifoldList = function() {
/**
* The first ContactManifold in the list
*
* @property first
* @type {ContactManifold}
*/
this.first = null;
};
/**
* Inserts a ContactManifold into the list
*
* @method insert
* @param {ContactManifold} contact_manifold contact manifold to insert into the list
*/
Goblin.ContactManifoldList.prototype.insert = function( contact_manifold ) {
// The list is completely unordered, throw the manifold at the beginning
contact_manifold.next_manifold = this.first;
this.first = contact_manifold;
};
/**
* Returns (and possibly creates) a ContactManifold for the two rigid bodies
*
* @param {RigidBody} object_a
* @param {RigidBoxy} object_b
* @returns {ContactManifold}
*/
Goblin.ContactManifoldList.prototype.getManifoldForObjects = function( object_a, object_b ) {
var manifold = null;
if ( this.first !== null ) {
var current = this.first;
while ( current !== null ) {
if (
current.object_a === object_a && current.object_b === object_b ||
current.object_a === object_b && current.object_b === object_a
) {
manifold = current;
break;
}
current = current.next_manifold;
}
}
if ( manifold === null ) {
// A manifold for these two objects does not exist, create one
manifold = Goblin.ObjectPool.getObject( 'ContactManifold' );
manifold.object_a = object_a;
manifold.object_b = object_b;
this.insert( manifold );
}
return manifold;
};