-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
118 lines (80 loc) · 2.47 KB
/
server.js
File metadata and controls
118 lines (80 loc) · 2.47 KB
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
var io = require('socket.io')(process.env.PORT || 3000);
var shortid = require('shortid');
console.log('server started');
var players = [];
var playerSpeed = 3;
io.on('connection', function(socket){
var thisPlayerId = shortid.generate();
var player = {
id:thisPlayerId,
destination: {
x:0,y:0
},
lastPosition: {
x:0,y:0
},
lastMoveTime: 0
};
players[thisPlayerId] = player;
console.log('client connected, broadcasting spawn, id: ', thisPlayerId);
socket.emit('register', {id:thisPlayerId});
socket.broadcast.emit('spawn' , { id: thisPlayerId });
socket.broadcast.emit('requestPosition');
for(var playerId in players){
if(playerId == thisPlayerId)
continue;
socket.emit('spawn', players[playerId]);
console.log('sending spawn to new player for id', playerId);
}
socket.on('move', function(data){
data.id = thisPlayerId;
console.log('client moved', JSON.stringify(data));
player.destination.x = data.d.x;
player.destination.y = data.d.y;
console.log("distance detween current and destination: ", lineDistance(data.c, data.d));
var elapsedTime = Date.now() - player.lastMoveTime;
var travelDistanceLimit = elapsedTime * playerSpeed / 1000;
var requestedDistanceTraveled = lineDistance(player.lastPosition, data.c);
console.log("travelDistanceLimit: ", travelDistanceLimit);
console.log("requestedDistanceTraveled: ", requestedDistanceTraveled);
if(requestedDistanceTraveled > travelDistanceLimit){
//someone is cheating
}
player.lastMoveTime = Date.now();
player.lastPosition = data.c;
delete data.c;
data.x = data.d.x;
data.y = data.d.y;
delete data.d;
socket.broadcast.emit('move', data);
});
socket.on('follow', function(data){
console.log("follow request: ", data);
data.id = thisPlayerId;
socket.broadcast.emit('follow', data);
});
socket.on('updatePosition', function(data){
console.log("update position: ", data);
data.id = thisPlayerId;
socket.broadcast.emit('updatePosition', data);
});
socket.on('attack', function(data) {
console.log("attack request: ", data);
data.id = thisPlayerId;
io.emit('attack', data);
});
socket.on('disconnect', function(data){
console.log('client disconnected');
delete players[thisPlayerId];
socket.broadcast.emit('disconnected', {id : thisPlayerId});
});
});
function lineDistance(vectorA, vectorB){
var xs = 0;
var ys = 0;
xs = vectorB.x - vectorA.x;
xs = xs * xs;
ys = vectorB.y - vectorA.y;
ys = ys * ys;
return Math.sqrt(xs * ys);
}