Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 42 additions & 42 deletions lib/game.js → lib/server.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
var util = require('util')
var http = require('http')
var path = require('path')
var ecstatic = require('ecstatic')
var io = require('socket.io')
var util = require('util');
var http = require('http');
var path = require('path');
var ecstatic = require('ecstatic');
var io = require('socket.io');

var Player = require('./Player')
var Player = require('./Player');

var port = process.env.PORT || 8080
var port = process.env.PORT || 8080;

/* ************************************************
** GAME VARIABLES
************************************************ */
var socket // Socket controller
var players // Array of connected players
var socket; // Socket controller
var players; // Array of connected players

/* ************************************************
** GAME INITIALISATION
Expand All @@ -23,102 +23,102 @@ var server = http.createServer(
ecstatic({ root: path.resolve(__dirname, '../public') })
).listen(port, function (err) {
if (err) {
throw err
throw err;
}

init()
})
init();
});

function init () {
// Create an empty array to store players
players = []
players = [];

// Attach Socket.IO to server
socket = io.listen(server)
socket = io.listen(server);

// Start listening for events
setEventHandlers()
setEventHandlers();
}

/* ************************************************
** GAME EVENT HANDLERS
************************************************ */
var setEventHandlers = function () {
// Socket.IO
socket.sockets.on('connection', onSocketConnection)
socket.sockets.on('connection', onSocketConnection);
}

// New socket connection
function onSocketConnection (client) {
util.log('New player has connected: ' + client.id)
util.log('New player has connected: ' + client.id);

// Listen for client disconnected
client.on('disconnect', onClientDisconnect)
client.on('disconnect', onClientDisconnect);

// Listen for new player message
client.on('new player', onNewPlayer)
client.on('new player', onNewPlayer);

// Listen for move player message
client.on('move player', onMovePlayer)
client.on('move player', onMovePlayer);
}

// Socket client has disconnected
function onClientDisconnect () {
util.log('Player has disconnected: ' + this.id)
util.log('Player has disconnected: ' + this.id);

var removePlayer = playerById(this.id)
var removePlayer = playerById(this.id);

// Player not found
if (!removePlayer) {
util.log('Player not found: ' + this.id)
return
util.log('Player not found: ' + this.id);
return;
}

// Remove player from players array
players.splice(players.indexOf(removePlayer), 1)
players.splice(players.indexOf(removePlayer), 1);

// Broadcast removed player to connected socket clients
this.broadcast.emit('remove player', {id: this.id})
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.angle)
newPlayer.id = this.id
var newPlayer = new Player(data.x, data.y, data.angle);
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(), angle: newPlayer.getAngle()})
this.broadcast.emit('new player', {id: newPlayer.id, x: newPlayer.getX(), y: newPlayer.getY(), angle: newPlayer.getAngle()});

// Send existing players to the new player
var i, existingPlayer
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(), angle: existingPlayer.getAngle()})
existingPlayer = players[i];
this.emit('new player', {id: existingPlayer.id, x: existingPlayer.getX(), y: existingPlayer.getY(), angle: existingPlayer.getAngle()});
}

// Add new player to the players array
players.push(newPlayer)
players.push(newPlayer);
}

// Player has moved
function onMovePlayer (data) {
// Find player in array
var movePlayer = playerById(this.id)
var movePlayer = playerById(this.id);

// Player not found
if (!movePlayer) {
util.log('Player not found: ' + this.id)
return
util.log('Player not found: ' + this.id);
return;
}

// Update player position
movePlayer.setX(data.x)
movePlayer.setY(data.y)
movePlayer.setAngle(data.angle)
movePlayer.setX(data.x);
movePlayer.setY(data.y);
movePlayer.setAngle(data.angle);

// Broadcast updated position to connected socket clients
this.broadcast.emit('move player', {id: movePlayer.id, x: movePlayer.getX(), y: movePlayer.getY(), angle: movePlayer.getAngle()})
this.broadcast.emit('move player', {id: movePlayer.id, x: movePlayer.getX(), y: movePlayer.getY(), angle: movePlayer.getAngle()});
}

/* ************************************************
Expand All @@ -129,9 +129,9 @@ function playerById (id) {
var i
for (i = 0; i < players.length; i++) {
if (players[i].id === id) {
return players[i]
return players[i];
}
}

return false
return false;
}