-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
103 lines (84 loc) · 2.01 KB
/
server.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
var connect = require('connect');
var app = connect.createServer(
connect.static( __dirname + '/' )
).listen(6969)
var io = require('socket.io').listen(app);
function random(min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var ball = {
x: 30, // Keep x and y in global, decode on client.
y: 30,
r: 15,
color: "white",
vx: 10,
vy: 5
};
var player_count = 0;
var players = {};
var stage = {};
var score = {};
io.sockets.on('connection', function(socket){
socket.on('init', function (info) {
info.socket = socket;
players[socket.id] = info;
score[socket.id] = 0;
updateStage();
socket.emit('init', {
ball: ball,
id: socket.id
});
});
socket.on('disconnect', function () {
delete players[socket.id];
updateStage();
});
socket.on('didCollide', function(data) {
ball = data.ball;
if (data.success === "paddle") {
ball.vx = -ball.vx;
}
else if (data.success === "horizontal") {
ball.vy = -ball.vy;
}
io.sockets.emit('updateBall', ball);
});
socket.on('didScore', function(data) {
ball = data.ball;
ball.x = 30;//stage.width/2 - ball.r;
ball.y = 30;//stage.height/2 - ball.r;
for (var key in score) {
if (key !== socket.id) {
score[key]++;
}
}
io.sockets.emit('updateScore', score);
io.sockets.emit('updateBall', ball);
});
});
function updateStage () {
stage.height = 69000;
stage.width = 0;
for (var key in players) {
stage.width += players[key].width,
stage.height = Math.min(stage.height, players[key].height);
}
var prev = null;
for (var key in players) {
var s = {
width: stage.width,
height: stage.height
}
if (prev !== null) {
s.x = prev.x;
s.y = prev.y;
} else {
prev = {x:players[key].width, y:0};
s.x = 0;
s.y = 0;
}
players[key].socket.emit('setStage', s);
}
// TODO: for n-gons we need to recalculate if the ball goes out of stage
io.sockets.emit('updateBall', ball);
}