Skip to content

Commit 7630b8e

Browse files
committed
Testing new Separation logic (Y done, X in progress)
1 parent 2bcf1f7 commit 7630b8e

6 files changed

Lines changed: 484 additions & 256 deletions

File tree

src/physics/arcade/BlockCheckX.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
var BlockCheckX = function (body1, body2, overlap)
2+
{
3+
var v1 = body1.velocity.x;
4+
var v2 = body2.velocity.x;
5+
6+
var body1MovingUp = body1._dy < 0;
7+
var body1MovingDown = body1._dy > 0;
8+
9+
var body2MovingUp = body2._dy < 0;
10+
var body2MovingDown = body2._dy > 0;
11+
12+
var body1OnTop = Math.abs(body1.bottom - body2.x) <= Math.abs(body2.bottom - body1.x);
13+
var body2OnTop = !body1OnTop;
14+
15+
var body1FullImpact = v2 - v1 * body1.bounce.x;
16+
var body2FullImpact = v1 - v2 * body2.bounce.x;
17+
18+
// ------------------------------------------------------------------------------
19+
// Blocked Checks - Doesn't matter if they're pushable or not, blocked is blocked
20+
// ------------------------------------------------------------------------------
21+
22+
// Body1 is moving down and Body2 is blocked from going down any further
23+
if (body1MovingDown && body1OnTop && body2.blocked.down)
24+
{
25+
console.log('BlockX 1', body1.x, overlap);
26+
27+
body1.x -= overlap;
28+
body1.velocity.x = body1FullImpact;
29+
30+
return 1;
31+
}
32+
33+
// Body2 is moving down and Body1 is blocked from going down any further
34+
if (body2MovingDown && body2OnTop && body1.blocked.down)
35+
{
36+
console.log('BlockX 2', body2.x, overlap);
37+
38+
body2.x -= overlap;
39+
body2.velocity.x = body2FullImpact;
40+
41+
return 2;
42+
}
43+
44+
// Body1 is moving up and Body2 is blocked from going up any further
45+
if (body1MovingUp && body2OnTop && body2.blocked.up)
46+
{
47+
console.log('BlockX 3', body1.x, overlap);
48+
49+
body1.x += overlap;
50+
body1.velocity.x = body1FullImpact;
51+
52+
return 3;
53+
}
54+
55+
// Body2 is moving up and Body1 is blocked from going up any further
56+
if (body2MovingUp && body1OnTop && body1.blocked.up)
57+
{
58+
console.log('BlockX 4', body2.x, overlap);
59+
60+
body2.x += overlap;
61+
body2.velocity.x = body2FullImpact;
62+
63+
return 4;
64+
}
65+
66+
return 0;
67+
};
68+
69+
module.exports = BlockCheckX;

