import React, { createContext, useContext, useState, ReactNode } from 'react'; import { DataSet, Edge } from 'vis-network'; import NodePerson from '../model/Graph/NodePerson'; import Indice from '../model/Indices/Indice'; import Pair from '../model/Pair'; import Person from '../model/Person'; import PersonNetwork from '../model/PersonsNetwork'; import Player from '../model/Player'; interface GameContextProps { indices: Indice[]; indice: Indice | null person: Person | null; personNetwork: PersonNetwork | null; players: Player[] nodeId: number | null askedPersons: Person[]; actualPlayerIndex: number; turnPlayerIndex: number; room: string; onlyFalse: boolean winner: Player | null dailyEnigme: Map[]> nbCoup : number temps : number networkData: any seed: number | string; nodesC: NodePerson[] gameStart: boolean setGameStartData : (newStart: boolean) => void setIndicesData: (newIndices: Indice[]) => void; setIndiceData: (newIndice: Indice) => void; setPersonData: (newPerson: Person) => void; setPersonNetworkData: (newPersonNetwork: PersonNetwork) => void; setPlayersData: (newPlayer: Player[]) => void; setNodeIdData: (newId: number) => void; setAskedPersonsData: (newAskedPersons: Person[]) => void; setActualPlayerIndexData: (newActualPlayerIndex: number) => void; setTurnPlayerIndexData: (newTurnPlayerIndex: number) => void; setRoomData: (newRoom: string) => void; setOnlyFalseData: (newOnlyFalse: boolean) => void setWinnerData: (winner: Player | null) => void reset: () => void setDailyEnigmeData: (map: Map[]>) => void setNbCoupData: (newNbCoup : number) => void settempsData: (newtemps : number) => void setNetworkDataData: (networkData: any) => void setSeedData: (seed: number | string) => void setNodesData: (nodes: NodePerson[]) => void } const GameContext = createContext(undefined); interface GameProviderProps { children: ReactNode; } export const GameProvider: React.FC = ({ children }) => { const [indices, setIndices] = useState([]); const [indice, setIndice] = useState(null); const [person, setPerson] = useState(null); const [personNetwork, setPersonNetwork] = useState(null); const [players, setPlayers] = useState([]) const [nodeId, setNodeId] = useState(null); const [askedPersons, setAskedPersons] = useState([]) const [actualPlayerIndex, setActualPlayerIndex] = useState(-1) const [turnPlayerIndex, setTurnPlayerIndex] = useState(-1) const [room, setRoom] = useState("") const [onlyFalse, setOnlyFalse] = useState(false) const [winner, setWinner] = useState(null) const [dailyEnigme, setDailyEnigme] = useState[]>>(new Map()) const [nbCoup, setNbCoup] = useState(0); const [temps, settemps] = useState(0); const [networkData, setNetworkData] = useState(null); const [seed, setSeed] = useState(0); const [nodesC, setNodes] = useState([]); const [gameStart, setGameStart] = useState(true) const setGameStartData = (newStart: boolean) => { setGameStart(newStart) } const setNodesData = (nodes: NodePerson[]) => { setNodes(nodes) } const setNetworkDataData = (networkData: any) => { setNetworkData(networkData); } const setSeedData = (seed: number | string) => { setSeed(seed); } const setIndicesData = (newIndices: Indice[]) => { setIndices(newIndices); }; const setIndiceData = (newIndice: Indice) =>{ setIndice(newIndice) }; const setPersonData = (newPerson: Person) => { setPerson(newPerson); }; const setPersonNetworkData = (newPersonNetwork: PersonNetwork) => { setPersonNetwork(newPersonNetwork); }; const setPlayersData = (newPlayers: Player[]) => { setPlayers(newPlayers); }; const setNodeIdData = (newId: number) => { setNodeId(newId); }; const setAskedPersonsData = (newAskedPerson: Person[]) => { setAskedPersons(newAskedPerson); }; const setActualPlayerIndexData = (newActualPlayerIndex: number) =>{ setActualPlayerIndex(newActualPlayerIndex) } const setTurnPlayerIndexData = (newTurnPlayerIndex: number) =>{ setTurnPlayerIndex(newTurnPlayerIndex) } const setRoomData = (newRoom: string) =>{ setRoom(newRoom) } const setOnlyFalseData = (newOnlyFalse: boolean) =>{ setOnlyFalse(newOnlyFalse) } const setWinnerData = (winner: Player | null) =>{ setWinner(winner) } const setDailyEnigmeData = (map: Map[]>) => { setDailyEnigme(map) } const setNbCoupData = (newNbCoup : number) => { setNbCoup(newNbCoup); } const settempsData = (newtemps : number) => { settemps(newtemps); } const reset = () => { setIndices([]) setActualPlayerIndex(-1) setAskedPersons([]) setPlayers([]) setPerson(null) setPersonNetwork(null) setRoom("") setWinner(null) setTurnPlayerIndex(-1) setNodeId(-1) setIndice(null) setNbCoup(0) settemps(0) } return ( {children} ); }; export const useGame = (): GameContextProps => { const context = useContext(GameContext); if (!context) { throw new Error('useGame must be used within an GameProvider'); } return context; };