Skip to content

Commit 075e030

Browse files
committed
Zero out fractional intersections
1 parent 17d4600 commit 075e030

1 file changed

Lines changed: 51 additions & 5 deletions

File tree

src/physics/arcade/CollisionInfo.js

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
var CONST = require('./const');
8+
var FuzzyEqual = require('../../math/fuzzy/Equal');
89
var IntersectsRect = require('./IntersectsRect');
910

1011
var CollisionInfo = {
@@ -39,7 +40,7 @@ var CollisionInfo = {
3940

4041
var leftFace = (distanceX1 > distanceX2 && prevDistanceX1 > prevDistanceX2);
4142
var topFace = (distanceY1 > distanceY2 && prevDistanceY1 > prevDistanceY2);
42-
43+
4344
var faceX = CONST.FACING_NONE;
4445
var faceY = CONST.FACING_NONE;
4546

@@ -181,15 +182,57 @@ var CollisionInfo = {
181182
}
182183
}
183184

184-
var face = (overlapX < overlapY) ? faceX : faceY;
185+
var forceX = (overlapX < overlapY);
186+
var face = (forceX) ? faceX : faceY;
187+
188+
if (forceX && FuzzyEqual(overlapX, 0))
189+
{
190+
// Difference is too small to warrant considering
191+
overlapX = 0;
192+
shareX1 = 0;
193+
shareX2 = 0;
194+
intersects = false;
195+
intersectsX = false;
196+
}
197+
198+
if (!forceX && FuzzyEqual(overlapY, 0))
199+
{
200+
// Difference is too small to warrant considering
201+
overlapY = 0;
202+
shareY1 = 0;
203+
shareY2 = 0;
204+
intersects = false;
205+
intersectsY = false;
206+
}
207+
208+
var dump = function ()
209+
{
210+
console.log('body1:', body1.gameObject.name, 'vs body2:', body2.gameObject.name);
211+
console.log('intersects?', intersects, 'xy', intersectsX, intersectsY, 'touching?', touching);
212+
213+
if (forceX)
214+
{
215+
console.log('body1 overlaps body2 on the ' + ((faceX === CONST.FACING_LEFT) ? 'left' : 'right') + ' face');
216+
}
217+
else
218+
{
219+
console.log('body1 overlaps body2 on the ' + ((faceY === CONST.FACING_UP) ? 'top' : 'bottom') + ' face');
220+
}
221+
222+
console.log('overlapX:', overlapX, 'overlayY:', overlapY);
223+
console.log('shareX1:', shareX1, 'shareX2:', shareX2);
224+
console.log('shareY1:', shareY1, 'shareY2:', shareY2);
225+
console.log('x compare (CI): ', body1.right, 'body2', body2.x, '=', (body1.right - body2.x));
226+
};
185227

186228
if (data)
187229
{
188-
data.intersects = (intersectsX || intersectsY);
230+
data.intersects = intersects;
189231
data.touching = touching;
190232
data.overlapOnly = overlapOnly;
191233
data.overlapX = overlapX;
192234
data.overlapY = overlapY;
235+
data.forceX = forceX;
193236
data.face = face;
194237
data.faceX = faceX;
195238
data.faceY = faceY;
@@ -198,6 +241,7 @@ var CollisionInfo = {
198241
data.shareX2 = shareX2;
199242
data.shareY1 = shareY1;
200243
data.shareY2 = shareY2;
244+
data.dump = dump;
201245

202246
return data;
203247
}
@@ -206,19 +250,21 @@ var CollisionInfo = {
206250
return {
207251
body1: body1,
208252
body2: body2,
209-
intersects: (intersectsX || intersectsY),
253+
intersects: intersects,
210254
touching: touching,
211255
overlapOnly: overlapOnly,
212256
overlapX: overlapX,
213257
overlapY: overlapY,
258+
forceX: forceX,
214259
face: face,
215260
faceX: faceX,
216261
faceY: faceY,
217262
set: false,
218263
shareX1: shareX1,
219264
shareX2: shareX2,
220265
shareY1: shareY1,
221-
shareY2: shareY2
266+
shareY2: shareY2,
267+
dump: dump
222268
};
223269
}
224270
},

0 commit comments

Comments
 (0)