-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
293 lines (241 loc) · 10.6 KB
/
app.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
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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
var express = require('express');
var app = express();
var server = require('http').createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);
app.get('/', function (req, res) {
res.sendFile(__dirname + "/index.html");
}); // this returns index page after connecting
// this nodeJS server must be started
app.use('/client', express.static(__dirname + '/client'));
// this determine what folders/files client can load from server
var port = 10937;
server.listen(port, () => {
console.log('Server started. Listening on port ' + port);
});
var SOCKET_LIST = {};
var PLAYER_LIST = {};
var GAME_LIST = {};
var s_id = 0;
var g_id = 0;
var Player = function (id) {
var self = {
x: 0,
y: 0,
velocity_x: 0,
velocity_y: 0,
direction_x: 1,
id: id,
role: "",
pack_player_info: function () {
var packed_info = {
x: this.x,
y: this.y,
velocity_x: this.velocity_x,
velocity_y: this.velocity_y,
direction_x: this.direction_x,
id: this.id,
role: this.role,
};
return packed_info;
}
}
return self;
}
var Game = function (g_code) {
var self = {
code: g_code,
level: null,
player_water: null,
player_fire: null,
running: null,
}
return self;
}
io.sockets.on('connection', (socket) => {
socket.id = s_id++;
console.log("Player " + socket.id + " connected to server ");
SOCKET_LIST[socket.id] = socket;
// every player has ID of the socket
var player = Player(socket.id);
PLAYER_LIST[socket.id] = player;
socket.on('disconnect', function () {
console.log("Player " + socket.id + " quit the game ");
// run through every game and see if player was its part, then set flag to unactive and send message to other player
for (var i in GAME_LIST) {
if (GAME_LIST[i].player_water != null) {
if (GAME_LIST[i].player_water.id == socket.id) {
GAME_LIST[i].running = false;
//console.log("Player water quit the game ");
var socket_fire = SOCKET_LIST[GAME_LIST[i].player_fire.id];
if(socket_fire != null || socket_fire != undefined){ // check if player is still connected
socket_fire.emit('infoMessage', {message: 'Player ' + socket.id + ' quit the game', flag: 'playerQuit'});
}
}
}
if (GAME_LIST[i].player_fire != null) {
if (GAME_LIST[i].player_fire.id == socket.id) {
GAME_LIST[i].running = false;
//console.log("Player fire quit the game ");
var socket_water = SOCKET_LIST[GAME_LIST[i].player_water.id];
if(socket_water != null || socket_water != undefined){ // check if player is still connected
socket_water.emit('infoMessage', {message: 'Player ' + socket.id + ' quit the game', flag: 'playerQuit'});
}
}
}
}
delete SOCKET_LIST[socket.id];
delete PLAYER_LIST[socket.id];
});
socket.on('resetLevel', function (data) {
for(var i in GAME_LIST){
if(GAME_LIST[i].code == data.code){
//console.log("resetLevel");
GAME_LIST[i].level = data.level;
var socket_fire = SOCKET_LIST[GAME_LIST[i].player_fire.id];
var socket_water = SOCKET_LIST[GAME_LIST[i].player_water.id];
socket_fire.emit('resetGameLevel', {reset: true});
socket_water.emit('resetGameLevel', {reset: true});
//break;
}
}
});
socket.on('setLevel', function (data) {
for(var i in GAME_LIST){
if(GAME_LIST[i].code == data.code){
//console.log("resetLevel");
GAME_LIST[i].level = data.level;
var socket_fire = SOCKET_LIST[GAME_LIST[i].player_fire.id];
var socket_water = SOCKET_LIST[GAME_LIST[i].player_water.id];
socket_fire.emit('startNewLevel', {start: true, level_id: GAME_LIST[i].level});
socket_water.emit('startNewLevel', {start: true, level_id: GAME_LIST[i].level});
//break;
}
}
});
socket.on('updatePosition', function (data) {
player.role = data.gRole;
player.x = data.x;
player.y = data.y;
player.velocity_x = data.vel_x;
player.velocity_y = data.vel_y;
player.direction_x = data.direction_x;
//console.log(player);
});
socket.on('createGame', function (data) {
var gameNotFound = true;
for (var i in GAME_LIST) {
if (GAME_LIST[i].player_water != null) {
if (GAME_LIST[i].player_water.id == socket.id) {
gameNotFound = false;
//console.log("Player has already created a game");
socket.emit('infoMessage', { message: 'You have already created a game.', flag: 'gameAlreadyCreated' });
}
}
if (GAME_LIST[i].player_fire != null) {
if (GAME_LIST[i].player_fire.id == socket.id) {
gameNotFound = false;
//console.log("Player has already created a game");
socket.emit('infoMessage', { message: 'You have already created a game.', flag: 'gameAlreadyCreated' });
}
}
}
if (gameNotFound) {
g_id = g_id + 1; // increase game_id
var game = Game(g_id); // init a new game
console.log("Player created the game with code: " + g_id);
if (data.gRole == "fire") {
PLAYER_LIST[socket.id].role = "fire";
game.player_fire = PLAYER_LIST[socket.id];
}
else if (data.gRole == "water") {
PLAYER_LIST[socket.id].role = "water";
game.player_water = PLAYER_LIST[socket.id];
}
else { console.log("Something is really wrong"); }
GAME_LIST[g_id] = game;
socket.emit('gameCode', { gameCode: g_id });
}
});
socket.on('joinGame', function (data) {
var foundGame = false;
var ownGameJoin = false;
var gameHasTwoPlayers = false;
// last two variables are pointless, I should declare variables, where I should store info and
// in the end I should have just one socket.emit(), which would send all at once
for (var i in GAME_LIST) {
//console.log(GAME_LIST[i].running);
if (GAME_LIST[i].code == data.code) { // if given code is valid
if (GAME_LIST[i].player_water != null) { // if player water wants to join his own game
if (GAME_LIST[i].player_water.id == socket.id) {
socket.emit('infoMessage', { message: 'You cannot join your own game.', flag: 'gameAlreadyCreated' });
ownGameJoin = true;
break;
}
}
if (GAME_LIST[i].player_fire != null) { // if player fire wants to join his own game
if (GAME_LIST[i].player_fire.id == socket.id) {
socket.emit('infoMessage', { message: 'You cannot join your own game.', flag: 'gameAlreadyCreated' });
ownGameJoin = true;
break;
}
}
if (GAME_LIST[i].running == null && !ownGameJoin) {
foundGame = true;
// second player can join the game
console.log("player wants to join game" + GAME_LIST[i].code);
if (GAME_LIST[i].player_fire == null) {
PLAYER_LIST[socket.id].role = "fire";
GAME_LIST[i].player_fire = PLAYER_LIST[socket.id];
}
else if (data.player_water == null) {
PLAYER_LIST[socket.id].role = "water";
GAME_LIST[i].player_water = PLAYER_LIST[socket.id];
}
else { console.log("Player could not join the game."); }
GAME_LIST[i].running = true;
var socket_fire = SOCKET_LIST[GAME_LIST[i].player_fire.id];
var socket_water = SOCKET_LIST[GAME_LIST[i].player_water.id];
socket_fire.emit('startMPGame', { startMPGame: true, pRole: "fire", code: GAME_LIST[i].code, level_id: "04" });
socket_water.emit('startMPGame', { startMPGame: true, pRole: "water", code: GAME_LIST[i].code, level_id: "04" });
//console.log(GAME_LIST[i]);
break;
}
else {
if(!ownGameJoin){
gameHasTwoPlayers = true;
socket.emit('startMPGame', { // Game has already two players or it was canceled.
startMPGame: false,
message: 'Game has already two players or it does not exist.',
flag: 'cannotStartMP'
});
}
break;
}
}
}
if (!foundGame && !ownGameJoin && !gameHasTwoPlayers) { // if game was not found and player did not try to join his own game
socket.emit('startMPGame', {
startMPGame: false,
message: 'Game with this code does not exist :('
});
}
});
});
setInterval(function () {
for (var i in GAME_LIST) {
if (GAME_LIST[i].running) {
// Game actively running, I can send info to players connected to game
var player_fire = GAME_LIST[i].player_fire;
var player_water = GAME_LIST[i].player_water;
var pack = []; // this pack contains info about all players in the Game which will be send to every player connected to game
pack.push(player_fire.pack_player_info());
pack.push(player_water.pack_player_info());
//console.log(pack);
var socket_fire = SOCKET_LIST[GAME_LIST[i].player_fire.id];
var socket_water = SOCKET_LIST[GAME_LIST[i].player_water.id];
socket_fire.emit('newPosition', pack);
socket_water.emit('newPosition', pack);
}
}
}, 1000 / 30);