aboutsummaryrefslogtreecommitdiff
path: root/race/cars/car0.js
blob: 92104480b1949e8499830db95f2a6d881c2e46a7 (plain)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
startHooks.push(() => {
    car0speed            = 16;
    car0cspeed           = 0;
    if (online && role === "guest") {
        car0startx       = 388.9;
        car0starty       = 79.4;
    } else {
        car0startx       = 428;
        car0starty       = 42.9;
    }
    car0collisionon      = true;
    car0enableOOBChecker = false;

// Collision Manager
    function car0collision() {
        if (!keysEnabled) { return; }

        if (started) {
            carshb = document.getElementById("car0").getBoundingClientRect();
            hitbox = document.getElementById("barrier").getBoundingClientRect();

            var overlap = !(carshb.right < hitbox.left ||
                carshb.left > hitbox.right ||
                carshb.bottom < hitbox.top ||
                carshb.top > hitbox.bottom)

            if (overlap) {
                info("CarManager:car0", "Reversal prevented at X " + document.getElementById("car0").style.left + ", Y " + document.getElementById("car0").style.top);
                document.getElementById("car0").style.left = car0startx + "px";
                document.getElementById("car0").style.top = car0starty + "px";
                document.getElementById("car0").style.transform = "rotate(0deg)";
                car0cspeed = 0;
            }
        }

        if (!car0collisionon) { return; }

        walls = Array.from(document.getElementsByClassName("wall"));

        walls.forEach((wall) => {
            carshb = document.getElementById("car0").getBoundingClientRect();
            hitbox = wall.getBoundingClientRect();

            var overlap = !(carshb.right < hitbox.left ||
                carshb.left > hitbox.right ||
                carshb.bottom < hitbox.top ||
                carshb.top > hitbox.bottom)

            if (overlap) {
                info("CarManager:car0", "Wall collision at X " + document.getElementById("car0").style.left + ", Y " + document.getElementById("car0").style.top);
                if (location.search === "?sp") {
                    scenar("wall1", "happy");
                }
                Sound.crash()
                document.getElementById("car0").style.left = car0startx + "px";
                document.getElementById("car0").style.top = car0starty + "px";
                require('electron').ipcRenderer.send('addstats', { catalog: "ingame", key: "walls", add: 1 });
                Array.from(document.getElementById('oil').children).forEach((item) => {
                    spreadOil(item);
                })
                document.getElementById("car0").style.transform = "rotate(0deg)";
                car0cspeed = 0;
            }
        })

        Array.from(document.getElementById('oil').children).forEach((item) => {
            carshb = document.getElementById("car0").getBoundingClientRect();
            hitbox = item.getBoundingClientRect();

            var overlap = !(carshb.right < hitbox.left ||
                carshb.left > hitbox.right ||
                carshb.bottom < hitbox.top ||
                carshb.top > hitbox.bottom)

            if (overlap) {
                car0cspeed = 7;
            }
        })

        carshb = document.getElementById("car0").getBoundingClientRect();
        hitbox = document.getElementById("arrival").getBoundingClientRect();

        var overlap = !(carshb.right < hitbox.left ||
            carshb.left > hitbox.right ||
            carshb.bottom < hitbox.top ||
            carshb.top > hitbox.bottom)

        if (overlap && started) {
            started = false;
            if ((document.getElementById('laps-car0').innerText.split("/")[0] - 1 + 1) < 4) {
                info("CarManager:car0", "New lap");
                Array.from(document.getElementById('oil').children).forEach((item) => {
                    spreadOil(item);
                })
                if ((document.getElementById('laps-car0').innerText.split("/")[0] - 1 + 1) < 3) {
                    Sound.pass()
                } else {
                    Sound.last()
                }
                require('electron').ipcRenderer.send('addstats', { catalog: "ingame", key: "laps", add: 1 });
                document.getElementById('laps-car0').innerText = (document.getElementById('laps-car0').innerText.split("/")[0] - 1 + 2).toString();
                if (location.search === "?sp") {
                    if ((document.getElementById('laps-car0').innerText.split("/")[0] - 1 + 1) > (document.getElementById('laps-car1').innerText.split("/")[0] - 1 + 1)) {
                        scenar("ahead1", "angry");
                    } else {
                        scenar("ahead2", "happy");
                    }
                }
            } else {
                info("CarManager:car0", "Car won the game");
                require('electron').ipcRenderer.send('addstats', { catalog: "results", key: "wins", add: 1 });
                if (location.search === "?sp") {
                    scenar("won1", "sad");
                }
                try { document.getElementById('music').src = "about:blank"; } catch (e) { console.error(e); }
                Sound.win();
                keysEnabled = false;
                car0cspeed = 0;
                car0speed = 0;
                document.getElementById('laps-car0').innerText = (document.getElementById('laps-car0').innerText.split("/")[0] - 1 + 2).toString();
                $("#box").fadeOut(500);
                setTimeout(() => {
                    if (online) {
                        clientWriter(JSON.stringify({
                            _type: "ipc",
                            action: "progressLose",
                            message: null
                        }) + "|")
                    }
                    if (location.search === "?sp" || online) {
                        location.href = "win.html?sp#car0";
                    } else {
                        location.href = "win.html#car0";
                    }
                }, 3500)
            }
            document.getElementById("car0").style.left = car0startx + "px";
            document.getElementById("car0").style.top = car0starty + "px";
            document.getElementById("car0").style.transform = "rotate(0deg)";
            Array.from(document.getElementById('oil').children).forEach((item) => {
                spreadOil(item);
            })
            car0cspeed = 0;
            setTimeout(() => {
                started = true;
            }, 150)
        }

        carshb = document.getElementById("car0").getBoundingClientRect();
        hitbox = document.getElementById("car1").getBoundingClientRect();

        var overlap = !(carshb.right < hitbox.left ||
            carshb.left > hitbox.right ||
            carshb.bottom < hitbox.top ||
            carshb.top > hitbox.bottom)

        if (overlap) {
            if (location.search === "?sp") {
                scenar("wall1", "happy");
            }
            Sound.crash();
            require('electron').ipcRenderer.send('addstats', { catalog: "ingame", key: "walls", add: 1 });
            document.getElementById("car0").style.left = car0startx + "px";
            document.getElementById("car0").style.top = car0starty + "px";
            Array.from(document.getElementById('oil').children).forEach((item) => {
                spreadOil(item);
            })
            document.getElementById("car0").style.transform = "rotate(0deg)";
            car0cspeed = 0;
        }
    }

// General Movements
    setInterval(() => {
        if (!paused) {
            if (car0cspeed > 0) {
                car0cspeed = car0cspeed - 0.1;
            }
            switch (document.getElementById("car0").style.transform) {
                case "rotate(0deg)":
                    document.getElementById("car0").style.left = ((document.getElementById("car0").style.left.split("p")[0] - 1) + (1 + car0cspeed)) + "px";
                    break;
                case "rotate(180deg)":
                    document.getElementById("car0").style.left = ((document.getElementById("car0").style.left.split("p")[0] - 1) - (1 + car0cspeed)) + "px";
                    break;
                case "rotate(90deg)":
                    document.getElementById("car0").style.top = ((document.getElementById("car0").style.top.split("p")[0] - 1) + (1 + car0cspeed)) + "px";
                    break;
                case "rotate(-90deg)":
                    document.getElementById("car0").style.top = ((document.getElementById("car0").style.top.split("p")[0] - 1) - (1 + car0cspeed)) + "px";
                    break;
            }
            if (document.getElementById("car0").style.left.split("p")[0] - 1 + 1 > (window.innerWidth - 30)) {
                warn("CarManager:car0", "Colliding with screen border");
                document.getElementById("car0").style.left = (window.innerWidth - 30) + "px";
            }
            if (document.getElementById("car0").style.top.split("p")[0] - 1 + 1 > (window.innerHeight - 30)) {
                warn("CarManager:car0", "Colliding with screen border");
                document.getElementById("car0").style.top = (window.innerHeight - 30) + "px";
            }
            if (document.getElementById("car0").style.top.split("p")[0] - 1 + 1 < 30) {
                warn("CarManager:car0", "Colliding with screen border");
                document.getElementById("car0").style.top = "30px";
            }
            if (document.getElementById("car0").style.left.split("p")[0] - 1 + 1 < 30) {
                warn("CarManager:car0", "Colliding with screen border");
                document.getElementById("car0").style.left = "30px";
            }
            if (car0cspeed > -0.1 && car0cspeed < 0) {
                car0cspeed = 0;
            }
            car0collision();
        }
    }, 200)

})