#

API Docs for: 0.6.1
Show: Inherited Protected Private Deprecated

# File: src/constraints/LockConstraint.js

    module.exports = LockConstraint;

    var Constraint = require('./Constraint');
    var PointToPointConstraint = require('./PointToPointConstraint');
    var RotationalEquation = require('../equations/RotationalEquation');
    var RotationalMotorEquation = require('../equations/RotationalMotorEquation');
    var ContactEquation = require('../equations/ContactEquation');
    var Vec3 = require('../math/Vec3');

    /**
     * Lock constraint. Will remove all degrees of freedom between the bodies.
     * @class LockConstraint
     * @constructor
     * @author schteppe
     * @param {Body} bodyA
     * @param {Body} bodyB
     * @param {object} [options]
     * @param {Number} [options.maxForce=1e6]
     * @extends PointToPointConstraint
     */
    function LockConstraint(bodyA, bodyB, options){
        options = options || {};
        var maxForce = typeof(options.maxForce) !== 'undefined' ? options.maxForce : 1e6;

        // Set pivot point in between
        var pivotA = new Vec3();
        var pivotB = new Vec3();
        var halfWay = new Vec3();
        bodyA.position.vadd(bodyB.position, halfWay);
        halfWay.scale(0.5, halfWay);
        bodyB.pointToLocalFrame(halfWay, pivotB);
        bodyA.pointToLocalFrame(halfWay, pivotA);
        PointToPointConstraint.call(this, bodyA, pivotA, bodyB, pivotB, maxForce);

        /**
         * @property {RotationalEquation} rotationalEquation1
         */
        var r1 = this.rotationalEquation1 = new RotationalEquation(bodyA,bodyB,options);

        /**
         * @property {RotationalEquation} rotationalEquation2
         */
        var r2 = this.rotationalEquation2 = new RotationalEquation(bodyA,bodyB,options);

        /**
         * @property {RotationalEquation} rotationalEquation3
         */
        var r3 = this.rotationalEquation3 = new RotationalEquation(bodyA,bodyB,options);

        this.equations.push(r1, r2, r3);
    }
    LockConstraint.prototype = new PointToPointConstraint();
    LockConstraint.constructor = LockConstraint;

    var LockConstraint_update_tmpVec1 = new Vec3();
    var LockConstraint_update_tmpVec2 = new Vec3();

    LockConstraint.prototype.update = function(){
        var bodyA = this.bodyA,
            bodyB = this.bodyB,
            motor = this.motorEquation,
            r1 = this.rotationalEquation1,
            r2 = this.rotationalEquation2,
            r3 = this.rotationalEquation3,
            worldAxisA = LockConstraint_update_tmpVec1,
            worldAxisB = LockConstraint_update_tmpVec2;

        PointToPointConstraint.prototype.update.call(this);

        bodyA.vectorToWorldFrame(Vec3.UNIT_X, r1.axisA);
        bodyB.vectorToWorldFrame(Vec3.UNIT_Y, r1.axisB);

        bodyA.vectorToWorldFrame(Vec3.UNIT_Y, r2.axisA);
        bodyB.vectorToWorldFrame(Vec3.UNIT_Z, r2.axisB);

        bodyA.vectorToWorldFrame(Vec3.UNIT_Z, r3.axisA);
        bodyB.vectorToWorldFrame(Vec3.UNIT_X, r3.axisB);
    };