-
Notifications
You must be signed in to change notification settings - Fork 2
/
correct-box.js
70 lines (57 loc) · 1.37 KB
/
correct-box.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// r1 moves into r2
var correctBox = module.exports = function (r1, r2) {
// which corner hits?
var r1left = r1.x,
r1right = r1.x + r1.width,
r1top = r1.y,
r1bottom = r1.y + r1.height;
var r2left = r2.x,
r2right = r2.x + r2.width,
r2top = r2.y,
r2bottom = r2.y + r2.height;
var top = false;
// left side
if (r1right > r2left && r2right > r1right) {
// top left
if (r1bottom > r2top && r2bottom > r1bottom) {
if (r1bottom - r2top > r1right - r2left) {
r2.x = r1.x + r1.width;
} else {
r1.y = r2.y - r1.height;
top = true;
}
}
// bottom left
if (r1top > r2top && r2bottom > r1top) {
if (r2bottom - r1top > r1right - r2left) {
r2.x = r1.x + r1.width;
} else {
r1.y = r2bottom;
}
}
}
// right side
if (r2right > r1left && r1left > r2left) {
// top right
if (r1bottom > r2top && r2bottom > r1bottom) {
if (r1bottom - r2top > r2right - r1left) {
r2.x = r1.x - r2.width;
} else {
r1.y = r2.y - r1.height;
top = true;
}
}
// bottom right
if (r1top > r2top && r2bottom > r1top) {
if (r2bottom - r1top > r2right - r1left) {
r2.x = r1.x - r2.width;
} else {
r1.y = r2bottom;
}
}
}
if (top) {
r1.yVelocity = 0;
r1.jumping = false;
}
};