@@ -12,8 +12,6 @@ var Pair = require('./Pair');
1212var Common = require ( '../core/Common' ) ;
1313
1414( function ( ) {
15-
16- Pairs . _pairMaxIdleLife = 1000 ;
1715
1816 /**
1917 * Creates a new pairs structure.
@@ -40,11 +38,14 @@ var Common = require('../core/Common');
4038 */
4139 Pairs . update = function ( pairs , collisions , timestamp ) {
4240 var pairsList = pairs . list ,
41+ pairsListLength = pairsList . length ,
4342 pairsTable = pairs . table ,
43+ collisionsLength = collisions . length ,
4444 collisionStart = pairs . collisionStart ,
4545 collisionEnd = pairs . collisionEnd ,
4646 collisionActive = pairs . collisionActive ,
4747 collision ,
48+ pairIndex ,
4849 pairId ,
4950 pair ,
5051 i ;
@@ -54,91 +55,62 @@ var Common = require('../core/Common');
5455 collisionEnd . length = 0 ;
5556 collisionActive . length = 0 ;
5657
57- for ( i = 0 ; i < pairsList . length ; i ++ ) {
58+ for ( i = 0 ; i < pairsListLength ; i ++ ) {
5859 pairsList [ i ] . confirmedActive = false ;
5960 }
6061
61- for ( i = 0 ; i < collisions . length ; i ++ ) {
62+ for ( i = 0 ; i < collisionsLength ; i ++ ) {
6263 collision = collisions [ i ] ;
63-
64- if ( collision . collided ) {
65- pairId = Pair . id ( collision . bodyA , collision . bodyB ) ;
66-
67- pair = pairsTable [ pairId ] ;
68-
69- if ( pair ) {
70- // pair already exists (but may or may not be active)
71- if ( pair . isActive ) {
72- // pair exists and is active
73- collisionActive . push ( pair ) ;
74- } else {
75- // pair exists but was inactive, so a collision has just started again
76- collisionStart . push ( pair ) ;
77- }
78-
79- // update the pair
80- Pair . update ( pair , collision , timestamp ) ;
81- pair . confirmedActive = true ;
64+ pairId = Pair . id ( collision . bodyA , collision . bodyB ) ;
65+ pair = pairsTable [ pairId ] ;
66+
67+ if ( pair ) {
68+ // pair already exists (but may or may not be active)
69+ if ( pair . isActive ) {
70+ // pair exists and is active
71+ collisionActive . push ( pair ) ;
8272 } else {
83- // pair did not exist, create a new pair
84- pair = Pair . create ( collision , timestamp ) ;
85- pairsTable [ pairId ] = pair ;
86-
87- // push the new pair
73+ // pair exists but was inactive, so a collision has just started again
8874 collisionStart . push ( pair ) ;
89- pairsList . push ( pair ) ;
9075 }
91- }
92- }
9376
94- // deactivate previously active pairs that are now inactive
95- for ( i = 0 ; i < pairsList . length ; i ++ ) {
96- pair = pairsList [ i ] ;
97- if ( pair . isActive && ! pair . confirmedActive ) {
98- Pair . setActive ( pair , false , timestamp ) ;
99- collisionEnd . push ( pair ) ;
77+ // update the pair
78+ Pair . update ( pair , collision , timestamp ) ;
79+ pair . confirmedActive = true ;
80+ } else {
81+ // pair did not exist, create a new pair
82+ pair = Pair . create ( collision , timestamp ) ;
83+ pairsTable [ pairId ] = pair ;
84+
85+ // push the new pair
86+ collisionStart . push ( pair ) ;
87+ pairsList . push ( pair ) ;
10088 }
10189 }
102- } ;
103-
104- /**
105- * Finds and removes pairs that have been inactive for a set amount of time.
106- * @method removeOld
107- * @param {object } pairs
108- * @param {number } timestamp
109- */
110- Pairs . removeOld = function ( pairs , timestamp ) {
111- var pairsList = pairs . list ,
112- pairsTable = pairs . table ,
113- indexesToRemove = [ ] ,
114- pairMaxIdleLife = Pairs . _pairMaxIdleLife ,
115- pair ,
116- collision ,
117- pairIndex ,
118- i ;
11990
120- for ( i = 0 ; i < pairsList . length ; i ++ ) {
91+ // find pairs that are no longer active
92+ var removePairIndex = [ ] ;
93+ pairsListLength = pairsList . length ;
94+
95+ for ( i = 0 ; i < pairsListLength ; i ++ ) {
12196 pair = pairsList [ i ] ;
122- collision = pair . collision ;
12397
124- // never remove sleeping pairs
125- if ( collision . bodyA . isSleeping || collision . bodyB . isSleeping ) {
126- pair . timeUpdated = timestamp ;
127- continue ;
128- }
98+ if ( ! pair . confirmedActive ) {
99+ Pair . setActive ( pair , false , timestamp ) ;
100+ collisionEnd . push ( pair ) ;
129101
130- // if pair is inactive for too long, mark it to be removed
131- if ( timestamp - pair . timeUpdated > pairMaxIdleLife ) {
132- indexesToRemove . push ( i ) ;
102+ if ( ! pair . collision . bodyA . isSleeping && ! pair . collision . bodyB . isSleeping ) {
103+ removePairIndex . push ( i ) ;
104+ }
133105 }
134106 }
135107
136- // remove marked pairs
137- for ( i = 0 ; i < indexesToRemove . length ; i ++ ) {
138- pairIndex = indexesToRemove [ i ] - i ;
108+ // remove inactive pairs
109+ for ( i = 0 ; i < removePairIndex . length ; i ++ ) {
110+ pairIndex = removePairIndex [ i ] - i ;
139111 pair = pairsList [ pairIndex ] ;
140- delete pairsTable [ pair . id ] ;
141112 pairsList . splice ( pairIndex , 1 ) ;
113+ delete pairsTable [ pair . id ] ;
142114 }
143115 } ;
144116
0 commit comments