Lobby.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Mirror;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. using UnityEngine.UI;
  7. public class Lobby : NetworkBehaviour
  8. {
  9. [SyncVar]
  10. public int playerCount;
  11. [SyncVar]
  12. public string serverName;
  13. [SyncVar(hook = nameof(OnMetadataChanged))]
  14. public string serverMetadata;
  15. public string nextSceneName;
  16. void OnMetadataChanged(string oldValue, string newValue){
  17. SceneData.metadata = JsonUtility.FromJson<ServerMetadata>(newValue);
  18. }
  19. public Text lobbyNameText;
  20. public Text playerCountTxt;
  21. void Start()
  22. {
  23. DontDestroyOnLoad(gameObject);
  24. if(isServer){
  25. serverName = FindObjectOfType<LightReflectiveMirror.LightReflectiveMirrorTransport>().serverName;
  26. serverMetadata = FindObjectOfType<LightReflectiveMirror.LightReflectiveMirrorTransport>().extraServerData;
  27. }
  28. lobbyNameText.text = serverName;
  29. SceneData.metadata = JsonUtility.FromJson<ServerMetadata>(serverMetadata);
  30. playerCountTxt.text = playerCount+"/" + SceneData.metadata.maxPlayerCount;
  31. }
  32. // Update is called once per frame
  33. public int[] playlist = new int[2]{1,2};
  34. public int curSceneInd=0;
  35. void Update()
  36. {
  37. if(playerCountTxt!=null){
  38. playerCountTxt.text = playerCount + "/ " + SceneData.metadata.maxPlayerCount;
  39. }
  40. if(!isServer){
  41. return;
  42. }
  43. NetPlayer[] netPlayers = FindObjectsOfType<NetPlayer>();
  44. playerCount = netPlayers.Length;
  45. if(playerCount < 1){return;}
  46. bool allInside =true;
  47. foreach(NetPlayer netPlayer in netPlayers){
  48. if(!netPlayer.insideDoor){allInside = false;break;}
  49. }
  50. if(allInside){
  51. //Move onto next level
  52. if(curSceneInd < playlist.Length -1){
  53. curSceneInd++;
  54. nextSceneName = SceneManager.GetSceneByBuildIndex(playlist[curSceneInd]).name;
  55. }else{
  56. nextSceneName ="SampleScene";
  57. curSceneInd=0;
  58. }
  59. RpcNextLevel(playlist[curSceneInd]);
  60. changeScene(playlist[curSceneInd]);
  61. }
  62. }
  63. [ClientRpc]
  64. void RpcNextLevel(int levelName){
  65. changeScene(levelName);
  66. }
  67. void changeScene(int levelName){
  68. SceneData.localPlayer.GetComponent<PlayerController>().insideDoor=false;
  69. SceneData.localPlayer.GetComponent<NetPlayer>().CallChangeInsideDoor(false);
  70. LoadingScreen.instance.alreadyConnected=true;
  71. LoadingScreen.instance.sceneName=null;
  72. LoadingScreen.instance.sceneIndex = levelName;
  73. LoadingScreen.instance.load();
  74. }
  75. }