-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
127 lines (106 loc) · 3.17 KB
/
index.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
var express = require('express');
var path = require('path');
var app = express();
app.use(express.static(path.join(__dirname,'public')));
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 3000;
var square = require('./calculatePosition');
http.lastPlayerID = 0;
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
var playersDead = 0;
io.on('connect', function(socket){
console.log('new connection ' + socket.id);
var originalPosition = startPoint();
socket.player = {
id: http.lastPlayerID++,
key: 0,
positions: [originalPosition]
};
io.emit('new player', http.lastPlayerID + 1);
if(getAllPlayers().length === 1){
setInterval(function(){
io.emit('update position', updatePositions());
}, 100);
}
socket.on('keypress', function(key){
console.log("Server received keypress: " + key);
socket.player.key = key;
if(socket.player.dead !== true) {
io.emit('update single position', square.calculatePosition(socket.player));
} else {
console.log(socket.player.id + " is dead!");
}
});
socket.on('disconnect', function() {
console.log(socket.player.id);
io.emit('disconnect',socket.player.id);
});
function getAllPlayers() {
var players = [];
Object.keys(io.sockets.connected).forEach(function(socketID){
var player = io.sockets.connected[socketID].player;
if(player) players.push(player);
});
return players;
}
function updatePositions() {
getAllPlayers().forEach(function(player){
console.log(player.positions);
if(player.dead) {
console.log(player.id + " is dead!")
}
else if(checkBoundary(player.positions.slice(-1)[0]) != true) {
square.calculatePosition(player);
} else {
player.dead = true;
playersDead += 1;
if(playersDead+1 >= getAllPlayers().length) {
io.emit('winner', 'We have a WINNER!');
setTimeout(function() {
io.emit('winner', 'New game starts in: 3');
setTimeout(function() {
io.emit('winner', 'New game starts in: 2');
setTimeout(function() {
io.emit('winner', 'New game starts in: 1');
setTimeout(function() {
resetAllPlayers();
}, 1000);
}, 1000);
}, 1000);
}, 3000);
} else {
}
}
});
return getAllPlayers();
}
function resetAllPlayers() {
getAllPlayers().forEach(function(player){
player.dead = false;
var originalPosition = startPoint();
player.positions = [originalPosition];
player.key = 0;
playersDead = 0;
io.emit('winner', "");
})
}
function checkBoundary(pos) {
if(pos[0] < 0 || pos[1] < 0 || pos[0] > 980 || pos[1] > 980) {
return true;
}
}
function randomInt (low, high, multiple) {
return Math.floor(Math.random() * (high - low) + low) * multiple;
}
function startPoint() {
var x = randomInt(5,45,20);
var y = randomInt(5,45,20);
return [x,y];
}
});
http.listen(port, function(){
console.log('listening on *:' + port);
});