diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 14e90e8d2..a1f15aebb 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -322,7 +322,9 @@ namespace Barotrauma.Networking // Update current time updateTimer = DateTime.Now + updateInterval; } - + + private CoroutineHandle startGameCoroutine; + /// /// Check for new incoming messages from server /// @@ -330,7 +332,9 @@ namespace Barotrauma.Networking { // Create new incoming message holder NetIncomingMessage inc; - + + if (startGameCoroutine != null && CoroutineManager.IsCoroutineRunning(startGameCoroutine)) return; + while ((inc = client.ReadMessage()) != null) { //TODO: read message data diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index 38b83ec21..5c14c0cc8 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -486,6 +486,30 @@ namespace Barotrauma.Networking client.inGame = false; } } + + CoroutineManager.StartCoroutine(EndCinematic()); + } + + public IEnumerable EndCinematic() + { + float endPreviewLength = 10.0f; + + var cinematic = new TransitionCinematic(Submarine.MainSub, GameMain.GameScreen.Cam, endPreviewLength); + + float secondsLeft = endPreviewLength; + + do + { + secondsLeft -= CoroutineManager.UnscaledDeltaTime; + + yield return CoroutineStatus.Running; + } while (secondsLeft > 0.0f); + + Submarine.Unload(); + + GameMain.NetLobbyScreen.Select(); + + yield return CoroutineStatus.Success; } private void UpdateCrewFrame()