File: src/constraints/Constraint.js
module.exports = Constraint;
var Utils = require('../utils/Utils');
/**
* Constraint base class
* @class Constraint
* @author schteppe
* @constructor
* @param {Body} bodyA
* @param {Body} bodyB
* @param {object} [options]
* @param {boolean} [options.collideConnected=true]
* @param {boolean} [options.wakeUpBodies=true]
*/
function Constraint(bodyA, bodyB, options){
options = Utils.defaults(options,{
collideConnected : true,
wakeUpBodies : true,
});
/**
* Equations to be solved in this constraint
* @property equations
* @type {Array}
*/
this.equations = [];
/**
* @property {Body} bodyA
*/
this.bodyA = bodyA;
/**
* @property {Body} bodyB
*/
this.bodyB = bodyB;
/**
* @property {Number} id
*/
this.id = Constraint.idCounter++;
/**
* Set to true if you want the bodies to collide when they are connected.
* @property collideConnected
* @type {boolean}
*/
this.collideConnected = options.collideConnected;
if(options.wakeUpBodies){
if(bodyA){
bodyA.wakeUp();
}
if(bodyB){
bodyB.wakeUp();
}
}
}
/**
* Update all the equations with data.
* @method update
*/
Constraint.prototype.update = function(){
throw new Error("method update() not implmemented in this Constraint subclass!");
};
/**
* Enables all equations in the constraint.
* @method enable
*/
Constraint.prototype.enable = function(){
var eqs = this.equations;
for(var i=0; i<eqs.length; i++){
eqs[i].enabled = true;
}
};
/**
* Disables all equations in the constraint.
* @method disable
*/
Constraint.prototype.disable = function(){
var eqs = this.equations;
for(var i=0; i<eqs.length; i++){
eqs[i].enabled = false;
}
};
Constraint.idCounter = 0;