pull/103/head
Pierre Ferreira 1 year ago
commit 1785c9f46b

@ -1,8 +1,6 @@
// const ADRESSE_WEBSERVER = "http://172.20.10.4:3002"
// const ADRESSE_DBSERVER = "http://172.20.10.4:3003"
const ADRESSE_WEBSERVER = "http://localhost:3002" const ADRESSE_WEBSERVER = "http://localhost:3002"
const ADRESSE_DBSERVER = "http://localhost:3003"
const ADRESSE_DBSERVER = "http://localhost:3003"
const tmp = ADRESSE_DBSERVER const tmp = ADRESSE_DBSERVER
const tmp2 = ADRESSE_WEBSERVER const tmp2 = ADRESSE_WEBSERVER

@ -37,7 +37,7 @@ const PersonStatus: React.FC<PlayerStatusProps> = ({img = Person, state= Person,
img = BotImg img = BotImg
} }
const [buffer, setBuffer] = useState("") const [buffer, setBuffer] = useState('50%')
const [touchedPlayer, setTouchedPlayer] = useState(-2) const [touchedPlayer, setTouchedPlayer] = useState(-2)
useEffect(() =>{ useEffect(() =>{
@ -48,10 +48,10 @@ const PersonStatus: React.FC<PlayerStatusProps> = ({img = Person, state= Person,
useEffect(() => { useEffect(() => {
if (playerIndex===index){ if (playerIndex===index){
setBuffer('solid 3px green') setBuffer('5px')
} }
else{ else{
setBuffer('') setBuffer('50%')
} }
}, [playerIndex]) }, [playerIndex])
@ -71,7 +71,7 @@ const PersonStatus: React.FC<PlayerStatusProps> = ({img = Person, state= Person,
}; };
const circleStyle: React.CSSProperties = { const circleStyle: React.CSSProperties = {
backgroundColor: touchedPlayer == index && showCircle ? 'gold' : positionToColor(index), // Changement de la couleur en fonction de la condition backgroundColor: touchedPlayer == index && showCircle ? 'gold' : positionToColor(index), // Changement de la couleur en fonction de la condition
borderRadius: '50%', borderRadius: buffer,
width: '80px', width: '80px',
height: '80px', height: '80px',
display: 'flex', display: 'flex',
@ -84,7 +84,7 @@ const PersonStatus: React.FC<PlayerStatusProps> = ({img = Person, state= Person,
const circleStyleInt: React.CSSProperties = { const circleStyleInt: React.CSSProperties = {
backgroundColor:'white', backgroundColor:'white',
borderRadius: '50%', borderRadius: buffer,
width: '70px', width: '70px',
height: '70px', height: '70px',
display: 'flex', display: 'flex',
@ -111,8 +111,8 @@ const PersonStatus: React.FC<PlayerStatusProps> = ({img = Person, state= Person,
</div> </div>
{/* </div> */} {/* </div> */}
</div> </div>
<div className='playerNameDisplay' style={{border:buffer}}> <div className='playerNameDisplay'>
<h5>{actualPlayerIndex !== index ? (name.substring(0, name.length - 2).length > 7 ? name.substring(0, name.length - 2).substring(0, 7) + '...' : name) : 'vous'}</h5> <h5>{actualPlayerIndex !== index ? (name.substring(0, name.length - 2).length > 7 ? name.substring(0, name.length - 2).substring(0, 7) + '...' : name.substring(0, name.length - 2)) : 'vous'}</h5>
</div> </div>
</div> </div>
); );

@ -24,50 +24,51 @@ import {basePath} from "../AdressSetup"
import PersonNetwork from "../model/PersonsNetwork"; import PersonNetwork from "../model/PersonsNetwork";
interface TutorialGraphProps { interface TutorialGraphProps {
onNodeClick: (shouldShowChoiceBar: boolean) => void;
handleShowTurnBar: (shouldShowTurnBar: boolean) => void
handleTurnBarTextChange: (newTurnBarText: string) => void
setPlayerTouched: (newPlayerTouch: number) => void;
playerTouched: number
changecptTour: (newcptTour : number) => void
addToHistory: (message : string) => void
solo : boolean
isDaily : boolean
isEasy: boolean
setNetwork: (network: Network) => void setNetwork: (network: Network) => void
showLast: boolean showLast: boolean
setNetworkEnigme: (networkEnigme: Map<number, Pair<Indice, boolean>[]>) => void
askedWrong: boolean
setAskedWrong: (askedWrong: boolean) => void
setPlayerIndex: (playerIndex: number) => void setPlayerIndex: (playerIndex: number) => void
importToPdf: boolean handleShowTurnBar: (bool: boolean) => void
setImportToPdf: (imp: boolean) => void handleTurnBarTextChange: (text: string) => void
importToJSON: boolean addToHistory: (text: string) => void
setImportToJSON: (imp: boolean) => void setPlayerTouched: (playerIndex: number) => void
playerTouched: number
tutoStep: number
setTutoStep: (step: number) => void
} }
let lastNodes: NodePerson[] = [] let lastNodes: NodePerson[] = []
let firstIndex = true let firstIndex = true
let first = true
let touchedPlayer = -1
let stepTuto = -1
const TutorialGraph: React.FC<TutorialGraphProps> = ({onNodeClick, handleShowTurnBar, handleTurnBarTextChange, playerTouched, setPlayerTouched, changecptTour, solo, isDaily, isEasy, addToHistory, showLast, setNetwork, setNetworkEnigme, setPlayerIndex, askedWrong, setAskedWrong, importToPdf, setImportToPdf, importToJSON, setImportToJSON}) => {
const TutorialGraph: React.FC<TutorialGraphProps> = ({showLast, setNetwork, setPlayerIndex, handleShowTurnBar, handleTurnBarTextChange, addToHistory, setPlayerTouched, playerTouched, tutoStep, setTutoStep}) => {
let cptTour: number = 0 let cptTour: number = 0
//* Gestion du temps : //* Gestion du temps :
let initMtn = 0 let initMtn = 0
const {isLoggedIn, user, manager} = useAuth(); const {isLoggedIn, user, manager} = useAuth();
const {setIndiceData} = useGame(); const {setIndiceData, setActualPlayerIndexData} = useGame();
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
const navigate = useNavigate(); const navigate = useNavigate();
const [lastIndex, setLastIndex] = useState(-1) const [lastIndex, setLastIndex] = useState(-1)
/*
if (first){
first = false
setActualPlayerIndexData(0)
handleTurnBarTextChange("C'est à vous de jouer !")
handleShowTurnBar(true)
}
useEffect(() =>{ useEffect(() =>{
touchedPlayer=playerTouched touchedPlayer=playerTouched
console.log(playerTouched) /*
if (touchedPlayer == -1){ if (touchedPlayer == -1){
if (!askedWrongLocal){ if (!askedWrongLocal){
socket.emit("put correct background", socket.id) socket.emit("put correct background", socket.id)
@ -82,9 +83,13 @@ const TutorialGraph: React.FC<TutorialGraphProps> = ({onNodeClick, handleShowTur
else if(touchedPlayer == players.length){ else if(touchedPlayer == players.length){
socket.emit("put imossible grey", socket.id) socket.emit("put imossible grey", socket.id)
} }
*/
}, [playerTouched]) }, [playerTouched])
*/ useEffect(() => {
stepTuto = tutoStep
}, [tutoStep])
useEffect(() => { useEffect(() => {
const tab: NodePerson[] = [] const tab: NodePerson[] = []
@ -118,13 +123,15 @@ const TutorialGraph: React.FC<TutorialGraphProps> = ({onNodeClick, handleShowTur
const personNetwork = JSONParser.JSONToNetwork(JSON.stringify(jsonGraph)) const personNetwork = JSONParser.JSONToNetwork(JSON.stringify(jsonGraph))
const indices = JSONParser.JSONToIndices(jsonIndice) const indices = JSONParser.JSONToIndices(jsonIndice)
console.log(indices)
setIndiceData(indices[0]) setIndiceData(indices[0])
if (personNetwork == null){ if (personNetwork == null){
return return
} }
const graph = GraphCreator.CreateGraph(personNetwork) const graph = GraphCreator.CreateGraph(personNetwork)
const nodes = graph.nodesPerson; const nodes = new DataSet(graph.nodesPerson);
let n = graph.nodesPerson; let n = graph.nodesPerson;
@ -172,6 +179,11 @@ const TutorialGraph: React.FC<TutorialGraphProps> = ({onNodeClick, handleShowTur
network.stabilize(); network.stabilize();
setNetwork(network) setNetwork(network)
network.on("click", async (params) => {
if(params.nodes.length > 0){
}
});
network.on("dragging", (params) => { network.on("dragging", (params) => {
if (params.nodes.length > 0) { if (params.nodes.length > 0) {
@ -182,6 +194,23 @@ const TutorialGraph: React.FC<TutorialGraphProps> = ({onNodeClick, handleShowTur
} }
}); });
network.on("click", async (params) => {
if(params.nodes.length > 0){
if (stepTuto === 0 && touchedPlayer === 1){
const node = nodes.get().find((n: NodePerson) => n.id === params.nodes[0])
const pers = personNetwork.getPersons().find((p) => p.getId() === node?.id)
if (node !== undefined && pers !== undefined && pers.getName() === "Violet"){
networkData.nodes.update({id: params.nodes[0], label: node.label + positionToEmoji(1, true)})
setTutoStep(1)
}
}
}
else{
setPlayerTouched(-1)
}
});
}, []); // Le tableau vide signifie que cela ne s'exécutera qu'une fois après le premier rendu }, []); // Le tableau vide signifie que cela ne s'exécutera qu'une fois après le premier rendu
return ( return (

@ -18,6 +18,8 @@ import MGlass from "../res/icon/magnifying-glass.png";
import Reset from "../res/icon/reset.png"; import Reset from "../res/icon/reset.png";
import Oeye from "../res/icon/eye.png"; import Oeye from "../res/icon/eye.png";
import Ceye from "../res/icon/hidden.png"; import Ceye from "../res/icon/hidden.png";
import ImgBot from "../res/img/bot.png";
import ava from "../res/img/tuto/tuto-ava.png"; import ava from "../res/img/tuto/tuto-ava.png";
/* nav */ /* nav */
@ -39,19 +41,22 @@ import Pair from '../model/Pair';
import Indice from '../model/Indices/Indice'; import Indice from '../model/Indices/Indice';
import {basePath} from "../AdressSetup" import {basePath} from "../AdressSetup"
import TutorialGraph from '../Components/TutorialGraph'; import TutorialGraph from '../Components/TutorialGraph';
import JSZip from 'jszip'; import { useAuth } from '../Contexts/AuthContext';
import EasyBot from '../model/EasyBot';
let cptNavigation = 0 let cptNavigation = 0
//@ts-ignore //@ts-ignore
const Tutorial = ({locale, changeLocale}) => { const Tutorial = ({locale, changeLocale}) => {
const {personNetwork, person, indices, players, setPlayersData, indice, actualPlayerIndex} = useGame()
const {user} = useAuth()
const theme = useTheme(); const theme = useTheme();
const navigate = useNavigate() const navigate = useNavigate()
const params = new URLSearchParams(window.location.search);
const navigationType = useNavigationType() const navigationType = useNavigationType()
cptNavigation++ cptNavigation++
@ -62,32 +67,17 @@ const Tutorial = ({locale, changeLocale}) => {
} }
} }
//* Gestion solo
let IsSolo: boolean = true
const solotmp = params.get('solo');
if (solotmp == "false"){
IsSolo=false
}
//* Gestion daily
let isDaily: boolean = true
const isDailytmp = params.get('daily');
if (isDailytmp == "false"){
isDaily=false
}
let isEasy: boolean = true
const isEasytmp = params.get('easy');
if (isEasytmp == "false"){
isEasy=false
}
//* Historique //* Historique
const [history, setHistory] = useState<string[]>([]); const [history, setHistory] = useState<string[]>([]);
const [showLast, setShowLast] = useState(false) const [showLast, setShowLast] = useState(false)
const [askedWrong, setAskedWrong] = useState(false) const [askedWrong, setAskedWrong] = useState(false)
const [importToPdf, setImportToPdf] = useState(false) const [importToPdf, setImportToPdf] = useState(false)
const [importToJSON, setImportToJSON] = useState(false) const [importToJSON, setImportToJSON] = useState(false)
const [tutoStep, setTutoStep] = useState(0)
const setTutoStepData = (step: number) => {
setTutoStep(step)
}
const setImportToJSONData = (imp: boolean) => { const setImportToJSONData = (imp: boolean) => {
setImportToJSON(imp) setImportToJSON(imp)
@ -118,8 +108,14 @@ const Tutorial = ({locale, changeLocale}) => {
} }
}, [history]); }, [history]);
useEffect(() => {
if (user == null){
return
}
setPlayersData([user, new EasyBot("Bot1", "Bot1", ImgBot), new EasyBot("Bot2", "Bot2", ImgBot)])
}, [])
const {personNetwork, person, indices} = useGame()
const [showChoiceBar, setShowChoiceBar] = useState(false); const [showChoiceBar, setShowChoiceBar] = useState(false);
const [showTurnBar, setShowTurnBar] = useState(false); const [showTurnBar, setShowTurnBar] = useState(false);
@ -160,45 +156,6 @@ const Tutorial = ({locale, changeLocale}) => {
setPlayerIndex(playerIndex) setPlayerIndex(playerIndex)
} }
const generateTEX = async () => {
if (network != null && personNetwork != null && person != null){
const zip = new JSZip();
if (isDaily && networkEnigme != null){
const tex = generateLatexCodeEnigme(personNetwork, person, indices, network, networkEnigme)
const blob = new Blob([tex], { type: 'application/x-latex;charset=utf-8' });
zip.file('socialGraph.tex', tex);
}
else{
const tex = generateLatexCode(personNetwork, person, indices, network)
const blob = new Blob([tex], { type: 'application/x-latex;charset=utf-8' });
zip.file('socialGraph.tex', tex);
}
const imageNames = ['ballon-de-basket.png', 'ballon-de-foot.png', "baseball.png", "bowling.png", "tennis.png"]; // Liste des noms de fichiers d'images
const imagesFolder = 'Script';
for (const imageName of imageNames) {
const imageUrl = process.env.PUBLIC_URL + `/${imagesFolder}/${imageName}`;
const response = await fetch(imageUrl);
if (response.ok) {
const imageBlob = await response.blob();
zip.file(`${imageName}`, imageBlob);
} else {
console.error(`Erreur de chargement de l'image ${imageName}`);
}
}
const content = await zip.generateAsync({ type: 'blob' });
// Enregistre l'archive en tant que fichier
saveAs(content, 'social_graph.zip');
// Utiliser FileSaver pour télécharger le fichier
}
}
const resetGraph = () => { const resetGraph = () => {
setisLoading(true); setisLoading(true);
@ -264,7 +221,6 @@ const Tutorial = ({locale, changeLocale}) => {
const [SwitchEnabled, setSwitchEnabled] = useState(false) const [SwitchEnabled, setSwitchEnabled] = useState(false)
const allIndices = Stub.GenerateIndice() const allIndices = Stub.GenerateIndice()
const { indice, players, actualPlayerIndex} = useGame();
const nbPlayer = players.length; const nbPlayer = players.length;
const navdeduc = 'deduc?actualId=' + actualPlayerIndex + '&nbPlayer=' + nbPlayer; const navdeduc = 'deduc?actualId=' + actualPlayerIndex + '&nbPlayer=' + nbPlayer;
@ -282,36 +238,37 @@ const Tutorial = ({locale, changeLocale}) => {
<div id="mainDiv"> <div id="mainDiv">
{showTurnBar && <TurnBar text={turnBarText}/>} {showTurnBar && <TurnBar text={turnBarText}/>}
<div id='graphDiv'> <div id='graphDiv'>
<TutorialGraph onNodeClick={handleNodeClick} <TutorialGraph tutoStep={tutoStep}
setTutoStep={setTutoStepData}
handleShowTurnBar={handleShowTurnBar} handleShowTurnBar={handleShowTurnBar}
handleTurnBarTextChange={handleTurnBarTextChange} handleTurnBarTextChange={handleTurnBarTextChange}
changecptTour={changecptTour}
addToHistory={addToHistory} addToHistory={addToHistory}
solo={IsSolo}
isDaily={isDaily}
isEasy={isEasy}
setPlayerTouched={handleSetPlayerTouched} setPlayerTouched={handleSetPlayerTouched}
playerTouched={playerTouched} playerTouched={playerTouched}
setNetwork={setNetworkData} setNetwork={setNetworkData}
setNetworkEnigme={setNetworkEnigmeData}
showLast={showLast} showLast={showLast}
setPlayerIndex={setPlayerIndexData} setPlayerIndex={setPlayerIndexData}/>
askedWrong={askedWrong}
setAskedWrong={setAskedWrongData}
importToPdf={importToPdf}
setImportToPdf={setImportToPdfData}
importToJSON={importToJSON}
setImportToJSON={setImportToJSONData}/>
</div> </div>
{(!isDaily || (isDaily && isEasy)) &&
<div className='historique' id="history-container"> <div className='historique' id="history-container">
{history.map((item, index) => ( {history.map((item, index) => (
<div key={index}>{item}</div> <div key={index}>{item}</div>
))} ))}
</div> </div>
}
<div className='paramDiv'>
<button className='button'
style={{
backgroundColor: theme.colors.tertiary,
borderColor: theme.colors.secondary
}}
onClick={handleChangeS}>
<img src={Param} alt="paramètres" height='40'/>
</button>
</div>
<div className='menuGame'> <div className='menuGame'>
<Button variant="primary" onClick={handleShowM}> <Button variant="primary" onClick={handleShowM}>
@ -335,20 +292,33 @@ const Tutorial = ({locale, changeLocale}) => {
<img src={MGlass} alt="indice" height="40"/> <img src={MGlass} alt="indice" height="40"/>
</button> </button>
{!IsSolo && <button className='button' onClick={setShowLastData} <button className='button' onClick={setShowLastData}
style={{ style={{
backgroundColor: theme.colors.tertiary, backgroundColor: theme.colors.tertiary,
borderColor: theme.colors.secondary borderColor: theme.colors.secondary
}}> }}>
<img src={ eye } alt="indice" height="40"/> <img src={ eye } alt="indice" height="40"/>
</button>} </button>
</div> </div>
{ !IsSolo && {/*
<Offcanvas show={showP}
onHide={handleCloseP}>
<Offcanvas.Header closeButton>
<Offcanvas.Title>Joueurs</Offcanvas.Title>
<h3>Il y a {players.length} joueurs</h3>
</Offcanvas.Header>
<Offcanvas.Body>
</Offcanvas.Body>
</Offcanvas>
*/}
<div className='playerlistDiv'> <div className='playerlistDiv'>
<PlayerList players={players} setPlayerTouched={handleSetPlayerTouched} playerTouched={playerTouched} playerIndex={playerIndex} askedWrong={askedWrong}/> <PlayerList players={players} setPlayerTouched={handleSetPlayerTouched} playerTouched={playerTouched} playerIndex={playerIndex} askedWrong={askedWrong}/>
</div> </div>
}
<Offcanvas show={show} <Offcanvas show={show}
onHide={handleClose} onHide={handleClose}

Loading…
Cancel
Save