// Try to import matter-js as a commonJS module
var Matter;
if(typeof window === "object") {
Matter = window.Matter;
}
else {
Matter = require("matter-js");
}
const PhSim = require("../index");
const Motion = require("../motion");
/**
* Create circular constraint
*
* @function
* @param {PhSim.DynObject} dynObject
* @param {Number} [x] - x position of vector.
* @param {Number} [y] - y position of vector.
*/
PhSim.prototype.createCircularConstraint = function(dynObject,x,y) {
x = x || dynObject.matter.position.x;
y = y || dynObject.matter.position.y;
var c = Matter.Constraint.create({
"bodyA": dynObject.matter,
"pointB": {
"x": x,
"y": y
}
});
Matter.World.add(this.matterJSWorld,c)
var relAngle = Math.atan2(y - dynObject.matter.position.y,x - dynObject.matter.position.x);
this.on("afterupdate",function(){
var newAngle = Math.atan2(y - dynObject.matter.position.y,x - dynObject.matter.position.x) - relAngle;
Motion.setAngle(dynObject,newAngle);
});
dynObject.circularConstraintVector = {
"x": x,
"y": y
}
}
/**
*
* The `circularConstraint` widget creates circular constraints.
*
* A circular constraint is a special kind of constraint that is made up of an
* object `dyn_object` and a point `(x,y)` in space.
*
* The object rotates around the centroid of `dyn_object` as it rotates around the
* point `(x,y)`.
*
* @function
* @param {PhSim.DynObject} dyn_object
* @param {Object} widget - Circular Constraint options
* @param {Number} widget.x - x-coordinate of the other end of the constraint
* @param {Number} widget.y - y-coordinate of the other end of the constraint
*/
PhSim.Widgets.circularConstraint = function(dyn_object,widget) {
this.createCircularConstraint(dyn_object,widget.x,widget.y);
}