Photo de profile des users sur toutes les pages + script pour lancer les deux servers en même temps

pull/83/head
Thomas Chazot 1 year ago
parent fcf2152cd6
commit 31885d7910

@ -25,7 +25,7 @@ const PlayerList: React.FC<PlayerListProps> = ({ players, playerTouched, setPlay
{ {
//@ts-ignore //@ts-ignore
players.map((player, index) => ( players.map((player, index) => (
player.id!=socket.id && <PersonStatus img={Person} state={Person} key={index} name={player.pseudo + " " + colorToEmoji(positionToColor(index), true)} playerTouched={playerTouched} setPlayerTouched={setPlayerTouched} index={index} showCircle={true}/> player.id!=socket.id && <PersonStatus img={player.profilePicture} state={Person} key={index} name={player.pseudo + " " + colorToEmoji(positionToColor(index), true)} playerTouched={playerTouched} setPlayerTouched={setPlayerTouched} index={index} showCircle={true}/>
)) ))
} }
</div> </div>

@ -0,0 +1,14 @@
async function loadImageAsync(url: string): Promise<string> {
try {
const response = await fetch(url);
const blob = await response.blob();
// Faire quelque chose avec le blob, par exemple, créer une URL blob
const blobUrl = URL.createObjectURL(blob);
return blobUrl
} catch (error) {
throw new Error("Erreur lors du chargement de l'image :");
}
}
export {loadImageAsync}

@ -7,6 +7,9 @@ import { useTheme } from '../Style/ThemeContext';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import ButtonImgNav from '../Components/ButtonImgNav'; import ButtonImgNav from '../Components/ButtonImgNav';
import defaultImg from "../res/img/Person.png"
import {loadImageAsync} from "../ImageHelper"
// @ts-ignore // @ts-ignore
function Home() { function Home() {
@ -18,11 +21,16 @@ function Home() {
if (user == null){ if (user == null){
manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{
if (user!=null){ if (user!=null){
setUserData(user)
if (loggedIn){ if (loggedIn){
login() login()
setUserData(user)
}
else{
loadImageAsync(defaultImg).then((blob) => {
user.profilePicture=blob
setUserData(user)
})
} }
console.log('isLoggedIn : ', isLoggedIn);
} }
}) })
} }

@ -27,6 +27,8 @@ import Bot from '../model/Bot';
import User from '../model/User'; import User from '../model/User';
import { useAuth } from '../Contexts/AuthContext'; import { useAuth } from '../Contexts/AuthContext';
import SessionService from '../services/SessionService'; import SessionService from '../services/SessionService';
import defaultImg from "../res/img/Person.png"
import {loadImageAsync} from "../ImageHelper"
let gameStarted = false let gameStarted = false
@ -48,6 +50,8 @@ function Lobby() {
socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100), "").toJson()) socket.emit("lobby joined", room, new EasyBot("botId" + Math.floor(Math.random() * 1000), "Bot" + Math.floor(Math.random() * 100), "").toJson())
} }
useEffect(() => { useEffect(() => {
if (first){ if (first){
first=false first=false
@ -55,9 +59,15 @@ function Lobby() {
if (user == null){ if (user == null){
manager.userService.fetchUserInformation().then(([u, loggedIn]) => { manager.userService.fetchUserInformation().then(([u, loggedIn]) => {
if (u!=null){ if (u!=null){
setUserData(u)
if (loggedIn){ if (loggedIn){
login() login()
setUserData(u)
}
else{
loadImageAsync(defaultImg).then((blob) => {
u.profilePicture=blob
setUserData(u)
})
} }
socket.emit("lobby joined", room, u.toJson()) socket.emit("lobby joined", room, u.toJson())
} }
@ -108,6 +118,7 @@ function Lobby() {
for (const p of tab){ for (const p of tab){
tmpTab.push(JSONParser.JSONToPlayer(p)) tmpTab.push(JSONParser.JSONToPlayer(p))
} }
console.log(tmpTab)
setPlayersData(tmpTab) setPlayersData(tmpTab)
}) })

@ -12,8 +12,6 @@ import ButtonImgNav from "../Components/ButtonImgNav"
import SessionService from "../services/SessionService"; import SessionService from "../services/SessionService";
/* Img */ /* Img */
import Person from '../res/img/Person.png';
/* Icon */ /* Icon */
import { socket } from '../SocketConfig'; import { socket } from '../SocketConfig';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
@ -21,16 +19,39 @@ import GameCreator from '../model/GameCreator';
import { useGame } from '../Contexts/GameContext'; import { useGame } from '../Contexts/GameContext';
import ScoreBoard from '../Components/ScoreBoard'; import ScoreBoard from '../Components/ScoreBoard';
import defaultImg from "../res/img/Person.png"
/* Types */ /* Types */
import User from '../model/User'; import User from '../model/User';
import { loadImageAsync } from '../ImageHelper';
function Play() { function Play() {
const theme=useTheme() const theme=useTheme()
const {user} = useAuth(); const {isLoggedIn, login, user, setUserData, manager } = useAuth();
const { setIndicesData, setPersonData, setPersonNetworkData } = useGame(); const { setIndicesData, setPersonData, setPersonNetworkData } = useGame();
useEffect(() => {
if (user == null){
manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{
if (user!=null){
if (loggedIn){
login()
setUserData(user)
}
else{
loadImageAsync(defaultImg).then((blob) => {
user.profilePicture=blob
setUserData(user)
})
}
}
})
}
}, [isLoggedIn]);
const [room, setRoom] = useState(null); const [room, setRoom] = useState(null);
const navigate = useNavigate(); const navigate = useNavigate();
@ -82,7 +103,7 @@ function Play() {
{/* <button className='ButtonNav'> {/* <button className='ButtonNav'>
Param Param
</button> */} </button> */}
<ButtonImgNav dest='/signup' img={Person} text="Gestion du compte"/> <ButtonImgNav dest='/signup' img={defaultImg} text="Gestion du compte"/>
</div> </div>
<div className="MidContainer"> <div className="MidContainer">
<div> <div>

@ -1,16 +1,12 @@
import Player from "./Player"; import Player from "./Player";
import defaultpdp from "../res/img/Person.png" import defaultImg from "../res/img/Person.png"
class User extends Player{ class User extends Player{
public soloStats: any public soloStats: any
public onlineStats: any public onlineStats: any
constructor(id: string, pseudo: string, profilePicture: string, soloStats: any, onlineStats: any){ constructor(id: string, pseudo: string, profilePicture: string, soloStats: any, onlineStats: any){
if (profilePicture == ""){ super(id, pseudo, profilePicture || defaultImg)
profilePicture = defaultpdp
}
super(id, pseudo, profilePicture)
this.soloStats=soloStats this.soloStats=soloStats
this.onlineStats=onlineStats this.onlineStats=onlineStats
} }
@ -20,6 +16,7 @@ class User extends Player{
return { return {
type: "User", type: "User",
id: this.id, id: this.id,
profilePicture: this.profilePicture,
pseudo: this.pseudo, pseudo: this.pseudo,
soloStats: this.soloStats, soloStats: this.soloStats,
onlineStats: this.onlineStats onlineStats: this.onlineStats

@ -0,0 +1,5 @@
#!/bin/sh
node server/server.js &
node src/server/server.js &
Loading…
Cancel
Save