mirror of
https://github.com/liabru/matter-js.git
synced 2025-01-13 16:18:50 -05:00
removed collision.supportCorrected instead using bodyB.position, added render.options.showSeparations
This commit is contained in:
parent
9d3755ab6e
commit
2b6a8d38af
3 changed files with 68 additions and 35 deletions
|
@ -24,13 +24,12 @@ var Resolver = {};
|
||||||
collision,
|
collision,
|
||||||
bodyA,
|
bodyA,
|
||||||
bodyB,
|
bodyB,
|
||||||
vertex,
|
|
||||||
vertexCorrected,
|
|
||||||
normal,
|
normal,
|
||||||
bodyBtoA,
|
bodyBtoA,
|
||||||
tempA = Vector._temp[0],
|
tempA = Vector._temp[0],
|
||||||
tempB = Vector._temp[1],
|
tempB = Vector._temp[1],
|
||||||
tempC = Vector._temp[2];
|
tempC = Vector._temp[2],
|
||||||
|
tempD = Vector._temp[3];
|
||||||
|
|
||||||
// find impulses required to resolve penetration
|
// find impulses required to resolve penetration
|
||||||
for (i = 0; i < pairs.length; i++) {
|
for (i = 0; i < pairs.length; i++) {
|
||||||
|
@ -42,14 +41,12 @@ var Resolver = {};
|
||||||
collision = pair.collision;
|
collision = pair.collision;
|
||||||
bodyA = collision.parentA;
|
bodyA = collision.parentA;
|
||||||
bodyB = collision.parentB;
|
bodyB = collision.parentB;
|
||||||
vertex = collision.supports[0];
|
|
||||||
vertexCorrected = collision.supportCorrected;
|
|
||||||
normal = collision.normal;
|
normal = collision.normal;
|
||||||
|
|
||||||
|
|
||||||
// get current separation between body edges involved in collision
|
// get current separation between body edges involved in collision
|
||||||
bodyBtoA = Vector.sub(Vector.add(bodyB.positionImpulse, vertex, tempA),
|
bodyBtoA = Vector.sub(Vector.add(bodyB.positionImpulse, bodyB.position, tempA),
|
||||||
Vector.add(bodyA.positionImpulse, vertexCorrected, tempB), tempC);
|
Vector.add(bodyA.positionImpulse,
|
||||||
|
Vector.sub(bodyB.position, collision.penetration, tempB), tempC), tempD);
|
||||||
|
|
||||||
pair.separation = Vector.dot(normal, bodyBtoA);
|
pair.separation = Vector.dot(normal, bodyBtoA);
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,6 @@ var SAT = {};
|
||||||
supports = [verticesB[0]];
|
supports = [verticesB[0]];
|
||||||
|
|
||||||
collision.supports = supports;
|
collision.supports = supports;
|
||||||
collision.supportCorrected = Vector.sub(supports[0], collision.penetration);
|
|
||||||
|
|
||||||
return collision;
|
return collision;
|
||||||
};
|
};
|
||||||
|
|
|
@ -42,6 +42,7 @@ var Render = {};
|
||||||
showBounds: false,
|
showBounds: false,
|
||||||
showVelocity: false,
|
showVelocity: false,
|
||||||
showCollisions: false,
|
showCollisions: false,
|
||||||
|
showSeparations: false,
|
||||||
showAxes: false,
|
showAxes: false,
|
||||||
showPositions: false,
|
showPositions: false,
|
||||||
showAngleIndicator: false,
|
showAngleIndicator: false,
|
||||||
|
@ -202,6 +203,9 @@ var Render = {};
|
||||||
if (options.showIds)
|
if (options.showIds)
|
||||||
Render.bodyIds(engine, bodies, context);
|
Render.bodyIds(engine, bodies, context);
|
||||||
|
|
||||||
|
if (options.showSeparations)
|
||||||
|
Render.separations(engine, engine.pairs.list, context);
|
||||||
|
|
||||||
if (options.showCollisions)
|
if (options.showCollisions)
|
||||||
Render.collisions(engine, engine.pairs.list, context);
|
Render.collisions(engine, engine.pairs.list, context);
|
||||||
|
|
||||||
|
@ -782,6 +786,8 @@ var Render = {};
|
||||||
pair,
|
pair,
|
||||||
collision,
|
collision,
|
||||||
corrected,
|
corrected,
|
||||||
|
bodyA,
|
||||||
|
bodyB,
|
||||||
i,
|
i,
|
||||||
j;
|
j;
|
||||||
|
|
||||||
|
@ -809,32 +815,6 @@ var Render = {};
|
||||||
}
|
}
|
||||||
c.fill();
|
c.fill();
|
||||||
|
|
||||||
c.beginPath();
|
|
||||||
|
|
||||||
// render corrected positions
|
|
||||||
for (i = 0; i < pairs.length; i++) {
|
|
||||||
pair = pairs[i];
|
|
||||||
|
|
||||||
if (!pair.isActive)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
collision = pair.collision;
|
|
||||||
corrected = collision.supportCorrected;
|
|
||||||
|
|
||||||
if (collision.bodyB === collision.supports[0].body) {
|
|
||||||
c.rect(collision.supportCorrected.x - 1.5, collision.supportCorrected.y - 1.5, 3.5, 3.5);
|
|
||||||
} else {
|
|
||||||
c.rect(collision.supportCorrected.x - 1.5 + (2 * collision.penetration.x), collision.supportCorrected.y - 1.5 + (2 * collision.penetration.y), 3.5, 3.5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.wireframes) {
|
|
||||||
c.strokeStyle = 'rgba(255,165,0,0.7)';
|
|
||||||
} else {
|
|
||||||
c.strokeStyle = 'orange';
|
|
||||||
}
|
|
||||||
c.stroke();
|
|
||||||
|
|
||||||
c.beginPath();
|
c.beginPath();
|
||||||
|
|
||||||
// render collision normals
|
// render collision normals
|
||||||
|
@ -875,6 +855,63 @@ var Render = {};
|
||||||
c.stroke();
|
c.stroke();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description
|
||||||
|
* @private
|
||||||
|
* @method separations
|
||||||
|
* @param {engine} engine
|
||||||
|
* @param {pair[]} pairs
|
||||||
|
* @param {RenderingContext} context
|
||||||
|
*/
|
||||||
|
Render.separations = function(engine, pairs, context) {
|
||||||
|
var c = context,
|
||||||
|
options = engine.render.options,
|
||||||
|
pair,
|
||||||
|
collision,
|
||||||
|
corrected,
|
||||||
|
bodyA,
|
||||||
|
bodyB,
|
||||||
|
i,
|
||||||
|
j;
|
||||||
|
|
||||||
|
c.beginPath();
|
||||||
|
|
||||||
|
// render separations
|
||||||
|
for (i = 0; i < pairs.length; i++) {
|
||||||
|
pair = pairs[i];
|
||||||
|
|
||||||
|
if (!pair.isActive)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
collision = pair.collision;
|
||||||
|
bodyA = collision.bodyA;
|
||||||
|
bodyB = collision.bodyB;
|
||||||
|
|
||||||
|
var k = 1;
|
||||||
|
|
||||||
|
if (!bodyB.isStatic && !bodyA.isStatic) k = 0.5;
|
||||||
|
if (bodyB.isStatic) k = 0;
|
||||||
|
|
||||||
|
c.moveTo(bodyB.position.x, bodyB.position.y);
|
||||||
|
c.lineTo(bodyB.position.x - collision.penetration.x * k, bodyB.position.y - collision.penetration.y * k);
|
||||||
|
|
||||||
|
k = 1;
|
||||||
|
|
||||||
|
if (!bodyB.isStatic && !bodyA.isStatic) k = 0.5;
|
||||||
|
if (bodyA.isStatic) k = 0;
|
||||||
|
|
||||||
|
c.moveTo(bodyA.position.x, bodyA.position.y);
|
||||||
|
c.lineTo(bodyA.position.x + collision.penetration.x * k, bodyA.position.y + collision.penetration.y * k);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.wireframes) {
|
||||||
|
c.strokeStyle = 'rgba(255,165,0,0.5)';
|
||||||
|
} else {
|
||||||
|
c.strokeStyle = 'orange';
|
||||||
|
}
|
||||||
|
c.stroke();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description
|
* Description
|
||||||
* @private
|
* @private
|
||||||
|
|
Loading…
Reference in a new issue