94 lines
3.0 KiB
JavaScript
94 lines
3.0 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.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;
|