You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cryptid/cryptide_project/src/Pages/Play.tsx

181 lines
5.8 KiB

import React, { useEffect, useState } from 'react';
/* Style */
import './Play.css';
import { useTheme } from '../Style/ThemeContext';
/* Nav */
import { Link } from 'react-router-dom';
/* Component */
import ButtonImgNav from "../Components/ButtonImgNav"
import SessionService from "../services/SessionService";
/* Img */
import Person from '../res/img/Person.png';
/* Icon */
import trophy from '../res/icon/trophy.png';
import param from '../res/icon/param.png';
import share from '../res/icon/share.png';
import { socket } from '../SocketConfig';
import { useNavigate } from 'react-router-dom';
import GameCreator from '../model/GameCreator';
import { useGame } from '../Contexts/GameContext';
<<<<<<< HEAD
import { set } from 'lodash';
=======
import ScoreBoard from '../Components/ScoreBoard';
>>>>>>> origin
function Play() {
const theme=useTheme()
const [username, setUsername] = useState('');
const [nbSoloGames, setNbSoloGames] = useState(0);
const [soloBestScore, setSoloBestScore] = useState(0);
const [soloAverageTry, setSoloAverageTry] = useState(0);
useEffect(() => {
const fetchUserInformation = async () => {
try {
const sessionData = await SessionService.getSession();
console.log(sessionData);
// Vérifie si il y a une session
if (sessionData.user) {
setUsername(sessionData.user.pseudo);
setNbSoloGames(sessionData.user.soloStats.nbGames);
setSoloBestScore(sessionData.user.soloStats.bestScore);
setSoloAverageTry(sessionData.user.soloStats.averageTry);
} else {
// Pas de session on génère un guest random
setUsername(`Guest ${Math.floor(Math.random() * 100000)}`);
}
} catch (error) {
console.error(error);
}
};
fetchUserInformation();
}, []);
const { setIndicesData, setPersonData, setPersonNetworkData } = useGame();
const [room, setRoom] = useState(null);
const navigate = useNavigate();
function createLobby(){
socket.emit("lobby created")
}
function launchMastermind(){
const [networkPerson, choosenPerson, choosenIndices] = GameCreator.CreateGame(3, 30)
setPersonData(choosenPerson)
setPersonNetworkData(networkPerson)
setIndicesData(choosenIndices)
setIndicesData(choosenIndices)
navigate('/game?solo=true');
}
useEffect(() => {
const handleLobbyCreated = (newRoom: any) => {
setRoom(newRoom);
};
// Ajouter l'event listener
socket.on('lobby created', handleLobbyCreated);
// Nettoyer l'event listener lors du démontage du composant
return () => {
socket.off('lobby created', handleLobbyCreated);
};
}, []); // Aucune dépendance ici
useEffect(() => {
<<<<<<< HEAD
if (room !== null) {
const nouvelleURL = `/lobby?room=${room}`;
navigate(nouvelleURL);
}
}, [room, navigate]);
=======
if (room !== null) {
const nouvelleURL = `/lobby?room=${room}`;
navigate(nouvelleURL);
}
}, [room, navigate]);
>>>>>>> origin
return (
<div className="MainContainer">
<div className="leftContainer">
{/* <button className='ButtonNav'>
Param
</button> */}
<ButtonImgNav dest='/signup' img={Person} text="Gestion du compte"/>
</div>
<div className="MidContainer">
<div>
<h2>
{username}
</h2>
<img src={Person}
height='300'
width='300'
alt="Person"
/>
</div>
<div className='buttonGroupVertical'>
<button onClick={launchMastermind} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Jouer seul </button>
<button onClick={createLobby} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Créer une partie </button>
<button className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Rejoindre </button>
</div>
</div>
<div className='rightContainer'>
<<<<<<< HEAD
<div className='LeaderBoardiv'>
<img src={trophy}
height='100'
width='100'
alt="Person2"
/>
<div className='textBoard'>
<div>
<h4>
Parties jouées : <br/>
High-Score : <br/>
Nombre d'essaie moyen : <br/>
</h4>
</div>
<div>
<h4>
{nbSoloGames} <br/>
{soloBestScore} <br/>
{soloAverageTry} <br/>
</h4>
</div>
</div>
{/* <button className='ButtonNav'>
Share
</button> */}
<ButtonImgNav dest='/' img={share}/>
</div>
=======
<ScoreBoard/>
>>>>>>> origin
</div>
</div>
);
}
export default Play;