From 0b9dc8bdc3737029f9e4d5963eca92cb102f66b8 Mon Sep 17 00:00:00 2001 From: Ed Tervit Date: Thu, 1 Aug 2024 20:18:21 +0100 Subject: [PATCH] check who is dead at the start of meetings and don't let them talk at the end of a meeting --- src/renderer/Voice.tsx | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/renderer/Voice.tsx b/src/renderer/Voice.tsx index e6a3adbbc..eb3a765a0 100644 --- a/src/renderer/Voice.tsx +++ b/src/renderer/Voice.tsx @@ -263,6 +263,12 @@ const Voice: React.FC = function ({ t, error: initialError }: VoiceP const [mutedState, setMuted] = useState(false); const [connected, setConnected] = useState(false); + const [playersThatHaveDiedThisGame, setPlayersThatHaveDiedThisGame] = useState([]); + + const checkIfPlayerWasDeadAtStartOfMeeting = (ptr: number) => { + return playersThatHaveDiedThisGame.includes(ptr); + } + function applyEffect(gain: AudioNode, effectNode: AudioNode, destination: AudioNode, player: Player) { console.log('Apply effect->', effectNode); try { @@ -702,6 +708,7 @@ const Voice: React.FC = function ({ t, error: initialError }: VoiceP // Set dead player data useEffect(() => { if (gameState.gameState === GameState.LOBBY) { + setPlayersThatHaveDiedThisGame([]); setOtherDead({}); } else if (gameState.gameState !== GameState.TASKS) { if (!gameState.players) return; @@ -711,6 +718,14 @@ const Voice: React.FC = function ({ t, error: initialError }: VoiceP } return { ...old }; }); + setPlayersThatHaveDiedThisGame((prevState) => { + for (const player of gameState.players) { + if ((player.isDead || player.disconnected) && !prevState.includes(player.ptr)) { + prevState.push(player.ptr); + } + } + return [...prevState]; + }); } }, [gameState.gameState]); @@ -1194,6 +1209,13 @@ const Voice: React.FC = function ({ t, error: initialError }: VoiceP const tempTalking = { ...otherTalking }; let talkingUpdate = false; for (const player of otherPlayers) { + // bug with TOH where all players are considered alive during the ejection screen. This is a workaround + if (checkIfPlayerWasDeadAtStartOfMeeting(player.ptr) && !player.isDead) { + player.isDead = true; + } + if (checkIfPlayerWasDeadAtStartOfMeeting(myPlayer.ptr) && !myPlayer.isDead) { + myPlayer.isDead = true; + } const peerId = playerSocketIds[player.clientId]; const audio = player.clientId === myPlayer.clientId ? undefined : audioElements.current[peerId]; if (