added game handler
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
const RoomModel = require('../schemas/room');
|
||||
const { getPositionAfterMove } = require('../utils/functions');
|
||||
/*
|
||||
Function handle all requests
|
||||
file constains functions:
|
||||
1. roll
|
||||
2. move
|
||||
*/
|
||||
module.exports = (io, socket) => {
|
||||
const req = socket.request;
|
||||
const roll = () => {
|
||||
const rolledNumber = Math.ceil(Math.random() * 6);
|
||||
req.session.reload(err => {
|
||||
if (err) return socket.disconnect();
|
||||
// Saving session data
|
||||
req.session.rolledNumber = rolledNumber;
|
||||
req.session.save();
|
||||
socket.emit('game:roll', rolledNumber);
|
||||
});
|
||||
};
|
||||
|
||||
const move = ({ pawnId }) => {
|
||||
RoomModel.findOne({ _id: req.session.roomId }, function (err, room) {
|
||||
if (!room) return err;
|
||||
const pawnIndex = room.pawns.findIndex(pawn => pawn._id == pawnId);
|
||||
room.pawns[pawnIndex].position = getPositionAfterMove(req.session.rolledNumber, room.pawns[pawnIndex]);
|
||||
const pawnsOnPos = room.pawns.filter(pawn => pawn.position == room.pawns[pawnIndex].position);
|
||||
pawnsOnPos.forEach(pawn => {
|
||||
if (pawn.color !== req.session.color) {
|
||||
const index = room.pawns.findIndex(i => i._id === pawn._id);
|
||||
room.pawns[index].position = room.pawns[index].basePos;
|
||||
}
|
||||
});
|
||||
// Updating moving player
|
||||
const playerIndex = room.players.findIndex(player => player.nowMoving === true);
|
||||
const roomSize = room.players.length;
|
||||
room.players[playerIndex].nowMoving = false;
|
||||
if (playerIndex + 1 === roomSize) {
|
||||
room.players[0].nowMoving = true;
|
||||
} else {
|
||||
room.players[playerIndex + 1].nowMoving = true;
|
||||
}
|
||||
// Updating timer
|
||||
room.nextMoveTime = Date.now() + 15000;
|
||||
// Pushing above data to database
|
||||
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, (err, updatedRoom) => {
|
||||
if (!updatedRoom) return err;
|
||||
io.to(req.session.roomId).emit('room:data', JSON.stringify(updatedRoom));
|
||||
socket.emit('room:move');
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
socket.on('game:roll', roll);
|
||||
socket.on('game:move', move);
|
||||
};
|
||||
+1
-59
@@ -42,64 +42,6 @@ router.post('/move', function (req, res){
|
||||
});
|
||||
});
|
||||
|
||||
function getPosition(rolledNumber, pawn){
|
||||
const { position, color } = pawn;
|
||||
switch (color){
|
||||
case 'red':
|
||||
if(pawn.position + rolledNumber <= 73){
|
||||
if(position >= 0 && position <= 3) {
|
||||
return 16;
|
||||
}else if(position <= 66 && position + rolledNumber >= 67){
|
||||
return position + rolledNumber + 1;
|
||||
}else{
|
||||
return position + rolledNumber;
|
||||
}
|
||||
}else{
|
||||
return position;
|
||||
}
|
||||
case 'blue':
|
||||
if(pawn.position + rolledNumber <= 79){
|
||||
if(position >= 4 && position <= 7){
|
||||
return 55;
|
||||
}else if(position <= 67 && position + rolledNumber > 67){
|
||||
return position + rolledNumber - 52;
|
||||
}else if(position <= 53 && position + rolledNumber >= 54){
|
||||
return position + rolledNumber + 20;
|
||||
}else{
|
||||
return position + rolledNumber;
|
||||
}
|
||||
}else{
|
||||
return position;
|
||||
}
|
||||
case 'green':
|
||||
if(pawn.position + rolledNumber <= 85){
|
||||
if(position >= 8 && position <= 11){
|
||||
return 42;
|
||||
}else if(position <= 67 && position + rolledNumber > 67){
|
||||
return position + rolledNumber - 52;
|
||||
}else if(position <= 40 && position + rolledNumber >= 41){
|
||||
return position + rolledNumber + 39;
|
||||
}else{
|
||||
return position + rolledNumber;
|
||||
}
|
||||
}else{
|
||||
return position;
|
||||
}
|
||||
case 'yellow':
|
||||
if(pawn.position + rolledNumber <= 85){
|
||||
if(position >= 12 && position <= 15){
|
||||
return 29;
|
||||
}else if(position <= 67 && position + rolledNumber > 67){
|
||||
return position + rolledNumber - 52;
|
||||
}else if(position <= 27 && position + rolledNumber >= 28){
|
||||
return position + rolledNumber + 58;
|
||||
}else{
|
||||
return position + rolledNumber;
|
||||
}
|
||||
}else{
|
||||
return position;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
module.exports = router;
|
||||
+2
-7
@@ -4,6 +4,7 @@ const cookieParser = require('cookie-parser');
|
||||
const { sessionMiddleware, wrap } = require('./controllers/serverController');
|
||||
const registerPlayerHandlers = require('./handlers/playerHandler');
|
||||
const registerRoomHandlers = require('./handlers/roomHandler');
|
||||
const registerGameHandlers = require('./handlers/gameHandler');
|
||||
const PORT = 8080;
|
||||
const mongoose = require('mongoose');
|
||||
const CONNECTION_URI = require('./credentials.js');
|
||||
@@ -75,6 +76,7 @@ io.use(wrap(sessionMiddleware));
|
||||
io.on('connection', socket => {
|
||||
registerPlayerHandlers(io, socket);
|
||||
registerRoomHandlers(io, socket);
|
||||
registerGameHandlers(io, socket);
|
||||
if (socket.request.session.roomId) {
|
||||
socket.join(socket.request.session.roomId);
|
||||
socket.emit('player:data', JSON.stringify(socket.request.session));
|
||||
@@ -82,13 +84,6 @@ io.on('connection', socket => {
|
||||
}
|
||||
});
|
||||
|
||||
//ROUTES CONFIG
|
||||
const playerRoutes = require('./routes/player');
|
||||
const gameRoutes = require('./routes/game');
|
||||
|
||||
app.use('/player', playerRoutes);
|
||||
app.use('/game', gameRoutes);
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
app.use(express.static('/app/build'));
|
||||
app.get('/', (req, res) => {
|
||||
|
||||
+73
-14
@@ -1,16 +1,75 @@
|
||||
const { colors } = require("./constants");
|
||||
const { colors } = require('./constants');
|
||||
function getStartPositions() {
|
||||
const startPositions = [];
|
||||
for (let i = 0; i < 16; i++) {
|
||||
let pawn = {};
|
||||
pawn.basePos = i;
|
||||
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;
|
||||
const startPositions = [];
|
||||
for (let i = 0; i < 16; i++) {
|
||||
let pawn = {};
|
||||
pawn.basePos = i;
|
||||
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;
|
||||
}
|
||||
module.exports = { getStartPositions };
|
||||
function getPositionAfterMove(rolledNumber, pawn) {
|
||||
const { position, color } = pawn;
|
||||
switch (color) {
|
||||
case 'red':
|
||||
if (pawn.position + rolledNumber <= 73) {
|
||||
if (position >= 0 && position <= 3) {
|
||||
return 16;
|
||||
} else if (position <= 66 && position + rolledNumber >= 67) {
|
||||
return position + rolledNumber + 1;
|
||||
} else {
|
||||
return position + rolledNumber;
|
||||
}
|
||||
} else {
|
||||
return position;
|
||||
}
|
||||
case 'blue':
|
||||
if (pawn.position + rolledNumber <= 79) {
|
||||
if (position >= 4 && position <= 7) {
|
||||
return 55;
|
||||
} else if (position <= 67 && position + rolledNumber > 67) {
|
||||
return position + rolledNumber - 52;
|
||||
} else if (position <= 53 && position + rolledNumber >= 54) {
|
||||
return position + rolledNumber + 20;
|
||||
} else {
|
||||
return position + rolledNumber;
|
||||
}
|
||||
} else {
|
||||
return position;
|
||||
}
|
||||
case 'green':
|
||||
if (pawn.position + rolledNumber <= 85) {
|
||||
if (position >= 8 && position <= 11) {
|
||||
return 42;
|
||||
} else if (position <= 67 && position + rolledNumber > 67) {
|
||||
return position + rolledNumber - 52;
|
||||
} else if (position <= 40 && position + rolledNumber >= 41) {
|
||||
return position + rolledNumber + 39;
|
||||
} else {
|
||||
return position + rolledNumber;
|
||||
}
|
||||
} else {
|
||||
return position;
|
||||
}
|
||||
case 'yellow':
|
||||
if (pawn.position + rolledNumber <= 85) {
|
||||
if (position >= 12 && position <= 15) {
|
||||
return 29;
|
||||
} else if (position <= 67 && position + rolledNumber > 67) {
|
||||
return position + rolledNumber - 52;
|
||||
} else if (position <= 27 && position + rolledNumber >= 28) {
|
||||
return position + rolledNumber + 58;
|
||||
} else {
|
||||
return position + rolledNumber;
|
||||
}
|
||||
} else {
|
||||
return position;
|
||||
}
|
||||
}
|
||||
}
|
||||
module.exports = { getStartPositions, getPositionAfterMove };
|
||||
|
||||
Reference in New Issue
Block a user