ludo-web-multiplayer/backend/routes/room.js
2021-04-25 21:20:14 +02:00

95 lines
3.1 KiB
JavaScript

const express = require('express');
const router = express.Router();
const RoomModel = require('../schemas/room');
const colors = ['red','blue','green','yellow'];
function getStartPositions(){
const startPositions = [];
for( let i = 0; i < 16; i++){
let pawn = {};
pawn.position = i;
if(i < 4) pawn.color = colors[0];
else if(i < 8) pawn.color = colors[1];
else if(i < 12) pawn.color = colors[2];
else if (i < 16) pawn.color = colors[3]
startPositions.push(pawn);
}
return startPositions;
}
//creating new room in db
router.post('/add', function (req, res) {
RoomModel.findOne( { full: false, started: false }, function (err, results) {
if (err) console.log(err);
if (!results) {
let newRoom = new RoomModel({
createDate: new Date,
full: false,
started: false,
players: [{
name: req.body.name,
nowMoving: false,
ready: false,
color: colors[0]
}],
pawns: getStartPositions(),
});
newRoom.save()
.then(function(){
req.session.roomId = newRoom._id;
req.session.playerId = newRoom.players[0]._id;
req.session.color = newRoom.players[0].color;
res.status(200).send(req.session.playerId);
})
.catch(err => res.status(400).json('Error: ' + err))
}else {
let players = results.players;
players.push({
name: req.body.name,
ready: false,
color: colors[players.length]
});
let updateObj = { players: players }
// Checks if room is full => if true start game
if (players.length === 4) {
updateObj.full = true; // Room is full
updateObj.started = true; // Game started
updateObj.nextMoveTime = Date.now()+15;
updateObj.players[0].nowMoving = true; //First joined player moving
updateObj.pawns = getStartPositions();
}
RoomModel.findOneAndUpdate(
{ _id: results._id }, //find room by id
updateObj)
.then(()=>{
req.session.roomId = results._id;
req.session.playerId = updateObj.players[updateObj.players.length-1]._id;
req.session.color = colors[updateObj.players.length-1];
res.status(200).send(req.session.playerId);
});
}
});
});
//get room values
router.get('/', function(req,res){
RoomModel.findOne(
{ _id: req.session.roomId }, //find room by id
function (err, docs) {
if (err){
console.log(err)
}
else{
res.send(docs);
}
}
)
});
module.exports = router;