mirror of
https://github.com/liabru/matter-js.git
synced 2024-12-25 13:39:06 -05:00
added Body.setVertices and Vector.clone
This commit is contained in:
parent
e3e462e64c
commit
b6dbb259ab
2 changed files with 43 additions and 0 deletions
|
@ -134,6 +134,39 @@ var Body = {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the body's vertices and updates body properties accordingly, including inertia, area and mass (with respect to `body.density`).
|
||||||
|
* Vertices will be automatically transformed to be orientated around their centre of mass as the origin.
|
||||||
|
* They are then automatically translated to world space based on `body.position`.
|
||||||
|
*
|
||||||
|
* The `vertices` argument should be passed as an array of `Matter.Vector` points (or a `Matter.Vertices` array).
|
||||||
|
* Vertices must form a convex hull, concave hulls are not supported.
|
||||||
|
*
|
||||||
|
* @method setVertices
|
||||||
|
* @param {body} body
|
||||||
|
* @param {vector[]} vertices
|
||||||
|
*/
|
||||||
|
Body.setVertices = function(body, vertices) {
|
||||||
|
// change vertices
|
||||||
|
body.vertices = Vertices.create(vertices, body);
|
||||||
|
|
||||||
|
// update properties
|
||||||
|
body.axes = Axes.fromVertices(body.vertices);
|
||||||
|
body.area = Vertices.area(body.vertices);
|
||||||
|
body.mass = body.density * body.area;
|
||||||
|
body.inverseMass = 1 / body.mass;
|
||||||
|
body.inertia = Vertices.inertia(body.vertices, body.mass);
|
||||||
|
body.inverseInertia = 1 / body.inertia;
|
||||||
|
|
||||||
|
// update geometry
|
||||||
|
var centre = Vertices.centre(body.vertices);
|
||||||
|
Vertices.translate(body.vertices, centre, -1);
|
||||||
|
Vertices.translate(body.vertices, body.position);
|
||||||
|
Vertices.rotate(body.vertices, body.angle, body.position);
|
||||||
|
Axes.rotate(body.axes, body.angle);
|
||||||
|
Bounds.update(body.bounds, body.vertices, body.velocity);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zeroes the `body.force` and `body.torque` force buffers.
|
* Zeroes the `body.force` and `body.torque` force buffers.
|
||||||
* @method resetForcesAll
|
* @method resetForcesAll
|
||||||
|
|
|
@ -15,6 +15,16 @@ var Vector = {};
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new vector with `x` and `y` copied from the given `vector`.
|
||||||
|
* @method clone
|
||||||
|
* @param {vector} vector
|
||||||
|
* @return {vector} A new cloned vector
|
||||||
|
*/
|
||||||
|
Vector.clone = function(vector) {
|
||||||
|
return { x: vector.x, y: vector.y };
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the magnitude (length) of a vector.
|
* Returns the magnitude (length) of a vector.
|
||||||
* @method magnitude
|
* @method magnitude
|
||||||
|
|
Loading…
Reference in a new issue