84 lines
2.4 KiB
C#
84 lines
2.4 KiB
C#
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();
|
|
}
|
|
}
|
|
|
|
}
|