From 5c2c597fad8ebc7dd63ff914d054de7bdd3f48f1 Mon Sep 17 00:00:00 2001 From: Tore Bergebakken Date: Sat, 8 Jun 2024 13:30:00 +0200 Subject: [PATCH 1/2] Send players back to their lobby on match end --- Assets/Prefabs/UI/MenuCanvas.prefab | 21 ++----------- Assets/Scenes/Menu.unity | 6 +--- Assets/Scripts/Gamestate/MatchController.cs | 3 +- .../Scripts/UI/MainMenu/MainMenuController.cs | 31 +++++++++++++++++-- 4 files changed, 34 insertions(+), 27 deletions(-) diff --git a/Assets/Prefabs/UI/MenuCanvas.prefab b/Assets/Prefabs/UI/MenuCanvas.prefab index 83a04d62b..03c9f17e1 100644 --- a/Assets/Prefabs/UI/MenuCanvas.prefab +++ b/Assets/Prefabs/UI/MenuCanvas.prefab @@ -4012,15 +4012,14 @@ MonoBehaviour: defaultMenu: {fileID: 110615194986557832} galleryMenu: {fileID: 2684392273124228428} creditsMenu: {fileID: 152431690657796851} + playerSelectMenu: {fileID: 4026824962317560842} + playerSelectMenuDefaultButton: {fileID: 2878829664369250595} mapSelectMenu: {fileID: 3498704505247766114} levelSelectManager: {fileID: 0} playerSelectManager: {fileID: 0} aIButton: {fileID: 5390649776347757468} startButton: {fileID: 7502603491603641025} innputManagerPrefab: {fileID: 0} - mapNames: - - CraterTown - - GrandCanyon uiSelectSounds: - {fileID: 8300000, guid: df56b3a96f5835849a7515c4036fdf84, type: 3} - {fileID: 8300000, guid: 1b1b36f86c6a1de4d856a61793a0854d, type: 3} @@ -4028,7 +4027,6 @@ MonoBehaviour: - {fileID: 8300000, guid: 2fc59430bcd0be5418d8e7a5c9273c9d, type: 3} - {fileID: 8300000, guid: 998e63f1e44797246a2dc7e0887d770e, type: 3} uiChooseSounds: {fileID: 11400000, guid: 90b0dc5583765d64f81545c255b0fa3a, type: 2} - loadingScreen: {fileID: 0} mainMenuCamera: {fileID: 0} --- !u!82 &5626306360106808345 AudioSource: @@ -5552,10 +5550,6 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - - target: {fileID: 3140668245959627490, guid: 58e54f7d80aca2645ab598618dffc039, type: 3} - propertyPath: m_Navigation.m_SelectOnDown - value: - objectReference: {fileID: 5921977457797426374} - target: {fileID: 3140668245959627490, guid: 58e54f7d80aca2645ab598618dffc039, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size value: 5 @@ -6017,17 +6011,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &5921977457797426374 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 4761102662359094921, guid: 58e54f7d80aca2645ab598618dffc039, type: 3} - m_PrefabInstance: {fileID: 1170305583697787471} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!224 &8203241732053331208 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7055458770637592391, guid: 58e54f7d80aca2645ab598618dffc039, type: 3} diff --git a/Assets/Scenes/Menu.unity b/Assets/Scenes/Menu.unity index 69c3e9105..b3f895071 100644 --- a/Assets/Scenes/Menu.unity +++ b/Assets/Scenes/Menu.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 785370674} - m_IndirectSpecularColor: {r: 0.0583656, g: 0.21644169, b: 0.49412873, a: 1} + m_IndirectSpecularColor: {r: 0.062482566, g: 0.21938902, b: 0.4950583, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -5598,10 +5598,6 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4298729392729991341, guid: cbf30f348674af6ecb2ba42ec2aacaf6, type: 3} - propertyPath: m_Navigation.m_SelectOnDown - value: - objectReference: {fileID: 1776070626} - target: {fileID: 4298729392729991341, guid: cbf30f348674af6ecb2ba42ec2aacaf6, type: 3} propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size value: 5 diff --git a/Assets/Scripts/Gamestate/MatchController.cs b/Assets/Scripts/Gamestate/MatchController.cs index fb6ea095a..fc75fdb9b 100644 --- a/Assets/Scripts/Gamestate/MatchController.cs +++ b/Assets/Scripts/Gamestate/MatchController.cs @@ -338,6 +338,7 @@ private void ReturnToMainMenu() PlayerInputManagerController.Singleton.ChangeInputMaps("Menu"); // Mirror pulls us to the main menu automatically - NetworkManager.singleton.StopHost(); + if (isServer) + NetworkManager.singleton.ServerChangeScene(Scenes.Menu); } } diff --git a/Assets/Scripts/UI/MainMenu/MainMenuController.cs b/Assets/Scripts/UI/MainMenu/MainMenuController.cs index 25b1bcb05..8b44b9deb 100644 --- a/Assets/Scripts/UI/MainMenu/MainMenuController.cs +++ b/Assets/Scripts/UI/MainMenu/MainMenuController.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using TMPro; +using UnityEditor; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; @@ -41,6 +42,10 @@ public class MainMenuController : MonoBehaviour [SerializeField] private CreditsMenu creditsMenu; [SerializeField] + private GameObject playerSelectMenu; + [SerializeField] + private Selectable playerSelectMenuDefaultButton; + [SerializeField] private GameObject mapSelectMenu; [SerializeField] private LevelSelectManager levelSelectManager; @@ -54,8 +59,6 @@ public class MainMenuController : MonoBehaviour private Button startButton; [SerializeField] private GameObject innputManagerPrefab; - [SerializeField] - private string[] mapNames; private AudioSource audioSource; [SerializeField] private AudioClip[] uiSelectSounds; @@ -111,6 +114,30 @@ private void Start() defaultMenu.SetActive(false); introRoutine = StartCoroutine(WaitForIntroVideoToEnd()); } + + if (NetworkManager.singleton.isNetworkActive) + { + GoBackToLobby(); + } + } + + private void GoBackToLobby() + { + PlayerInputManagerController.Singleton.RemoveJoinListener(); + if (NetworkServer.active) + { + // Hosts should be yeeted back into the lobby menu + mainMenuCamera.GetComponentInChildren().MoveToPlayerSelect(); + SwitchToMenu(playerSelectMenu); + SelectControl(playerSelectMenuDefaultButton); + SetStartButtonState(); + playerSelectManager.UpdateLobby(); + } + else + { + // Clients should go to their own lobby scene + SceneManager.LoadScene(Scenes.ClientLobby); + } } private void StopFirstFrame(VideoPlayer source) From 2bdc0994e6490e4746ca84659a405fb760850766 Mon Sep 17 00:00:00 2001 From: Tore Bergebakken Date: Sat, 8 Jun 2024 13:43:02 +0200 Subject: [PATCH 2/2] Remove AI players on return (squash this) --- Assets/Scripts/Control&Input/Peer2PeerTransport.cs | 14 +++++++++++++- Assets/Scripts/UI/MainMenu/MainMenuController.cs | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Control&Input/Peer2PeerTransport.cs b/Assets/Scripts/Control&Input/Peer2PeerTransport.cs index d73f69c5e..ff1a233f4 100644 --- a/Assets/Scripts/Control&Input/Peer2PeerTransport.cs +++ b/Assets/Scripts/Control&Input/Peer2PeerTransport.cs @@ -502,6 +502,15 @@ private void AddAiPlayers() } } + private void RemoveAiPlayers() + { + foreach (var ai in players.Values.Where(p => p.type is PlayerType.AI)) + { + NetworkServer.SendToAll(new PlayerLeftMessage(ai.id)); + } + } + + // Called after shooting rounds (TODO just use the same matchcontroller stuff???) private static void UpdatePlayerDetailsAfterShootingRound() { @@ -543,7 +552,8 @@ private static void UpdatePlayerInventoryForIdentity(PlayerIdentity identity) public override void OnServerChangeScene(string newSceneName) { - var needsExtraAiPlayers = PlayerInputManagerController.Singleton.MatchHasAI && !MatchController.Singleton; + var isAiEnabled = PlayerInputManagerController.Singleton.MatchHasAI; + var needsExtraAiPlayers = isAiEnabled && !MatchController.Singleton; if (needsExtraAiPlayers) { AddAiPlayers(); @@ -560,6 +570,8 @@ public override void OnServerChangeScene(string newSceneName) break; case Scenes.Menu: isInMatch = false; + if (isAiEnabled) + RemoveAiPlayers(); NetworkServer.RegisterHandler(OnSpawnPlayerInput); break; default: diff --git a/Assets/Scripts/UI/MainMenu/MainMenuController.cs b/Assets/Scripts/UI/MainMenu/MainMenuController.cs index 8b44b9deb..5811e17b3 100644 --- a/Assets/Scripts/UI/MainMenu/MainMenuController.cs +++ b/Assets/Scripts/UI/MainMenu/MainMenuController.cs @@ -132,11 +132,14 @@ private void GoBackToLobby() SelectControl(playerSelectMenuDefaultButton); SetStartButtonState(); playerSelectManager.UpdateLobby(); + if (playerInputManagerController.MatchHasAI) + aIButton.Toggle(); } else { // Clients should go to their own lobby scene - SceneManager.LoadScene(Scenes.ClientLobby); + if (SceneManager.GetActiveScene().name == Scenes.Menu) + SceneManager.LoadScene(Scenes.ClientLobby); } }