mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-27 09:50:52 -05:00
added composite meshing and soft body factory
This commit is contained in:
parent
b24408635a
commit
283281aeb7
1 changed files with 77 additions and 0 deletions
|
@ -95,6 +95,55 @@ var Composites = {};
|
||||||
|
|
||||||
return composite;
|
return composite;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects bodies in the composite with constraints in a grid pattern, with optional cross braces
|
||||||
|
* @method mesh
|
||||||
|
* @param {composite} composite
|
||||||
|
* @param {number} columns
|
||||||
|
* @param {number} rows
|
||||||
|
* @param {boolean} crossBrace
|
||||||
|
* @param {object} options
|
||||||
|
* @return {composite} The composite containing objects meshed together with constraints
|
||||||
|
*/
|
||||||
|
Composites.mesh = function(composite, columns, rows, crossBrace, options) {
|
||||||
|
var bodies = composite.bodies,
|
||||||
|
row,
|
||||||
|
col,
|
||||||
|
bodyA,
|
||||||
|
bodyB,
|
||||||
|
bodyC;
|
||||||
|
|
||||||
|
for (row = 0; row < rows; row++) {
|
||||||
|
for (col = 0; col < columns; col++) {
|
||||||
|
if (col > 0) {
|
||||||
|
bodyA = bodies[(col - 1) + (row * columns)];
|
||||||
|
bodyB = bodies[col + (row * columns)];
|
||||||
|
Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyA, bodyB: bodyB }, options)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (col = 0; col < columns; col++) {
|
||||||
|
if (row > 0) {
|
||||||
|
bodyA = bodies[col + ((row - 1) * columns)];
|
||||||
|
bodyB = bodies[col + (row * columns)];
|
||||||
|
Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyA, bodyB: bodyB }, options)));
|
||||||
|
|
||||||
|
if (crossBrace && col > 0) {
|
||||||
|
bodyC = bodies[(col - 1) + ((row - 1) * columns)];
|
||||||
|
Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyC, bodyB: bodyB }, options)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (crossBrace && col < columns - 1) {
|
||||||
|
bodyC = bodies[(col + 1) + ((row - 1) * columns)];
|
||||||
|
Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyC, bodyB: bodyB }, options)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return composite;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description
|
* Description
|
||||||
|
@ -219,4 +268,32 @@ var Composites = {};
|
||||||
return car;
|
return car;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a simple soft body like object
|
||||||
|
* @method softBody
|
||||||
|
* @param {number} xx
|
||||||
|
* @param {number} yy
|
||||||
|
* @param {number} columns
|
||||||
|
* @param {number} rows
|
||||||
|
* @param {number} columnGap
|
||||||
|
* @param {number} rowGap
|
||||||
|
* @param {boolean} crossBrace
|
||||||
|
* @param {number} particleRadius
|
||||||
|
* @param {} particleOptions
|
||||||
|
* @param {} constraintOptions
|
||||||
|
* @return {composite} A new composite softBody
|
||||||
|
*/
|
||||||
|
Composites.softBody = function(xx, yy, columns, rows, columnGap, rowGap, crossBrace, particleRadius, particleOptions, constraintOptions) {
|
||||||
|
particleOptions = Common.extend({ inertia: Infinity }, particleOptions);
|
||||||
|
constraintOptions = Common.extend({ stiffness: 0.4 }, constraintOptions);
|
||||||
|
|
||||||
|
var softBody = Composites.stack(xx, yy, columns, rows, columnGap, rowGap, function(x, y, column, row) {
|
||||||
|
return Bodies.circle(x, y, particleRadius, particleOptions);
|
||||||
|
});
|
||||||
|
|
||||||
|
Composites.mesh(softBody, columns, rows, crossBrace, constraintOptions);
|
||||||
|
|
||||||
|
return softBody;
|
||||||
|
};
|
||||||
|
|
||||||
})();
|
})();
|
Loading…
Reference in a new issue