mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-30 10:20:52 -05:00
composites now have generic multi add / remove methods
This commit is contained in:
parent
eecc29abbe
commit
3dfe9b553e
5 changed files with 122 additions and 1 deletions
|
@ -21,6 +21,7 @@ var Body = {};
|
||||||
Body.create = function(options) {
|
Body.create = function(options) {
|
||||||
var defaults = {
|
var defaults = {
|
||||||
id: Body.nextId(),
|
id: Body.nextId(),
|
||||||
|
type: 'body',
|
||||||
angle: 0,
|
angle: 0,
|
||||||
position: { x: 0, y: 0 },
|
position: { x: 0, y: 0 },
|
||||||
force: { x: 0, y: 0 },
|
force: { x: 0, y: 0 },
|
||||||
|
|
|
@ -22,6 +22,7 @@ var Composite = {};
|
||||||
Composite.create = function(options) {
|
Composite.create = function(options) {
|
||||||
return Common.extend({
|
return Common.extend({
|
||||||
id: Composite.nextId(),
|
id: Composite.nextId(),
|
||||||
|
type: 'composite',
|
||||||
parent: null,
|
parent: null,
|
||||||
isModified: false,
|
isModified: false,
|
||||||
bodies: [],
|
bodies: [],
|
||||||
|
@ -64,6 +65,70 @@ var Composite = {};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic add function. Adds one or many body(s), constraint(s) or a composite(s) to the given composite.
|
||||||
|
* @method add
|
||||||
|
* @param {composite} composite
|
||||||
|
* @param {} object
|
||||||
|
* @return {composite} The original composite with the objects added
|
||||||
|
*/
|
||||||
|
Composite.add = function(composite, object) {
|
||||||
|
var objects = [].concat(object);
|
||||||
|
|
||||||
|
for (var i = 0; i < objects.length; i++) {
|
||||||
|
var obj = objects[i];
|
||||||
|
|
||||||
|
switch (obj.type) {
|
||||||
|
|
||||||
|
case 'body':
|
||||||
|
Composite.addBody(composite, obj);
|
||||||
|
break;
|
||||||
|
case 'constraint':
|
||||||
|
Composite.addConstraint(composite, obj);
|
||||||
|
break;
|
||||||
|
case 'composite':
|
||||||
|
Composite.addComposite(composite, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return composite;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic remove function. Removes one or many body(s), constraint(s) or a composite(s) to the given composite.
|
||||||
|
* Optionally searching its children recursively.
|
||||||
|
* @method remove
|
||||||
|
* @param {composite} composite
|
||||||
|
* @param {} object
|
||||||
|
* @param {boolean} deep
|
||||||
|
* @return {composite} The original composite with the objects removed
|
||||||
|
*/
|
||||||
|
Composite.remove = function(composite, object, deep) {
|
||||||
|
var objects = [].concat(object);
|
||||||
|
|
||||||
|
for (var i = 0; i < objects.length; i++) {
|
||||||
|
var obj = objects[i];
|
||||||
|
|
||||||
|
switch (obj.type) {
|
||||||
|
|
||||||
|
case 'body':
|
||||||
|
Composite.removeBody(composite, obj, deep);
|
||||||
|
break;
|
||||||
|
case 'constraint':
|
||||||
|
Composite.removeConstraint(composite, obj, deep);
|
||||||
|
break;
|
||||||
|
case 'composite':
|
||||||
|
Composite.removeComposite(composite, obj, deep);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return composite;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description
|
* Description
|
||||||
* @method addComposite
|
* @method addComposite
|
||||||
|
@ -78,6 +143,43 @@ var Composite = {};
|
||||||
return compositeA;
|
return compositeA;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a composite from the given composite, and optionally searching its children recursively
|
||||||
|
* @method removeComposite
|
||||||
|
* @param {composite} compositeA
|
||||||
|
* @param {composite} compositeB
|
||||||
|
* @param {boolean} deep
|
||||||
|
* @return {composite} The original compositeA with the composite removed
|
||||||
|
*/
|
||||||
|
Composite.removeComposite = function(compositeA, compositeB, deep) {
|
||||||
|
var position = compositeA.composites.indexOf(compositeB);
|
||||||
|
if (position !== -1) {
|
||||||
|
Composite.removeCompositeAt(compositeA, position);
|
||||||
|
Composite.setModified(compositeA, true, true, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deep) {
|
||||||
|
for (var i = 0; i < compositeA.composites.length; i++){
|
||||||
|
Composite.removeComposite(compositeA.composites[i], compositeB, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return compositeA;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a composite from the given composite
|
||||||
|
* @method removeCompositeAt
|
||||||
|
* @param {composite} composite
|
||||||
|
* @param {number} position
|
||||||
|
* @return {composite} The original composite with the composite removed
|
||||||
|
*/
|
||||||
|
Composite.removeCompositeAt = function(composite, position) {
|
||||||
|
composite.composites.splice(position, 1);
|
||||||
|
Composite.setModified(composite, true, true, false);
|
||||||
|
return composite;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description
|
* Description
|
||||||
* @method addBody
|
* @method addBody
|
||||||
|
@ -235,4 +337,19 @@ var Composite = {};
|
||||||
return constraints;
|
return constraints;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all composites in the given composite, including all composites in its children, recursively
|
||||||
|
* @method allComposites
|
||||||
|
* @param {composite} composite
|
||||||
|
* @return {composite[]} All the composites
|
||||||
|
*/
|
||||||
|
Composite.allComposites = function(composite) {
|
||||||
|
var composites = [].concat(composite.composites);
|
||||||
|
|
||||||
|
for (var i = 0; i < composite.composites.length; i++)
|
||||||
|
composites = composites.concat(Composite.allComposites(composite.composites[i]));
|
||||||
|
|
||||||
|
return composites;
|
||||||
|
};
|
||||||
|
|
||||||
})();
|
})();
|
|
@ -53,6 +53,7 @@ var Constraint = {};
|
||||||
|
|
||||||
// option defaults
|
// option defaults
|
||||||
constraint.id = constraint.id || Constraint.nextId();
|
constraint.id = constraint.id || Constraint.nextId();
|
||||||
|
constraint.type = 'constraint';
|
||||||
constraint.stiffness = constraint.stiffness || 1;
|
constraint.stiffness = constraint.stiffness || 1;
|
||||||
constraint.angularStiffness = constraint.angularStiffness || 0;
|
constraint.angularStiffness = constraint.angularStiffness || 0;
|
||||||
constraint.angleA = constraint.bodyA ? constraint.bodyA.angle : constraint.angleA;
|
constraint.angleA = constraint.bodyA ? constraint.bodyA.angle : constraint.angleA;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
// aliases
|
// aliases
|
||||||
|
|
||||||
|
World.add = Composite.add;
|
||||||
|
World.remove = Composite.remove;
|
||||||
World.addComposite = Composite.addComposite;
|
World.addComposite = Composite.addComposite;
|
||||||
World.addBody = Composite.addBody;
|
World.addBody = Composite.addBody;
|
||||||
World.addConstraint = Composite.addConstraint;
|
World.addConstraint = Composite.addConstraint;
|
||||||
|
|
|
@ -57,7 +57,7 @@ var Gui = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
for (var i = 0; i < gui.amount; i++) {
|
for (var i = 0; i < gui.amount; i++) {
|
||||||
World.addBody(engine.world, Bodies.polygon(120 + i * gui.size + i * 50, 200, gui.sides, gui.size, options));
|
World.add(engine.world, Bodies.polygon(120 + i * gui.size + i * 50, 200, gui.sides, gui.size, options));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue