mirror of
https://github.com/liabru/matter-js.git
synced 2024-11-27 09:50:52 -05:00
improved performance by passing timestamps
This commit is contained in:
parent
ec06592fcd
commit
2b5eb92556
3 changed files with 26 additions and 23 deletions
|
@ -16,7 +16,7 @@ var Manager = {};
|
|||
* @param {object} pairs
|
||||
* @param {collision[]} collisions
|
||||
*/
|
||||
Manager.updatePairs = function(pairs, collisions) {
|
||||
Manager.updatePairs = function(pairs, collisions, timestamp) {
|
||||
var pairsList = pairs.list,
|
||||
pairsTable = pairs.table,
|
||||
collisionStart = pairs.collisionStart,
|
||||
|
@ -53,10 +53,10 @@ var Manager = {};
|
|||
}
|
||||
|
||||
// update the pair
|
||||
Pair.update(pair, collision);
|
||||
Pair.update(pair, collision, timestamp);
|
||||
} else {
|
||||
// pair did not exist, create a new pair
|
||||
pair = Pair.create(collision);
|
||||
pair = Pair.create(collision, timestamp);
|
||||
pairsTable[pairId] = pair;
|
||||
|
||||
// push the new pair
|
||||
|
@ -70,7 +70,7 @@ var Manager = {};
|
|||
for (i = 0; i < pairsList.length; i++) {
|
||||
pair = pairsList[i];
|
||||
if (pair.isActive && activePairIds.indexOf(pair.id) === -1) {
|
||||
Pair.setActive(pair, false);
|
||||
Pair.setActive(pair, false, timestamp);
|
||||
collisionEnd.push(pair);
|
||||
}
|
||||
}
|
||||
|
@ -81,10 +81,9 @@ var Manager = {};
|
|||
* @method removeOldPairs
|
||||
* @param {object} pairs
|
||||
*/
|
||||
Manager.removeOldPairs = function(pairs) {
|
||||
Manager.removeOldPairs = function(pairs, timestamp) {
|
||||
var pairsList = pairs.list,
|
||||
pairsTable = pairs.table,
|
||||
timeNow = Common.now(),
|
||||
indexesToRemove = [],
|
||||
pair,
|
||||
collision,
|
||||
|
@ -97,12 +96,12 @@ var Manager = {};
|
|||
|
||||
// never remove sleeping pairs
|
||||
if (collision.bodyA.isSleeping || collision.bodyB.isSleeping) {
|
||||
pair.timeUpdated = timeNow;
|
||||
pair.timeUpdated = timestamp;
|
||||
continue;
|
||||
}
|
||||
|
||||
// if pair is inactive for too long, mark it to be removed
|
||||
if (timeNow - pair.timeUpdated > _pairMaxIdleLife) {
|
||||
if (timestamp - pair.timeUpdated > _pairMaxIdleLife) {
|
||||
indexesToRemove.push(i);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,10 +14,9 @@ var Pair = {};
|
|||
* @param {collision} collision
|
||||
* @return {pair} A new pair
|
||||
*/
|
||||
Pair.create = function(collision) {
|
||||
Pair.create = function(collision, timestamp) {
|
||||
var bodyA = collision.bodyA,
|
||||
bodyB = collision.bodyB,
|
||||
timestamp = Common.now();
|
||||
bodyB = collision.bodyB;
|
||||
|
||||
var pair = {
|
||||
id: Pair.id(bodyA, bodyB),
|
||||
|
@ -35,7 +34,7 @@ var Pair = {};
|
|||
slop: Math.max(bodyA.slop, bodyB.slop)
|
||||
};
|
||||
|
||||
Pair.update(pair, collision);
|
||||
Pair.update(pair, collision, timestamp);
|
||||
|
||||
return pair;
|
||||
};
|
||||
|
@ -46,12 +45,13 @@ var Pair = {};
|
|||
* @param {pair} pair
|
||||
* @param {collision} collision
|
||||
*/
|
||||
Pair.update = function(pair, collision) {
|
||||
Pair.update = function(pair, collision, timestamp) {
|
||||
var contacts = pair.contacts,
|
||||
supports = collision.supports,
|
||||
activeContacts = [];
|
||||
activeContacts = pair.activeContacts;
|
||||
|
||||
pair.collision = collision;
|
||||
activeContacts.length = 0;
|
||||
|
||||
if (collision.collided) {
|
||||
for (var i = 0; i < supports.length; i++) {
|
||||
|
@ -65,11 +65,11 @@ var Pair = {};
|
|||
}
|
||||
}
|
||||
|
||||
pair.activeContacts = activeContacts;
|
||||
pair.separation = collision.depth;
|
||||
Pair.setActive(pair, true);
|
||||
Pair.setActive(pair, true, timestamp);
|
||||
} else {
|
||||
Pair.setActive(pair, false);
|
||||
if (pair.isActive === true)
|
||||
Pair.setActive(pair, false, timestamp);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -79,13 +79,13 @@ var Pair = {};
|
|||
* @param {pair} pair
|
||||
* @param {bool} isActive
|
||||
*/
|
||||
Pair.setActive = function(pair, isActive) {
|
||||
Pair.setActive = function(pair, isActive, timestamp) {
|
||||
if (isActive) {
|
||||
pair.isActive = true;
|
||||
pair.timeUpdated = Common.now();
|
||||
pair.timeUpdated = timestamp;
|
||||
} else {
|
||||
pair.isActive = false;
|
||||
pair.activeContacts = [];
|
||||
pair.activeContacts.length = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -106,6 +106,9 @@ var Engine = {};
|
|||
if (!engine.enabled)
|
||||
return;
|
||||
|
||||
// timestamp is undefined on the first update
|
||||
timestamp = timestamp || 0;
|
||||
|
||||
// create an event object
|
||||
var event = {
|
||||
timestamp: timestamp
|
||||
|
@ -264,9 +267,10 @@ var Engine = {};
|
|||
var collisions = broadphase.detector(broadphasePairs, engine.metrics);
|
||||
|
||||
// update pairs
|
||||
var pairs = engine.pairs;
|
||||
Manager.updatePairs(pairs, collisions);
|
||||
Manager.removeOldPairs(pairs);
|
||||
var pairs = engine.pairs,
|
||||
timestamp = engine.timing.timestamp;
|
||||
Manager.updatePairs(pairs, collisions, timestamp);
|
||||
Manager.removeOldPairs(pairs, timestamp);
|
||||
|
||||
// wake up bodies involved in collisions
|
||||
if (engine.enableSleeping)
|
||||
|
|
Loading…
Reference in a new issue