mirror of
https://github.com/liabru/matter-js.git
synced 2024-12-26 13:49:01 -05:00
separated gravity function, applying forces now wakes sleeping bodies
This commit is contained in:
parent
88bd7bc29f
commit
6f5e0d0036
3 changed files with 29 additions and 9 deletions
|
@ -113,19 +113,30 @@ var Body = {};
|
|||
* Description
|
||||
* @method resetForcesAll
|
||||
* @param {body[]} bodies
|
||||
* @param {vector} gravity
|
||||
*/
|
||||
Body.resetForcesAll = function(bodies, gravity) {
|
||||
Body.resetForcesAll = function(bodies) {
|
||||
for (var i = 0; i < bodies.length; i++) {
|
||||
var body = bodies[i];
|
||||
|
||||
if (body.isStatic || body.isSleeping)
|
||||
continue;
|
||||
|
||||
// reset force buffers
|
||||
body.force.x = 0;
|
||||
body.force.y = 0;
|
||||
body.torque = 0;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Description
|
||||
* @method applyGravityAll
|
||||
* @param {body[]} bodies
|
||||
* @param {vector} gravity
|
||||
*/
|
||||
Body.applyGravityAll = function(bodies, gravity) {
|
||||
for (var i = 0; i < bodies.length; i++) {
|
||||
var body = bodies[i];
|
||||
|
||||
if (body.isStatic || body.isSleeping)
|
||||
continue;
|
||||
|
||||
// apply gravity
|
||||
body.force.y += body.mass * gravity.y * 0.001;
|
||||
|
|
|
@ -169,7 +169,13 @@ var Engine = {};
|
|||
|
||||
Metrics.reset(engine.metrics);
|
||||
|
||||
if (engine.enableSleeping)
|
||||
Sleeping.update(world.bodies);
|
||||
|
||||
Body.applyGravityAll(world.bodies, world.gravity);
|
||||
|
||||
MouseConstraint.update(engine.mouseConstraint, world.bodies, engine.input);
|
||||
|
||||
Body.updateAll(world.bodies, delta * engine.timeScale, correction, world.bounds);
|
||||
|
||||
// update all constraints
|
||||
|
@ -226,13 +232,10 @@ var Engine = {};
|
|||
}
|
||||
Resolver.postSolvePosition(world.bodies);
|
||||
|
||||
if (engine.enableSleeping)
|
||||
Sleeping.update(world.bodies);
|
||||
|
||||
Metrics.update(engine.metrics, engine);
|
||||
|
||||
// clear force buffers
|
||||
Body.resetForcesAll(world.bodies, world.gravity);
|
||||
Body.resetForcesAll(world.bodies);
|
||||
|
||||
return engine;
|
||||
};
|
||||
|
|
|
@ -23,6 +23,12 @@ var Sleeping = {};
|
|||
var body = bodies[i],
|
||||
motion = body.speed * body.speed + body.angularSpeed * body.angularSpeed;
|
||||
|
||||
// wake up bodies if they have a force applied
|
||||
if (body.force.x > 0 || body.force.y > 0) {
|
||||
Sleeping.set(body, false);
|
||||
continue;
|
||||
}
|
||||
|
||||
var minMotion = Math.min(body.motion, motion),
|
||||
maxMotion = Math.max(body.motion, motion);
|
||||
|
||||
|
|
Loading…
Reference in a new issue