({
runtimeScene,
playerNumber,
peerId,
}: {
runtimeScene: gdjs.RuntimeScene;
playerNumber: number;
peerId?: string;
})
| 2158 | }; |
| 2159 | |
| 2160 | const markPlayerAsDisconnected = ({ |
| 2161 | runtimeScene, |
| 2162 | playerNumber, |
| 2163 | peerId, |
| 2164 | }: { |
| 2165 | runtimeScene: gdjs.RuntimeScene; |
| 2166 | playerNumber: number; |
| 2167 | peerId?: string; |
| 2168 | }) => { |
| 2169 | logger.info(`Marking player ${playerNumber} as disconnected.`); |
| 2170 | _playerNumbersWhoJustLeft.push(playerNumber); |
| 2171 | // Temporarily save the username in another variable to be used for the notification, |
| 2172 | // as we're deleting its playerInfo just after. |
| 2173 | _temporaryPlayerNumberToUsername[playerNumber] = |
| 2174 | getPlayerUsername(playerNumber); |
| 2175 | clearPlayerTempData(playerNumber); |
| 2176 | |
| 2177 | // If Host has disconnected, either switch host or stop the game. |
| 2178 | if (peerId && peerId === gdjs.multiplayer.hostPeerId) { |
| 2179 | const shouldEndLobbyGame = |
| 2180 | gdjs.multiplayer.shouldEndLobbyWhenHostLeaves(); |
| 2181 | if (shouldEndLobbyGame) { |
| 2182 | logger.info('Host has disconnected, ending the game.'); |
| 2183 | |
| 2184 | clearAllMessagesTempData(); |
| 2185 | gdjs.multiplayer.handleLobbyGameEnded(); |
| 2186 | } else { |
| 2187 | logger.info('Host has disconnected, switching host.'); |
| 2188 | |
| 2189 | gdjs.multiplayer.handleHostDisconnected({ runtimeScene }); |
| 2190 | return; |
| 2191 | } |
| 2192 | } |
| 2193 | |
| 2194 | // If we are the host, send a heartbeat right away so that everyone is aware of the disconnection |
| 2195 | // on approximately the same frame. |
| 2196 | if (gdjs.multiplayer.isCurrentPlayerHost()) { |
| 2197 | const connectedPeerIds = gdjs.multiplayerPeerJsHelper.getAllPeers(); |
| 2198 | const { messageName, messageData } = createHeartbeatMessage(); |
| 2199 | sendDataTo(connectedPeerIds, messageName, messageData); |
| 2200 | lastHeartbeatSentTimestamp = getTimeNow(); |
| 2201 | } |
| 2202 | }; |
| 2203 | |
| 2204 | const getPlayerUsername = (playerNumber: number) => { |
| 2205 | return ( |
no test coverage detected