added rollednumber to room values

This commit is contained in:
Wenszel 2022-06-09 13:38:05 +02:00
parent 4e52512c7d
commit 4bd50f4a6f
3 changed files with 79 additions and 89 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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);