added rollednumber to room values
This commit is contained in:
parent
4e52512c7d
commit
4bd50f4a6f
@ -8,18 +8,17 @@ const { getPositionAfterMove } = require('../utils/functions');
|
|||||||
*/
|
*/
|
||||||
module.exports = (io, socket) => {
|
module.exports = (io, socket) => {
|
||||||
const req = socket.request;
|
const req = socket.request;
|
||||||
|
|
||||||
const roll = async () => {
|
const roll = async () => {
|
||||||
const rolledNumber = Math.ceil(Math.random() * 6);
|
const rolledNumber = Math.ceil(Math.random() * 6);
|
||||||
req.session.reload(async err => {
|
const room = await RoomModel.findOne({ _id: req.session.roomId }).exec();
|
||||||
if (err) return socket.disconnect();
|
room.rolledNumber = rolledNumber;
|
||||||
// Saving session data
|
await RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room).exec();
|
||||||
req.session.rolledNumber = rolledNumber;
|
|
||||||
req.session.save();
|
|
||||||
io.to(req.session.roomId.toString()).emit('game:roll', rolledNumber);
|
io.to(req.session.roomId.toString()).emit('game:roll', rolledNumber);
|
||||||
|
|
||||||
const isPossible = await isMovePossible(req.session.roomId, req.session.color, rolledNumber);
|
const isPossible = await isMovePossible(req.session.roomId, req.session.color, rolledNumber);
|
||||||
if (!isPossible) {
|
if (!isPossible) {
|
||||||
RoomModel.findOne({ _id: req.session.roomId }, (err, room) => {
|
const room = await RoomModel.findOne({ _id: req.session.roomId }).exec();
|
||||||
// Updating moving player
|
|
||||||
const playerIndex = room.players.findIndex(player => player.nowMoving === true);
|
const playerIndex = room.players.findIndex(player => player.nowMoving === true);
|
||||||
const roomSize = room.players.length;
|
const roomSize = room.players.length;
|
||||||
room.players[playerIndex].nowMoving = false;
|
room.players[playerIndex].nowMoving = false;
|
||||||
@ -30,15 +29,13 @@ module.exports = (io, socket) => {
|
|||||||
}
|
}
|
||||||
// Updating timer
|
// Updating timer
|
||||||
room.nextMoveTime = Date.now() + 15000;
|
room.nextMoveTime = Date.now() + 15000;
|
||||||
|
room.rolledNumber = null;
|
||||||
// Pushing above data to database
|
// Pushing above data to database
|
||||||
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => {
|
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => {
|
||||||
if (err) return err;
|
if (err) return err;
|
||||||
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
||||||
io.to(req.session.roomId.toString()).emit('game:skip');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
Function responsible for check if any pawn of the player can move
|
Function responsible for check if any pawn of the player can move
|
||||||
@ -46,6 +43,7 @@ module.exports = (io, socket) => {
|
|||||||
Player's pawn can move if:
|
Player's pawn can move if:
|
||||||
1) (if player's pawn is in base) if the rolled number is 1,6
|
1) (if player's pawn is in base) if the rolled number is 1,6
|
||||||
2) (if player's pawn is near finish line) if the move does not go beyond the win line
|
2) (if player's pawn is near finish line) if the move does not go beyond the win line
|
||||||
|
Returns boolean
|
||||||
*/
|
*/
|
||||||
const isMovePossible = async (roomId, playerColor, rolledNumber) => {
|
const isMovePossible = async (roomId, playerColor, rolledNumber) => {
|
||||||
let isMovePossible = false;
|
let isMovePossible = false;
|
||||||
@ -66,8 +64,8 @@ module.exports = (io, socket) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const skip = async () => {
|
const skip = async () => {
|
||||||
await RoomModel.findOne({ _id: req.session.roomId }, (err, room) => {
|
const room = await RoomModel.findOne({ _id: req.session.roomId }).exec();
|
||||||
if (room.nextMoveTime >= Date.now()) return err;
|
if (room.nextMoveTime >= Date.now()) return;
|
||||||
// Updating moving player
|
// Updating moving player
|
||||||
const playerIndex = room.players.findIndex(player => player.nowMoving === true);
|
const playerIndex = room.players.findIndex(player => player.nowMoving === true);
|
||||||
const roomSize = room.players.length;
|
const roomSize = room.players.length;
|
||||||
@ -79,20 +77,18 @@ module.exports = (io, socket) => {
|
|||||||
}
|
}
|
||||||
// Updating timer
|
// Updating timer
|
||||||
room.nextMoveTime = Date.now() + 15000;
|
room.nextMoveTime = Date.now() + 15000;
|
||||||
|
room.rolledNumber = null;
|
||||||
setTimeout(skip, 15000);
|
setTimeout(skip, 15000);
|
||||||
// Pushing above data to database
|
// Pushing above data to database
|
||||||
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => {
|
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, err => {
|
||||||
if (err) return err;
|
if (err) return err;
|
||||||
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
||||||
io.to(req.session.roomId.toString()).emit('game:skip');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
const move = ({ pawnId }) => {
|
const move = async ({ pawnId }) => {
|
||||||
RoomModel.findOne({ _id: req.session.roomId }, function (err, room) {
|
const room = await RoomModel.findOne({ _id: req.session.roomId }).exec();
|
||||||
if (!room) return err;
|
|
||||||
const pawnIndex = room.pawns.findIndex(pawn => pawn._id == pawnId);
|
const pawnIndex = room.pawns.findIndex(pawn => pawn._id == pawnId);
|
||||||
room.pawns[pawnIndex].position = getPositionAfterMove(req.session.rolledNumber, room.pawns[pawnIndex]);
|
room.pawns[pawnIndex].position = getPositionAfterMove(room.rolledNumber, room.pawns[pawnIndex]);
|
||||||
const pawnsOnPos = room.pawns.filter(pawn => pawn.position == room.pawns[pawnIndex].position);
|
const pawnsOnPos = room.pawns.filter(pawn => pawn.position == room.pawns[pawnIndex].position);
|
||||||
pawnsOnPos.forEach(pawn => {
|
pawnsOnPos.forEach(pawn => {
|
||||||
if (pawn.color !== req.session.color) {
|
if (pawn.color !== req.session.color) {
|
||||||
@ -111,16 +107,14 @@ module.exports = (io, socket) => {
|
|||||||
}
|
}
|
||||||
// Updating timer
|
// Updating timer
|
||||||
room.nextMoveTime = Date.now() + 15000;
|
room.nextMoveTime = Date.now() + 15000;
|
||||||
|
room.rolledNumber = null;
|
||||||
setTimeout(skip, 15000);
|
setTimeout(skip, 15000);
|
||||||
// Pushing above data to database
|
// Pushing above data to database
|
||||||
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, (err, updatedRoom) => {
|
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, (err, updatedRoom) => {
|
||||||
if (!updatedRoom) return err;
|
if (!updatedRoom) return err;
|
||||||
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
||||||
io.to(req.session.roomId.toString()).emit('game:move');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('game:roll', roll);
|
socket.on('game:roll', roll);
|
||||||
socket.on('game:move', move);
|
socket.on('game:move', move);
|
||||||
socket.on('game:skip', skip);
|
socket.on('game:skip', skip);
|
||||||
|
|||||||
@ -7,6 +7,7 @@ var RoomSchema = new Schema({
|
|||||||
started: { type: Boolean, default: false },
|
started: { type: Boolean, default: false },
|
||||||
full: { type: Boolean, default: false },
|
full: { type: Boolean, default: false },
|
||||||
nextMoveTime: Number,
|
nextMoveTime: Number,
|
||||||
|
rolledNumber: Number,
|
||||||
players: [
|
players: [
|
||||||
{
|
{
|
||||||
name: String,
|
name: String,
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import Navbar from './Navbar';
|
|||||||
const Gameboard = () => {
|
const Gameboard = () => {
|
||||||
// Context data
|
// Context data
|
||||||
const socket = useContext(SocketContext);
|
const socket = useContext(SocketContext);
|
||||||
const context = useContext(PlayerDataContext);
|
const player = useContext(PlayerDataContext);
|
||||||
// Render data
|
// Render data
|
||||||
const [pawns, setPawns] = useState([]);
|
const [pawns, setPawns] = useState([]);
|
||||||
const [players, setPlayers] = useState([]);
|
const [players, setPlayers] = useState([]);
|
||||||
@ -32,13 +32,7 @@ const Gameboard = () => {
|
|||||||
}
|
}
|
||||||
}, [pawns]);
|
}, [pawns]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
socket.emit('room:data', context.roomId);
|
socket.emit('room:data', player.roomId);
|
||||||
socket.on('game:skip', () => {
|
|
||||||
setRolledNumber(null);
|
|
||||||
});
|
|
||||||
socket.on('game:move', () => {
|
|
||||||
setRolledNumber(null);
|
|
||||||
});
|
|
||||||
socket.on('room:data', data => {
|
socket.on('room:data', data => {
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
// Filling navbar with empty player nick container
|
// Filling navbar with empty player nick container
|
||||||
@ -48,17 +42,18 @@ const Gameboard = () => {
|
|||||||
// Checks if client is currently moving player by session ID
|
// Checks if client is currently moving player by session ID
|
||||||
const nowMovingPlayer = data.players.find(player => player.nowMoving === true);
|
const nowMovingPlayer = data.players.find(player => player.nowMoving === true);
|
||||||
if (nowMovingPlayer) {
|
if (nowMovingPlayer) {
|
||||||
if (nowMovingPlayer._id === context.playerId) {
|
if (nowMovingPlayer._id === player.playerId) {
|
||||||
setNowMoving(true);
|
setNowMoving(true);
|
||||||
} else {
|
} else {
|
||||||
setRolledNumber(null);
|
|
||||||
setNowMoving(false);
|
setNowMoving(false);
|
||||||
}
|
}
|
||||||
setMovingPlayer(nowMovingPlayer.color);
|
setMovingPlayer(nowMovingPlayer.color);
|
||||||
}
|
}
|
||||||
const currentPlayer = data.players.find(player => player._id === context.playerId);
|
const currentPlayer = data.players.find(player => player._id === player.playerId);
|
||||||
|
|
||||||
checkWin();
|
checkWin();
|
||||||
setIsReady(currentPlayer.ready);
|
setIsReady(currentPlayer.ready);
|
||||||
|
setRolledNumber(data.rolledNumber);
|
||||||
setPlayers(data.players);
|
setPlayers(data.players);
|
||||||
setPawns(data.pawns);
|
setPawns(data.pawns);
|
||||||
setTime(data.nextMoveTime);
|
setTime(data.nextMoveTime);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user