added displaying dice to all players

This commit is contained in:
Wenszel 2022-06-04 17:15:31 +02:00
parent bcb3473360
commit 5f1f068440
10 changed files with 25 additions and 21 deletions

View File

@ -15,7 +15,7 @@ module.exports = (io, socket) => {
// Saving session data // Saving session data
req.session.rolledNumber = rolledNumber; req.session.rolledNumber = rolledNumber;
req.session.save(); req.session.save();
socket.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) => { RoomModel.findOne({ _id: req.session.roomId }, (err, room) => {
@ -34,8 +34,7 @@ module.exports = (io, socket) => {
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));
socket.emit('game:move'); io.to(req.session.roomId.toString()).emit('game:skip');
socket.emit('game:skip');
}); });
}); });
} }
@ -51,7 +50,6 @@ module.exports = (io, socket) => {
const isMovePossible = async (roomId, playerColor, rolledNumber) => { const isMovePossible = async (roomId, playerColor, rolledNumber) => {
let isMovePossible = false; let isMovePossible = false;
await RoomModel.findOne({ _id: roomId.toString() }, (err, room) => { await RoomModel.findOne({ _id: roomId.toString() }, (err, room) => {
if (err) return err;
const playerPawns = room.pawns.filter(pawn => pawn.color === playerColor); const playerPawns = room.pawns.filter(pawn => pawn.color === playerColor);
// Checking each player's pawn // Checking each player's pawn
for (const pawn of playerPawns) { for (const pawn of playerPawns) {
@ -86,8 +84,7 @@ module.exports = (io, socket) => {
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));
socket.emit('game:move'); io.to(req.session.roomId.toString()).emit('game:skip');
socket.emit('game:skip');
}); });
}); });
}; };
@ -118,7 +115,7 @@ module.exports = (io, socket) => {
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));
socket.emit('game:move'); io.to(req.session.roomId.toString()).emit('game:move');
}); });
}); });
}; };

View File

@ -19,6 +19,7 @@ const Gameboard = () => {
const [nowMoving, setNowMoving] = useState(false); const [nowMoving, setNowMoving] = useState(false);
const [started, setStarted] = useState(false); const [started, setStarted] = useState(false);
const [movingPlayer, setMovingPlayer] = useState('red');
const checkWin = useCallback(() => { const checkWin = useCallback(() => {
// Player wins when all pawns with same color are inside end base // Player wins when all pawns with same color are inside end base
if (pawns.filter(pawn => pawn.color === 'red' && pawn.position === 73).length === 4) { if (pawns.filter(pawn => pawn.color === 'red' && pawn.position === 73).length === 4) {
@ -33,6 +34,12 @@ const Gameboard = () => {
}, [pawns]); }, [pawns]);
useEffect(() => { useEffect(() => {
socket.emit('room:data', context.roomId); socket.emit('room:data', context.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
@ -51,6 +58,7 @@ const Gameboard = () => {
} }
const currentPlayer = data.players.find(player => player._id === context.playerId); const currentPlayer = data.players.find(player => player._id === context.playerId);
checkWin(); checkWin();
setMovingPlayer(nowMovingPlayer.color);
setIsReady(currentPlayer.ready); setIsReady(currentPlayer.ready);
setPlayers(data.players); setPlayers(data.players);
setPawns(data.pawns); setPawns(data.pawns);
@ -69,7 +77,12 @@ const Gameboard = () => {
{players ? ( {players ? (
<> <>
<Navbar players={players} started={started} time={time} isReady={isReady} /> <Navbar players={players} started={started} time={time} isReady={isReady} />
{nowMoving ? <Dice nowMoving={nowMoving} rolledNumberCallback={rolledNumberCallback} /> : null} <Dice
rolledNumber={rolledNumber}
nowMoving={nowMoving}
color={movingPlayer}
rolledNumberCallback={rolledNumberCallback}
/>
<Map pawns={pawns} nowMoving={nowMoving} rolledNumber={rolledNumber} /> <Map pawns={pawns} nowMoving={nowMoving} rolledNumber={rolledNumber} />
</> </>
) : ( ) : (

View File

@ -6,25 +6,20 @@ import three from '../../images/dice/3.png';
import four from '../../images/dice/4.png'; import four from '../../images/dice/4.png';
import five from '../../images/dice/5.png'; import five from '../../images/dice/5.png';
import six from '../../images/dice/6.png'; import six from '../../images/dice/6.png';
const Dice = ({ rolledNumberCallback, rolledNumber, nowMoving, color }) => {
const Dice = ({ rolledNumberCallback, nowMoving }) => {
const socket = useContext(SocketContext); const socket = useContext(SocketContext);
const [rolledNumber, setRolledNumber] = useState();
const [images] = useState([one, two, three, four, five, six]); const [images] = useState([one, two, three, four, five, six]);
const handleRoll = () => { const handleRoll = () => {
socket.emit('game:roll'); socket.emit('game:roll');
}; };
useEffect(() => { useEffect(() => {
socket.on('game:roll', number => { socket.on('game:roll', number => {
const utterance = new SpeechSynthesisUtterance(number);
speechSynthesis.speak(utterance);
setRolledNumber(number);
rolledNumberCallback(number); rolledNumberCallback(number);
}); });
}, []); }, []);
return ( return (
<div className='dice-container'> <div className={`dice-container dice-${color}`}>
{rolledNumber ? ( {true ? (
<img src={images[rolledNumber - 1]} alt={rolledNumber} width='100' height='100' /> <img src={images[rolledNumber - 1]} alt={rolledNumber} width='100' height='100' />
) : nowMoving ? ( ) : nowMoving ? (
<button onClick={handleRoll}> Roll </button> <button onClick={handleRoll}> Roll </button>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -17,10 +17,9 @@ canvas {
border-radius: 15px; border-radius: 15px;
border: 2px solid black; border: 2px solid black;
} }
.dice-container { .dice-container > img {
position: absolute; width: 50px;
top: 30%; height: 50px;
left: 20%;
} }
.navbar-container { .navbar-container {
display: flex; display: flex;