-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
154 lines (115 loc) · 3.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
var express = require('express'),
logfmt = require("logfmt");
var app = express();
var server = require('http').Server(app);
var sio = require('socket.io')(server);
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views')
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index');
});
var port = Number(process.env.PORT || 5000);
server.listen(port, function() {
console.log("Listening on " + port);
});
var socket,
players,
Player = require("./Player").Player;
function init() {
players = [];
//var socket = sio.listen(server);
setEventHandlers();
};
/**************************************************
** GAME EVENT HANDLERS
**************************************************/
var setEventHandlers = function() {
// Socket.IO
sio.on("connection", onSocketConnection);
};
// New socket connection
function onSocketConnection(client) {
console.log("New player has connected: "+client.id);
// Listen for client disconnected
client.on("disconnect", onClientDisconnect);
// Listen for new player message
client.on("new player", onNewPlayer);
// Listen for move player message
client.on("move player", onMovePlayer);
// Listen for chat player message
client.on("chat player", onChatPlayer);
};
// Socket client has disconnected
function onClientDisconnect() {
console.log("Player has disconnected: "+this.id);
var removePlayer = playerById(this.id);
// Player not found
if (!removePlayer) {
console.log("Player not found: "+this.id);
return;
};
// Remove player from players array
players.splice(players.indexOf(removePlayer), 1);
// Broadcast removed player to connected socket clients
this.broadcast.emit("remove player", {id: this.id});
};
// New player has joined
function onNewPlayer(data) {
// Create a new player
var newPlayer = new Player(data.x, data.y, data.imageId);
newPlayer.id = this.id;
// Broadcast new player to connected socket clients
this.broadcast.emit("new player", {id: newPlayer.id, x: newPlayer.getX(), y: newPlayer.getY(), imageId: newPlayer.getImageId()});
// Send existing players to the new player
var i, existingPlayer;
for (i = 0; i < players.length; i++) {
existingPlayer = players[i];
this.emit("new player", {id: existingPlayer.id, x: existingPlayer.getX(), y: existingPlayer.getY(), imageId: existingPlayer.getImageId()});
};
// Add new player to the players array
players.push(newPlayer);
};
// Player has moved
function onMovePlayer(data) {
// Find player in array
var movePlayer = playerById(this.id);
// Player not found
if (!movePlayer) {
console.log("Player not found: "+this.id);
return;
};
// Update player position
movePlayer.setX(data.x);
movePlayer.setY(data.y);
// Broadcast updated position to connected socket clients
this.broadcast.emit("move player", {id: movePlayer.id, x: movePlayer.getX(), y: movePlayer.getY()});
};
// Player chat
function onChatPlayer(data) {
// Find player in array
var chatPlayer = playerById(this.id);
// Player not found
if (!chatPlayer) {
console.log("Player not found: "+this.id);
return;
};
chatPlayer.setText(data.text);
this.broadcast.emit("chat player", {id: chatPlayer.id, text: chatPlayer.getText()});
};
/**************************************************
** GAME HELPER FUNCTIONS
**************************************************/
// Find player by ID
function playerById(id) {
var i;
for (i = 0; i < players.length; i++) {
if (players[i].id == id)
return players[i];
};
return false;
};
/**************************************************
** RUN THE GAME
**************************************************/
init();