src/physics/arcade/BlockCheckY.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
var BlockCheckY = function (body1, body2, overlap)
2+
{
3+
var v1 = body1.velocity.y;
4+
var v2 = body2.velocity.y;
5+
6+
var body1MovingUp = body1._dy < 0;
7+
var body1MovingDown = body1._dy > 0;
8+
9+
var body2MovingUp = body2._dy < 0;
10+
var body2MovingDown = body2._dy > 0;
11+
12+
var body1OnTop = Math.abs(body1.bottom - body2.y) <= Math.abs(body2.bottom - body1.y);
13+
var body2OnTop = !body1OnTop;
14+
15+
var body1FullImpact = v2 - v1 * body1.bounce.y;
16+
var body2FullImpact = v1 - v2 * body2.bounce.y;
17+
18+
// ------------------------------------------------------------------------------
19+
// Blocked Checks - Doesn't matter if they're pushable or not, blocked is blocked
20+
// ------------------------------------------------------------------------------
21+
22+
// Body1 is moving down and Body2 is blocked from going down any further
23+
if (body1MovingDown && body1OnTop && body2.blocked.down)
24+
{
25+
console.log('BlockY 1', body1.y, overlap);
26+
27+
body1.y -= overlap;
28+
body1.velocity.y = body1FullImpact;
29+
30+
return 1;
31+
}
32+
33+
// Body2 is moving down and Body1 is blocked from going down any further
34+
if (body2MovingDown && body2OnTop && body1.blocked.down)
35+
{
36+
console.log('BlockY 2', body2.y, overlap);
37+
38+
body2.y -= overlap;
39+
body2.velocity.y = body2FullImpact;
40+
41+
return 2;
42+
}
43+
44+
// Body1 is moving up and Body2 is blocked from going up any further
45+
if (body1MovingUp && body2OnTop && body2.blocked.up)
46+
{
47+
console.log('BlockY 3', body1.y, overlap);
48+
49+
body1.y += overlap;
50+
body1.velocity.y = body1FullImpact;
51+
52+
return 3;
53+
}
54+
55+
// Body2 is moving up and Body1 is blocked from going up any further
56+
if (body2MovingUp && body1OnTop && body1.blocked.up)
57+
{
58+
console.log('BlockY 4', body2.y, overlap);
59+
60+
body2.y += overlap;
61+
body2.velocity.y = body2FullImpact;
62+
63+
return 4;
64+
}
65+
66+
return 0;
67+
};
68+
69+
module.exports = BlockCheckY;

src/physics/arcade/ProcessX.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
var body1Pushable;
2+
var body2Pushable;
3+
var body1MassImpact;
4+
var body2MassImpact;
5+
var body1FullImpact;
6+
var body2FullImpact;
7+
8+
var SetProcessX = function (b1Pushable, b2Pushable, b1MassImpact, b2MassImpact, b1FullImpact, b2FullImpact)
9+
{
10+
body1Pushable = b1Pushable;
11+
body2Pushable = b2Pushable;
12+
body1MassImpact = b1MassImpact;
13+
body2MassImpact = b2MassImpact;
14+
body1FullImpact = b1FullImpact;
15+
body2FullImpact = b2FullImpact;
16+
};
17+
18+
var RunProcessX = function (body1, body2, overlap1, overlap2, bodyStationary, body2Direction, debug)
19+
{
20+
if (body1Pushable && body2Pushable)
21+
{
22+
// Both pushable
23+
if (debug)
24+
{
25+
console.log(debug + '-0 :: body1', body1.x, 'body2', body2.x, 'overlap', overlap1, overlap2);
26+
}
27+
28+
// Both pushable, or both moving at the same time, so equal rebound
29+
overlap1 *= 0.5;
30+
overlap2 *= 0.5;
31+
32+
body1.x += overlap1;
33+
body2.x += overlap2;
34+
35+
body1.velocity.x = body1MassImpact;
36+
body2.velocity.x = body2MassImpact;
37+
}
38+
else if (body1Pushable && !body2Pushable)
39+
{
40+
if (debug)
41+
{
42+
console.log(debug + '-1 :: body1', body1.x, 'body2', body2.x, 'overlap', overlap1, overlap2);
43+
}
44+
45+
// Body1 pushable, Body2 not
46+
body1.x += overlap1;
47+
body1.velocity.x = body1FullImpact;
48+
}
49+
else if (!body1Pushable && body2Pushable)
50+
{
51+
if (debug)
52+
{
53+
console.log(debug + '-2 :: body1', body1.x, 'body2', body2.x, 'overlap', overlap1, overlap2);
54+
}
55+
56+
// Body2 pushable, Body1 not
57+
body2.x += overlap2;
58+
body2.velocity.x = body2FullImpact;
59+
}
60+
else if (bodyStationary || body2Direction)
61+
{
62+
if (debug)
63+
{
64+
console.log(debug + '-3 :: body1', body1.x, 'body2', body2.x, 'overlap', overlap1, overlap2);
65+
}
66+
67+
// Neither pushable, so base it on movement
68+
body1.velocity.x = 0;
69+
body2.velocity.x = 0;
70+
}
71+
else
72+
{
73+
if (debug)
74+
{
75+
console.log(debug + '-4 :: body1', body1.x, 'body2', body2.x, 'overlap', overlap1, overlap2);
76+
}
77+
78+
// Body1 and Body2 both moving up, so slow Body1 to match Body2 speed
79+
body1.velocity.x = body2.velocity.x;
80+
}
81+
82+
return true;
83+
};
84+
85+
module.exports = {
86+
SetProcessY: SetProcessX,
87+
RunProcessY: RunProcessX
88+
};

