145 lines
3.5 KiB
JavaScript
145 lines
3.5 KiB
JavaScript
const worldgen = require("./worldgen.js")
|
|
const util = require("./util.js")
|
|
const gridSize = [18, 18];
|
|
const perlinScale = 3;
|
|
var express = require('express');
|
|
|
|
class Server {
|
|
constructor(){
|
|
this.games = []
|
|
}
|
|
|
|
addGame(name) {
|
|
let roomNames = []
|
|
for (let i = 0; i < this.games.length; i++) {
|
|
roomNames.push(this.games[i].name)
|
|
}
|
|
if (!roomNames.includes(name)) {
|
|
const game = new Game([18,18], name)
|
|
this.games.push(game)
|
|
console.log("added game - " + game.name)
|
|
} else {
|
|
console.log("tried to make room already taken")
|
|
}
|
|
}
|
|
|
|
getGameByName(name, mode) {
|
|
|
|
var game = this.games.filter(obj => obj.name == name)[0]
|
|
console.log(name, mode, game)
|
|
console.log(game == undefined && mode)
|
|
if (game == undefined && mode) {
|
|
this.addGame(name)
|
|
return this.games.filter(obj => obj.name == name)[0]
|
|
}
|
|
return game;
|
|
}
|
|
|
|
removeGame(name) {
|
|
this.players = this.players.filter(obj => obj.name != name);
|
|
console.log("removed goom - " + name)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class Player {
|
|
constructor(id, color) {
|
|
this.id = id;
|
|
this.color = color;
|
|
}
|
|
}
|
|
|
|
class Game {
|
|
constructor() {
|
|
this.players = [];
|
|
this.world = worldgen.generateWorld(gridSize, perlinScale);
|
|
}
|
|
|
|
addPlayer(id) {
|
|
var color
|
|
switch(util.randomNumber(1,4)) {
|
|
case 1:
|
|
color = "red";
|
|
break;
|
|
|
|
case 2:
|
|
color = "aquamarine";
|
|
break;
|
|
|
|
case 3:
|
|
color = "green";
|
|
break;
|
|
|
|
case 4:
|
|
color = "yellow";
|
|
break;
|
|
}
|
|
const player = new Player(id, color);
|
|
this.players.push(player);
|
|
}
|
|
|
|
removePlayer(id) {
|
|
this.players = this.players.filter(obj => obj.id != id);
|
|
console.log("removed player - " + id)
|
|
}
|
|
|
|
getPlayerByID(id) {
|
|
console.log(this.players)
|
|
console.log(id)
|
|
const player = this.players.filter(obj => obj.id == id)[0]
|
|
return player
|
|
}
|
|
|
|
}
|
|
var game = new Game();
|
|
|
|
|
|
var app = express() //Static resources server
|
|
app.use(express.static(__dirname + '/www/'));var server = app.listen(8082, function () {
|
|
var port = server.address().port;
|
|
console.log('Server running at port %s', port);
|
|
});
|
|
|
|
var io = require('socket.io')(server);/* Connection events */
|
|
io.on('connection', function(client) {
|
|
console.log('User connected');
|
|
|
|
client.on('disconnect', function(){
|
|
console.log(client.id + ' disconnected.')
|
|
game.removePlayer(client.id)
|
|
client.broadcast.emit('playerList', game.players)
|
|
})
|
|
|
|
client.on('joinGame', function(tank){
|
|
game.addPlayer(client.id);
|
|
console.log(client.id + ' joined the game');
|
|
client.emit('gameVars', {gridSize: gridSize, world: game.world})
|
|
client.broadcast.emit('playerList', game.players)
|
|
client.emit('playerList', game.players)
|
|
})
|
|
client.on('leaveGame', function(tank){
|
|
console.log(client.id + ' disconnected.')
|
|
game.removePlayer(client.id)
|
|
client.broadcast.emit('playerList', game.players)
|
|
})
|
|
|
|
client.on('clickCanvas', function(data){
|
|
const xu = data.tilePosition[0]
|
|
const yu = data.tilePosition[1]
|
|
game.world[xu][yu].structure = data.structure
|
|
game.world[xu][yu].owner = game.getPlayerByID(client.id).color;
|
|
// console.log(world[xu][yu].owner = game.getPlayerbyID(client.id))
|
|
|
|
client.broadcast.emit('sync',{world: game.world})
|
|
client.emit('sync',{world: game.world})
|
|
})
|
|
|
|
|
|
});
|
|
|
|
function sendMap(client) {
|
|
client.broadcast.emit('sync',{world: game.world.map})
|
|
client.emit('sync',{world: game.world.map})
|
|
}
|