-
Notifications
You must be signed in to change notification settings - Fork 0
/
object.js
111 lines (89 loc) · 3.45 KB
/
object.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Vars
var objectNameBase = {}; // String : Element
var objectMovementBase = {}; // String : Vector pair
var objectOnHitPlayerBase = {}; // String : Function
var objectOnHitEnvBase = {}; // String : Function
var objectOnCollidePlayerBase = {} // String : Function
// Registering
function registerObject(name, obj){
objectNameBase[name] = obj;
}
function registerObjectMovement(name, vector){
objectMovementBase[name] = vector;
}
function registerObjectOnHitPlayerEvent(name, onHit){
objectOnHitPlayerBase[name] = onHit;
}
function registerObjectOnHitEnvEvent(name, onHit){
objectOnHitEnvBase[name] = onHit;
}
function registerObjectOnCollidePlayerEvent(name, onHit){
objectOnCollidePlayerBase[name] = onHit;
}
function unregisterObject(name){
delete objectNameBase[name];
delete objectMovementBase[name];
delete objectOnHitPlayerBase[name];
delete objectOnHitEnvBase[name];
delete objectOnCollidePlayerBase[name];
}
// Functionality
function moveObjects(){
Object.keys(objectMovementBase).forEach((name, index) => {
translateObject(objectNameBase[name], objectMovementBase[name][0], objectMovementBase[name][1]);
})
}
function getObjectRect(obj){
var xString = obj.style.left;
var x = parseFloat(xString.substring(0, xString.length -2));
var yString = obj.style.top;
var y = parseFloat(yString.substring(0, yString.length -2));
return new Rectangle(x, y, obj.clientWidth, obj.clientHeight);
}
function checkObjectWindowBoundCollision(){
Object.keys(objectMovementBase).forEach((name, index) => {
var objRect = getObjectRect(objectNameBase[name]);
var windowRect = new Rectangle(0, 0, windowWidth, windowHeight);
if(!isRectOverlapping(objRect, windowRect)){
objectOnHitEnvBase[name]();
}
Object.keys(objectOnCollidePlayerBase).forEach((name2, index2) => {
var obj2Rect = getObjectRect(objectNameBase[name2]);
if(isRectOverlapping(objRect, obj2Rect)){
objectOnHitEnvBase[name]();
}
});
});
}
function checkPlayerMovementCollision(player1Rect, player2Rect, p1PosVector, p2PosVector){
var p1Collided = false;
var p2Collided = false;
Object.keys(objectOnCollidePlayerBase).forEach((name, index) => {
var objRect = getObjectRect(objectNameBase[name]);
var p1NextRect = new Rectangle(player1Rect.x + p1PosVector[0], player1Rect.y + p1PosVector[1], player1Rect.width, player1Rect.height);
var p2NextRect = new Rectangle(player2Rect.x + p2PosVector[0], player2Rect.y + p2PosVector[1], player2Rect.width, player2Rect.height);
if(isRectOverlapping(p1NextRect, objRect)){
objectOnCollidePlayerBase[name](1, true);
p1Collided = true;
}
if(isRectOverlapping(p2NextRect, objRect)){
objectOnCollidePlayerBase[name](2, true);
p2Collided = true;
}
});
if(!p1Collided && !p2Collided){
objectOnCollidePlayerBase[name](1, false)
objectOnCollidePlayerBase[name](2, false)
}
}
function checkPlayerObjectHit(player1Rect, player2Rect){
Object.keys(objectOnHitPlayerBase).forEach((name, index) => {
var objRect = getObjectRect(objectNameBase[name]);
if(isRectOverlapping(player1Rect, objRect)){
objectOnHitPlayerBase[name](1);
}
else if(isRectOverlapping(player2Rect, objRect)){
objectOnHitPlayerBase[name](2);
}
})
}