added useSocketData hook
This commit is contained in:
parent
469a60871a
commit
949af0622b
@ -1,38 +0,0 @@
|
|||||||
import React, { useEffect, useContext } from 'react';
|
|
||||||
import { SocketContext } from '../../../App';
|
|
||||||
import one from '../../../images/dice/1.png';
|
|
||||||
import two from '../../../images/dice/2.png';
|
|
||||||
import three from '../../../images/dice/3.png';
|
|
||||||
import four from '../../../images/dice/4.png';
|
|
||||||
import five from '../../../images/dice/5.png';
|
|
||||||
import six from '../../../images/dice/6.png';
|
|
||||||
import roll from '../../../images/dice/roll.png';
|
|
||||||
|
|
||||||
const Dice = ({ rolledNumberCallback, rolledNumber, nowMoving, color, movingPlayer }) => {
|
|
||||||
const socket = useContext(SocketContext);
|
|
||||||
|
|
||||||
const images = [one, two, three, four, five, six, roll];
|
|
||||||
|
|
||||||
const handleRoll = () => {
|
|
||||||
socket.emit('game:roll');
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
socket.on('game:roll', number => {
|
|
||||||
rolledNumberCallback(number);
|
|
||||||
});
|
|
||||||
}, [socket, rolledNumberCallback]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={`dice-container dice-${color}`}>
|
|
||||||
{movingPlayer === color ? (
|
|
||||||
rolledNumber ? (
|
|
||||||
<img src={images[rolledNumber - 1]} alt={rolledNumber} width='100' height='100' />
|
|
||||||
) : nowMoving ? (
|
|
||||||
<img src={images[6]} className='roll' alt='roll' width='100' height='100' onClick={handleRoll} />
|
|
||||||
) : null
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default Dice;
|
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import React, { useState, useEffect, useContext } from 'react';
|
import React, { useState, useEffect, useContext } from 'react';
|
||||||
import ReactLoading from 'react-loading';
|
import ReactLoading from 'react-loading';
|
||||||
import { PlayerDataContext, SocketContext } from '../../App';
|
import { PlayerDataContext, SocketContext } from '../../App';
|
||||||
|
import useSocketData from '../../hooks/useSocketData';
|
||||||
import Map from './Map/Map';
|
import Map from './Map/Map';
|
||||||
import Navbar from '../Navbar/Navbar';
|
import Navbar from '../Navbar/Navbar';
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ const Gameboard = () => {
|
|||||||
const [pawns, setPawns] = useState([]);
|
const [pawns, setPawns] = useState([]);
|
||||||
const [players, setPlayers] = useState([]);
|
const [players, setPlayers] = useState([]);
|
||||||
|
|
||||||
const [rolledNumber, setRolledNumber] = useState(null);
|
const [rolledNumber, setRolledNumber] = useSocketData('game:roll');
|
||||||
const [time, setTime] = useState();
|
const [time, setTime] = useState();
|
||||||
const [isReady, setIsReady] = useState();
|
const [isReady, setIsReady] = useState();
|
||||||
const [nowMoving, setNowMoving] = useState(false);
|
const [nowMoving, setNowMoving] = useState(false);
|
||||||
@ -48,10 +49,6 @@ const Gameboard = () => {
|
|||||||
});
|
});
|
||||||
}, [socket]);
|
}, [socket]);
|
||||||
|
|
||||||
const rolledNumberCallback = number => {
|
|
||||||
setRolledNumber(number);
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{(players[0] && !started) || (time && started) ? (
|
{(players[0] && !started) || (time && started) ? (
|
||||||
@ -64,7 +61,6 @@ const Gameboard = () => {
|
|||||||
movingPlayer={movingPlayer}
|
movingPlayer={movingPlayer}
|
||||||
rolledNumber={rolledNumber}
|
rolledNumber={rolledNumber}
|
||||||
nowMoving={nowMoving}
|
nowMoving={nowMoving}
|
||||||
rolledNumberCallback={rolledNumberCallback}
|
|
||||||
/>
|
/>
|
||||||
<Map pawns={pawns} nowMoving={nowMoving} rolledNumber={rolledNumber} />
|
<Map pawns={pawns} nowMoving={nowMoving} rolledNumber={rolledNumber} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
24
src/components/Navbar/Dice/Dice.jsx
Normal file
24
src/components/Navbar/Dice/Dice.jsx
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import React, { useContext } from 'react';
|
||||||
|
import { SocketContext } from '../../../App';
|
||||||
|
import images from '../../../constants/diceImages';
|
||||||
|
|
||||||
|
const Dice = ({ rolledNumber, nowMoving, color, movingPlayer }) => {
|
||||||
|
const socket = useContext(SocketContext);
|
||||||
|
|
||||||
|
const handleRoll = () => {
|
||||||
|
socket.emit('game:roll');
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={`dice-container dice-${color}`}>
|
||||||
|
{movingPlayer === color ? (
|
||||||
|
rolledNumber ? (
|
||||||
|
<img src={images[rolledNumber - 1]} alt={rolledNumber} width='100' height='100' />
|
||||||
|
) : nowMoving ? (
|
||||||
|
<img src={images[6]} className='roll' alt='roll' width='100' height='100' onClick={handleRoll} />
|
||||||
|
) : null
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default Dice;
|
||||||
0
src/components/Navbar/Dice/Dice.test.js
Normal file
0
src/components/Navbar/Dice/Dice.test.js
Normal file
@ -7,23 +7,6 @@
|
|||||||
.roll {
|
.roll {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.ready-container {
|
|
||||||
display: flex;
|
|
||||||
width: 300px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
flex-direction: column;
|
|
||||||
flex-flow: row-reverse;
|
|
||||||
background-color: grey;
|
|
||||||
border-radius: 10px;
|
|
||||||
border: 2px solid white;
|
|
||||||
}
|
|
||||||
.ready-container > label {
|
|
||||||
margin-left: 10px;
|
|
||||||
margin-right: 10px;
|
|
||||||
width: 100px;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
.player-container {
|
.player-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -52,4 +35,3 @@
|
|||||||
grid-column: 2;
|
grid-column: 2;
|
||||||
grid-row: 4;
|
grid-row: 4;
|
||||||
}
|
}
|
||||||
/* Styl dla overlay */
|
|
||||||
|
|||||||
@ -1,29 +1,31 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Dice from '../Gameboard/Dice/Dice';
|
import Dice from './Dice/Dice';
|
||||||
import NameContainer from './NameContainer/NameContainer';
|
import NameContainer from './NameContainer/NameContainer';
|
||||||
import ReadyButton from './ReadyButton/ReadyButton';
|
import ReadyButton from './ReadyButton/ReadyButton';
|
||||||
import './Navbar.css';
|
import './Navbar.css';
|
||||||
|
import { PLAYER_COLORS } from '../../constants/colors';
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
import { PlayerDataContext } from '../../App';
|
import { PlayerDataContext } from '../../App';
|
||||||
const Navbar = ({ players, started, time, isReady, rolledNumber, nowMoving, rolledNumberCallback, movingPlayer }) => {
|
|
||||||
|
const Navbar = ({ players, started, time, isReady, rolledNumber, nowMoving, movingPlayer }) => {
|
||||||
const context = useContext(PlayerDataContext);
|
const context = useContext(PlayerDataContext);
|
||||||
const colors = ['red', 'blue', 'green', 'yellow'];
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{players.map((player, index) => (
|
{players.map((player, index) => (
|
||||||
<div className={`player-container ${colors[index]}`} key={index}>
|
<div className={`player-container ${PLAYER_COLORS[index]}`} key={index}>
|
||||||
<NameContainer player={player} time={time} />
|
<NameContainer player={player} time={time} />
|
||||||
<Dice
|
<Dice
|
||||||
movingPlayer={movingPlayer}
|
movingPlayer={movingPlayer}
|
||||||
rolledNumber={rolledNumber}
|
rolledNumber={rolledNumber}
|
||||||
nowMoving={nowMoving}
|
nowMoving={nowMoving}
|
||||||
color={colors[index]}
|
color={PLAYER_COLORS[index]}
|
||||||
rolledNumberCallback={rolledNumberCallback}
|
|
||||||
/>
|
/>
|
||||||
{context.color !== player.color || started ? null : <ReadyButton isReady={isReady} />}
|
{context.color === player.color || (!started && <ReadyButton isReady={isReady} />)}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Navbar;
|
export default Navbar;
|
||||||
|
|||||||
11
src/constants/diceImages.js
Normal file
11
src/constants/diceImages.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import one from '../images/dice/1.png';
|
||||||
|
import two from '../images/dice/2.png';
|
||||||
|
import three from '../images/dice/3.png';
|
||||||
|
import four from '../images/dice/4.png';
|
||||||
|
import five from '../images/dice/5.png';
|
||||||
|
import six from '../images/dice/6.png';
|
||||||
|
import roll from '../images/dice/roll.png';
|
||||||
|
|
||||||
|
const diceImages = [one, two, three, four, five, six, roll];
|
||||||
|
|
||||||
|
export default diceImages;
|
||||||
13
src/hooks/useSocketData.js
Normal file
13
src/hooks/useSocketData.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { useState, useContext } from 'react';
|
||||||
|
import { SocketContext } from '../App';
|
||||||
|
|
||||||
|
const useSocketData = port => {
|
||||||
|
const socket = useContext(SocketContext);
|
||||||
|
const [data, setData] = useState(null);
|
||||||
|
socket.on(port, data => {
|
||||||
|
setData(data);
|
||||||
|
});
|
||||||
|
return [data, setData];
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useSocketData;
|
||||||
Loading…
Reference in New Issue
Block a user