diff --git a/server/server.js b/server/server.js index 6e6e4e0..ffab2f3 100644 --- a/server/server.js +++ b/server/server.js @@ -1,8 +1,10 @@ const https = require('https').createServer; const WebSocket = require('ws'); const url = require('url'); -const objectsModule = require('./objects'); const fs = require('fs'); +const objectsModule = require('./objects'); + + const options = { cert: fs.readFileSync("/home/ubuntu/servers/keys/gta6/cert.pem"), @@ -12,57 +14,36 @@ const options = { const server = https(options, (req, res)=>{ res.end("Grand Tabernacle Auto 6") }); + const wss = new WebSocket.Server({ server }); + + +const spawnPoints = [{"x":218,"y":193},{"x":601,"y":715},{"x":1264,"y":57},{"x":274,"y":506},{"x":921,"y":854},{"x":1041,"y":442},{"x":638,"y":124},{"x":483,"y":436}] const connections = new Set(); var playerCount = 0; var players = [] const NAME_MAXLEN = 25; -function norm(x1, x2, y1, y2) { - return Math.sqrt((x1 - x2) ** 2 + (y1 + y2) ** 2); -} -function circleCollide(x, y) { - let colliding = false; - objectsModule.objects.circles.forEach((circle) => { - if (norm(x, circle.x, y, circle.y) <= circle.r) { - colliding = true; - } - }) - return colliding; -} - -function squareCollide(x, y) { - let colliding = false; - objectsModule.objects.squares.forEach((square) => { - if (square.x <= x && x <= square.x + square.w && square.y <= y && y <= square.y + square.h) { - colliding = true; - } - }) - return colliding; -} function generatePosition() { - let mapWidth = 1000; - let mapHeight = 1000; - let count = 0; + let index = Math.floor(Math.random()*spawnPoints.length); + return [spawnPoints[index].x, spawnPoints[index].y]; +} - let x = Math.floor(Math.random() * mapWidth); - let y = Math.floor(Math.random() * mapHeight); - - while ((circleCollide(x, y) || squareCollide(x, y))) { - x = Math.floor(Math.random() * mapWidth); - y = Math.floor(Math.random() * mapHeight); - count++; - if (count >= 1000) { - break; - } +function getUsername(req){ + let username = url.parse(req.url, true).query.name; + if (username === undefined || username == null || username == "null") { + username = "Soldat Inconnu" } - return [x, y]; + if (username.length > NAME_MAXLEN) { + username = username.substring(0, NAME_MAXLEN); + } + return username; } function createNewPlayer(socket, name) { @@ -95,74 +76,50 @@ function createNewPlayer(socket, name) { connections.add(socket); } -wss.on('connection', (socket, req) => { - //create new player, send informations to new player and broadcast new player for all - let username = url.parse(req.url, true).query.name; - if (username === undefined || username == null || username == "null") { - username = "Soldat Inconnu" - } - if (username.length > NAME_MAXLEN) { - username = username.substring(0, NAME_MAXLEN); - } - createNewPlayer(socket, username); - - socket.on('message', (message) => { - message = JSON.parse(message); - switch (message.type) { - case 'ping': - socket.send("pong"); - break; - - case "update": - for (var i = players.length - 1; i >= 0; i--) { - if (players[i].id == message.data.id) { - players[i] = message.data; - } - } - broadcast(JSON.stringify(message), socket.id); - break; - - case "newBullet": - broadcast(JSON.stringify(message), socket.id); - break; - - case "died": - broadcast(JSON.stringify(message), socket.id); - for (var i = players.length - 1; i >= 0; i--) { - - if (players[i].id == message.data.id) { - let pos = generatePosition(); - players[i].x = pos[0]; - players[i].y = pos[1]; - - broadcast(JSON.stringify({ - type: "update", - data: players[i] - })) - } - } - break; - - default: - break; +function update(message, socket){ + for (var i = players.length - 1; i >= 0; i--) { + if (players[i].id == message.data.id) { + players[i] = message.data; } - }); + } + broadcast(JSON.stringify(message), socket.id); +} + +function newBullet(message, socket){ + broadcast(JSON.stringify(message), socket.id); +} + +function died(message, socket){ + broadcast(JSON.stringify(message), socket.id); + for (var i = players.length - 1; i >= 0; i--) { + + if (players[i].id == message.data.id) { + let pos = generatePosition(); + players[i].x = pos[0]; + players[i].y = pos[1]; - socket.on('close', () => { - for (var i = players.length - 1; i >= 0; i--) { broadcast(JSON.stringify({ - type: "removePlayer", - data: { - id: socket.id - } - })); - if (players[i].id == socket.id) { - players.splice(i, 1); - } + type: "update", + data: players[i] + })) } - connections.delete(socket); - }); -}); + } +} + +function deletePlayer(socket){ + for (var i = players.length - 1; i >= 0; i--) { + broadcast(JSON.stringify({ + type: "removePlayer", + data: { + id: socket.id + } + })); + if (players[i].id == socket.id) { + players.splice(i, 1); + } + } + connections.delete(socket); +} function broadcast(message, exceptId = -1) { connections.forEach((socket) => { @@ -172,8 +129,44 @@ function broadcast(message, exceptId = -1) { }); } +wss.on('connection', (socket, req) => { + //create new player, send informations to new player and broadcast new player for all + let username = getUsername(req); + createNewPlayer(socket, username); + + //handle client's messages + socket.on('message', (message) => { + message = JSON.parse(message); + switch (message.type) { + case 'ping': + socket.send("pong"); + break; + + case "update": + update(message); + break; + + case "newBullet": + newBullet(message, socket); + break; + + case "died": + died(message, socket); + break; + + default: + break; + } + }); + + //handle disconnecting + socket.on('close', () => { + deletePlayer(socket); + }); +}); + const PORT = 8080; server.listen(PORT, () => { - console.log(`Serveur WebSocket écoutant sur le port ${PORT}`); + console.log(`WebSocket listening on port ${PORT}.`); }); \ No newline at end of file diff --git a/tools/collidesTool/app.js b/tools/collidesTool/app.js index 1b7d7f2..5f276da 100644 --- a/tools/collidesTool/app.js +++ b/tools/collidesTool/app.js @@ -2,7 +2,7 @@ var ctx = document.getElementById("canvas").getContext("2d"); var cv = document.getElementById("canvas"); const fond = new Image(); -fond.src = "../../assets/map/map7_recadr.png"; +fond.src = "../../public_html/assets/map/map_principale.png"; var mapWidth = fond.width var mapHeith = fond.height ctx.canvas.width = mapWidth @@ -104,4 +104,4 @@ function cancel(){ data.circles.pop() } render(); -} \ No newline at end of file +}