src/physics/arcade/ProcessY.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
var body1Pushable;
2+
var body2Pushable;
3+
var body1MassImpact;
4+
var body2MassImpact;
5+
var body1FullImpact;
6+
var body2FullImpact;
7+
8+
var SetProcessY = function (b1Pushable, b2Pushable, b1MassImpact, b2MassImpact, b1FullImpact, b2FullImpact)
9+
{
10+
body1Pushable = b1Pushable;
11+
body2Pushable = b2Pushable;
12+
body1MassImpact = b1MassImpact;
13+
body2MassImpact = b2MassImpact;
14+
body1FullImpact = b1FullImpact;
15+
body2FullImpact = b2FullImpact;
16+
};
17+
18+
var RunProcessY = function (body1, body2, overlap1, overlap2, bodyStationary, body2Direction, debug)
19+
{
20+
if (body1Pushable && body2Pushable)
21+
{
22+
// Both pushable
23+
if (debug)
24+
{
25+
console.log(debug + '-0 :: body1', body1.y, 'body2', body2.y, 'overlap', overlap1, overlap2);
26+
}
27+
28+
// Both pushable, or both moving at the same time, so equal rebound
29+
overlap1 *= 0.5;
30+
overlap2 *= 0.5;
31+
32+
body1.y += overlap1;
33+
body2.y += overlap2;
34+
35+
body1.velocity.y = body1MassImpact;
36+
body2.velocity.y = body2MassImpact;
37+
}
38+
else if (body1Pushable && !body2Pushable)
39+
{
40+
if (debug)
41+
{
42+
console.log(debug + '-1 :: body1', body1.y, 'body2', body2.y, 'overlap', overlap1, overlap2);
43+
}
44+
45+
// Body1 pushable, Body2 not
46+
body1.y += overlap1;
47+
body1.velocity.y = body1FullImpact;
48+
}
49+
else if (!body1Pushable && body2Pushable)
50+
{
51+
if (debug)
52+
{
53+
console.log(debug + '-2 :: body1', body1.y, 'body2', body2.y, 'overlap', overlap1, overlap2);
54+
}
55+
56+
// Body2 pushable, Body1 not
57+
body2.y += overlap2;
58+
body2.velocity.y = body2FullImpact;
59+
}
60+
else if (bodyStationary || body2Direction)
61+
{
62+
if (debug)
63+
{
64+
console.log(debug + '-3 :: body1', body1.y, 'body2', body2.y, 'overlap', overlap1, overlap2);
65+
}
66+
67+
// Neither pushable, so base it on movement
68+
body1.velocity.y = 0;
69+
body2.velocity.y = 0;
70+
}
71+
else
72+
{
73+
if (debug)
74+
{
75+
console.log(debug + '-4 :: body1', body1.y, 'body2', body2.y, 'overlap', overlap1, overlap2);
76+
}
77+
78+
// Body1 and Body2 both moving up, so slow Body1 to match Body2 speed
79+
body1.velocity.y = body2.velocity.y;
80+
}
81+
82+
return true;
83+
};
84+
85+
module.exports = {
86+
SetProcessY: SetProcessY,
87+
RunProcessY: RunProcessY
88+
};

0 commit comments

Comments
 (0)