using System.Collections; using System.Collections.Generic; using UnityEngine; using ExitGames.Client.Photon.LoadBalancing; public class ButtonConnectOnline : ButtonOnClick { public static string region; public override void OnClick() { if (GameTransition.Instance.state == GameState.Menu) { GameTransition.Instance.state = GameState.ConnectionInProgress; GameTransition.Instance.inMultiplayer = true; StartCoroutine(ConnectToMultiplayerCoroutine()); } } public IEnumerator ConnectToMultiplayerCoroutine(){ if (NetworkManager.net.ConnectToNameServer()){ Debug.Log("Connecting to name server"); } else { Debug.Log("Name Server connection failed"); yield break; } while (!NetworkManager.onNameServer || !NetworkManager.isReady) yield return null; Debug.Log("Connected to name server"); if (NetworkManager.net.OpGetRegions()){ Debug.Log("Started region request"); } else { Debug.Log("Failed region request"); yield break; } while (NetworkManager.net.AvailableRegions == null) yield return null; Debug.Log("Received region list"); // testing, quick load if (NetworkManager.instance.quickLoadTestingLobby){ region = "usw"; } // select best region else { region = null; while(region == null) yield return null; GameTransition.Instance.state = GameState.ConnectionInProgress; } if(NetworkManager.net.ConnectToRegionMaster(region)){ Debug.LogFormat("Connecting to region master '{0}'", region); } else { Debug.LogFormat("Failed to connect to region master '{0}'", region); yield break; } while (!NetworkManager.onMasterLobby) yield return null; Debug.Log("Connected to region master"); Debug.Log("You can quick join now"); // testing, quick load if (NetworkManager.instance.quickLoadTestingLobby){ var activeScene = "QUICKJOIN"; var ro = new RoomOptions(); ro.IsVisible = false; ro.IsOpen = true; ro.MaxPlayers = NetworkManager.instance.expectedMaxPlayers; NetworkManager.net.OpJoinOrCreateRoomWithProperties(activeScene, ro, null); // connect to room while(!NetworkManager.inRoom) yield return null; // wait for max players to auto start while(NetworkManager.net.CurrentRoom.PlayerCount != NetworkManager.instance.expectedMaxPlayers) yield return null; GameBoardInstance.instance.SetupGame(); } } }