|
|
|
@ -1,27 +1,16 @@
|
|
|
|
|
import React, { useEffect, useState } from "react";
|
|
|
|
|
import { DataSet, Network} from "vis-network/standalone/esm/vis-network";
|
|
|
|
|
import EdgesCreator from "../model/EdgesCreator";
|
|
|
|
|
import GraphCreator from "../model/Graph/GraphCreator";
|
|
|
|
|
import IndiceChooser from "../model/IndiceChooser";
|
|
|
|
|
import SportIndice from "../model/Indices/SportIndice";
|
|
|
|
|
import NetworkGenerator from "../model/NetworkGenerator";
|
|
|
|
|
import Sport from "../model/Sport";
|
|
|
|
|
import Stub from "../model/Stub";
|
|
|
|
|
import "./GraphContainer.css";
|
|
|
|
|
import NodePerson from "../model/Graph/NodePerson";
|
|
|
|
|
import IndiceTesterFactory from "../model/Factory/IndiceTesterFactory";
|
|
|
|
|
import GameCreator from "../model/GameCreator";
|
|
|
|
|
import io from 'socket.io-client';
|
|
|
|
|
import JSONParser from "../JSONParser";
|
|
|
|
|
import PersonNetwork from "../model/PersonsNetwork";
|
|
|
|
|
import Person from "../model/Person";
|
|
|
|
|
import Indice from "../model/Indices/Indice";
|
|
|
|
|
import { Navigate, useLocation, useNavigate } from "react-router-dom";
|
|
|
|
|
import { useGame } from "../Contexts/GameContext";
|
|
|
|
|
import { socket } from "../SocketConfig"
|
|
|
|
|
import { colorToEmoji, positionToColor } from "../ColorHelper";
|
|
|
|
|
import { ColorToHexa } from "../model/EnumExtender";
|
|
|
|
|
import Bot from "../model/Bot";
|
|
|
|
|
import NodePerson from "../model/Graph/NodePerson";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface MyGraphComponentProps {
|
|
|
|
@ -33,6 +22,7 @@ interface MyGraphComponentProps {
|
|
|
|
|
changecptTour: (newcptTour : number) => void
|
|
|
|
|
addToHistory: (message : string) => void
|
|
|
|
|
solo : boolean
|
|
|
|
|
showLast: boolean
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let lastAskingPlayer = 0
|
|
|
|
@ -48,9 +38,10 @@ let botTurnToCube = false
|
|
|
|
|
let lastSocketId= ""
|
|
|
|
|
let firstLap = true
|
|
|
|
|
let cptHistory = 0
|
|
|
|
|
let lastNodes: NodePerson[] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleShowTurnBar, handleTurnBarTextChange, playerTouched, setPlayerTouched, changecptTour, solo, addToHistory}) => {
|
|
|
|
|
const MyGraphComponent: React.FC<MyGraphComponentProps> = ({onNodeClick, handleShowTurnBar, handleTurnBarTextChange, playerTouched, setPlayerTouched, changecptTour, solo, addToHistory, showLast}) => {
|
|
|
|
|
let cptTour: number = 0
|
|
|
|
|
|
|
|
|
|
const { indices, indice, person, personNetwork, setNodeIdData, players, askedPersons, setActualPlayerIndexData, room, actualPlayerIndex, turnPlayerIndex, setTurnPlayerIndexData, setWinnerData } = useGame();
|
|
|
|
@ -78,6 +69,25 @@ let cptTour: number = 0
|
|
|
|
|
}
|
|
|
|
|
}, [playerTouched])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
const tab: NodePerson[] = []
|
|
|
|
|
for(const n of lastNodes.reverse()){
|
|
|
|
|
if (!tab.find((node) => node.id == n.id)){
|
|
|
|
|
tab.push(n)
|
|
|
|
|
if (tab.length > players.length * 1.5) break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
lastNodes = tab
|
|
|
|
|
if (showLast){
|
|
|
|
|
socket.emit("opacity activated", socket.id)
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
socket.emit("opacity deactivated", socket.id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}, [showLast])
|
|
|
|
|
|
|
|
|
|
let playerIndex: number = turnPlayerIndex
|
|
|
|
|
let index = 0
|
|
|
|
|
for (let i=0; i<players.length; i++){
|
|
|
|
@ -121,6 +131,13 @@ let cptTour: number = 0
|
|
|
|
|
}
|
|
|
|
|
if(!works){
|
|
|
|
|
socket.emit("node checked", personIndex, works, playerIndex, room, nextPlayerIndex)
|
|
|
|
|
const ind = bot.placeSquare(personNetwork, players)
|
|
|
|
|
console.log(lastIndex + " pose carré sur " + personNetwork.getPersons()[ind].getName())
|
|
|
|
|
playerIndex = lastIndex + 1
|
|
|
|
|
if(playerIndex == players.length){
|
|
|
|
|
playerIndex = 0
|
|
|
|
|
}
|
|
|
|
|
socket.emit("node checked", ind, false, lastIndex, room, playerIndex)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
playerIndex ++
|
|
|
|
@ -215,13 +232,15 @@ let cptTour: number = 0
|
|
|
|
|
|
|
|
|
|
// Configuration des options du Graphe
|
|
|
|
|
const initialOptions = {
|
|
|
|
|
|
|
|
|
|
layout: {
|
|
|
|
|
improvedLayout: true,
|
|
|
|
|
hierarchical: {
|
|
|
|
|
enabled: false,
|
|
|
|
|
direction: 'LR', // LR (Left to Right) ou autre selon votre préférence
|
|
|
|
|
sortMethod: 'hubsize'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
//randomSeed: 2
|
|
|
|
|
},
|
|
|
|
|
physics: {
|
|
|
|
|
enabled: true,
|
|
|
|
@ -233,7 +252,6 @@ let cptTour: number = 0
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const networkData = { nodes: nodes, edges: graph.edges };
|
|
|
|
|
const network = new Network(container, networkData, initialOptions);
|
|
|
|
|
|
|
|
|
@ -244,11 +262,29 @@ let cptTour: number = 0
|
|
|
|
|
askedPersons.push(pers)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
socket.on("opacity activated", () => {
|
|
|
|
|
nodes.forEach(node => {
|
|
|
|
|
if (!lastNodes.find((n) => n.id == node.id)){
|
|
|
|
|
networkData.nodes.update({id: node.id, opacity: 0.2})
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
socket.on("opacity deactivated", () => {
|
|
|
|
|
nodes.forEach(node => {
|
|
|
|
|
networkData.nodes.update({id: node.id, opacity: 1})
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
socket.on("reset graph", () => {
|
|
|
|
|
initialOptions.physics.enabled = true
|
|
|
|
|
network.setOptions(initialOptions)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
socket.on("node checked",(id, works, askedIndex, newPlayerIndex, socketId) => {
|
|
|
|
|
const node = nodes.get().find((n) => id == n.id)
|
|
|
|
|
if (node!=undefined){
|
|
|
|
|
|
|
|
|
|
onNodeClick(false)
|
|
|
|
|
playerIndex = newPlayerIndex
|
|
|
|
|
if (mapIndexPersons.get(askedIndex)?.find((p) => p.getId() == id) == undefined){
|
|
|
|
@ -270,7 +306,8 @@ let cptTour: number = 0
|
|
|
|
|
networkData.nodes.update({id: id, label: node.label + colorToEmoji(positionToColor(askedIndex), works)})
|
|
|
|
|
cptHistory++
|
|
|
|
|
if (cptHistory % 2 == 0){
|
|
|
|
|
addToHistory(players[askedIndex].name + " à mis un " + colorToEmoji(positionToColor(askedIndex), works))
|
|
|
|
|
lastNodes.push(node)
|
|
|
|
|
addToHistory(players[askedIndex].name + " à mis un " + colorToEmoji(positionToColor(askedIndex), works) + " à " + personNetwork.getPersons()[id].getName())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -407,6 +444,10 @@ let cptTour: number = 0
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
socket.on("end game", (winnerIndex) =>{
|
|
|
|
|
setNodeIdData(-1)
|
|
|
|
|
setActualPlayerIndexData(-1)
|
|
|
|
|
setLastIndex(-1)
|
|
|
|
|
setPlayerTouched(-1)
|
|
|
|
|
setWinnerData(players[winnerIndex])
|
|
|
|
|
navigate("/endgame")
|
|
|
|
|
})
|
|
|
|
@ -474,10 +515,12 @@ let cptTour: number = 0
|
|
|
|
|
nextPlayerIndex = 0
|
|
|
|
|
}
|
|
|
|
|
socket.emit("node checked", params.nodes[0], true, touchedPlayer, room, nextPlayerIndex)
|
|
|
|
|
setPlayerTouched(-1)
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
socket.emit("node checked", params.nodes[0], false, touchedPlayer, room, actualPlayerIndex)
|
|
|
|
|
socket.emit("asked wrong", players[actualPlayerIndex])
|
|
|
|
|
setPlayerTouched(-1)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -486,8 +529,9 @@ let cptTour: number = 0
|
|
|
|
|
console.log(touchedPlayer)
|
|
|
|
|
socket.emit("ask player", params.nodes[0], players[touchedPlayer].id, players.find((p) => p.id === socket.id, actualPlayerIndex))
|
|
|
|
|
socket.emit("put correct background", socket.id)
|
|
|
|
|
touchedPlayer=-1
|
|
|
|
|
setPlayerTouched(-1)
|
|
|
|
|
}
|
|
|
|
|
touchedPlayer=-1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(playerIndex == actualPlayerIndex && touchedPlayer==players.length){
|
|
|
|
@ -516,9 +560,11 @@ let cptTour: number = 0
|
|
|
|
|
socket.emit("node checked", params.nodes[0], true, playerIndex, room, actualPlayerIndex)
|
|
|
|
|
}
|
|
|
|
|
if(!works){
|
|
|
|
|
socket.emit("node checked", params.nodes[0], works, playerIndex, room, nextPlayerIndex)
|
|
|
|
|
socket.emit("node checked", params.nodes[0], works, playerIndex, room, actualPlayerIndex)
|
|
|
|
|
socket.emit("put correct background", socket.id)
|
|
|
|
|
socket.emit("asked wrong", players[actualPlayerIndex])
|
|
|
|
|
touchedPlayer=-1
|
|
|
|
|
setPlayerTouched(-1)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (i == players.length - 1){
|
|
|
|
@ -531,6 +577,7 @@ let cptTour: number = 0
|
|
|
|
|
i++
|
|
|
|
|
}
|
|
|
|
|
touchedPlayer=-1
|
|
|
|
|
setPlayerTouched(-1)
|
|
|
|
|
socket.emit("put correct background", socket.id)
|
|
|
|
|
await delay(1000)
|
|
|
|
|
socket.emit("end game", actualPlayerIndex, room)
|
|
|
|
|