807 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			807 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
// --------------------------------------------------------------------------------------------------------------------
 | 
						|
// <copyright file="PunCockpit.cs" company="Exit Games GmbH">
 | 
						|
//   Part of: Pun Cockpit Demo
 | 
						|
// </copyright>
 | 
						|
// <author>developer@exitgames.com</author>
 | 
						|
// --------------------------------------------------------------------------------------------------------------------
 | 
						|
 | 
						|
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
 | 
						|
using UnityEngine;
 | 
						|
using UnityEngine.UI;
 | 
						|
 | 
						|
using Photon.Pun.Demo.Cockpit.Forms;
 | 
						|
using Photon.Pun.Demo.Shared;
 | 
						|
using Photon.Realtime;
 | 
						|
using Hashtable = ExitGames.Client.Photon.Hashtable;
 | 
						|
 | 
						|
namespace Photon.Pun.Demo.Cockpit
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// UI based work in progress to test out api and act as foundation when dealing with room, friends and player list
 | 
						|
    /// </summary>
 | 
						|
    public class PunCockpit : MonoBehaviourPunCallbacks
 | 
						|
    {
 | 
						|
        public static PunCockpit Instance;
 | 
						|
        public static bool Embedded;
 | 
						|
        public static string EmbeddedGameTitle = "";
 | 
						|
 | 
						|
		public bool debug = false;
 | 
						|
 | 
						|
        public string UserId { get; set; }
 | 
						|
 | 
						|
        public Text Title;
 | 
						|
        public Text StateText; // set in inspector
 | 
						|
        public Text UserIdText; // set in inspector
 | 
						|
 | 
						|
        [Header("Demo Integration")]
 | 
						|
 | 
						|
        public CanvasGroup MinimalCanvasGroup;
 | 
						|
        public CanvasGroup MaximalCanvasGroup;
 | 
						|
        public GameObject MinimizeButton;
 | 
						|
        public GameObject MinimalUIEmbeddHelp;
 | 
						|
 | 
						|
        [Header("Connection UI")]
 | 
						|
        public GameObject ConnectingLabel;
 | 
						|
        public GameObject ConnectionPanel;
 | 
						|
        public GameObject AdvancedConnectionPanel;
 | 
						|
        public Dropdown ConnectAsDropDown;
 | 
						|
 | 
						|
        [Header("Common UI")]
 | 
						|
        public GameObject InfosPanel;
 | 
						|
        public GameObject MinimalUiInfosPanel;
 | 
						|
 | 
						|
        [Header("Lobby UI")]
 | 
						|
        public GameObject LobbyPanel;
 | 
						|
        public Selectable JoinLobbyButton;
 | 
						|
        public RoomListView RoomListManager;
 | 
						|
        public FriendListView FriendListManager;
 | 
						|
        public GameObject RoomListMatchMakingForm;
 | 
						|
 | 
						|
        [Header("Game UI")]
 | 
						|
        public GameObject GamePanel;
 | 
						|
        public PlayerListView PlayerListManager;
 | 
						|
        public PlayerDetailsController PlayerDetailsManager;
 | 
						|
 | 
						|
        public InputField RoomCustomPropertyInputfield;
 | 
						|
 | 
						|
		[Header("Photon Settings")]
 | 
						|
        /// <summary>
 | 
						|
        /// The game version override. This is one way to let the user define the gameversion, and set it properly right after we call connect to override the server settings
 | 
						|
        /// Check ConnectAndJoinRandom.cs for another example of gameversion overriding
 | 
						|
        /// </summary>
 | 
						|
		public string GameVersionOverride = String.Empty;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// The reset flag for best cloud ServerSettings.
 | 
						|
        /// This is one way to let the user define if bestcloud cache should be reseted when connecting.
 | 
						|
        /// </summary>
 | 
						|
		public bool ResetBestRegionCodeInPreferences = false;
 | 
						|
 | 
						|
        [Header("Room Options")]
 | 
						|
        public int MaxPlayers = 4;
 | 
						|
        public int PlayerTtl = 0;
 | 
						|
        public int EmptyRoomTtl = 0;
 | 
						|
        public string Plugins = "";
 | 
						|
        public bool PublishUserId = true;
 | 
						|
        public bool IsVisible = true;
 | 
						|
        public bool IsOpen = true;
 | 
						|
        //public bool CheckUserOnJoin = false;
 | 
						|
        public bool CleanupCacheOnLeave = true;
 | 
						|
        public bool DeleteNullProperties = false;
 | 
						|
 | 
						|
        [Header("Room Options UI")]
 | 
						|
        public IntInputField PlayerTtlField;
 | 
						|
        public IntInputField EmptyRoomTtlField;
 | 
						|
        public IntInputField MaxPlayersField;
 | 
						|
        public StringInputField PluginsField;
 | 
						|
        public BoolInputField PublishUserIdField;
 | 
						|
        public BoolInputField IsVisibleField;
 | 
						|
        public BoolInputField IsOpenField;
 | 
						|
        public BoolInputField CleanupCacheOnLeaveField;
 | 
						|
        //	public BoolInputField CheckUserOnJoinField;
 | 
						|
        public BoolInputField DeleteNullPropertiesField;
 | 
						|
 | 
						|
        [Header("Friends Options")]
 | 
						|
        public FriendListView.FriendDetail[] FriendsList =
 | 
						|
            new FriendListView.FriendDetail[]{
 | 
						|
            new FriendListView.FriendDetail("Joe","Joe"),
 | 
						|
            new FriendListView.FriendDetail("Jane","Jane"),
 | 
						|
            new FriendListView.FriendDetail("Bob","Bob")
 | 
						|
            };
 | 
						|
 | 
						|
		[Header("Modal window")]
 | 
						|
		public CanvasGroup ModalWindow;
 | 
						|
 | 
						|
		public RegionListView RegionListView;
 | 
						|
		public Text RegionListLoadingFeedback;
 | 
						|
 | 
						|
        public void Start()
 | 
						|
        {
 | 
						|
 | 
						|
            Instance = this;
 | 
						|
 | 
						|
			// doc setup
 | 
						|
 | 
						|
			DocLinks.Language = DocLinks.Languages.English;
 | 
						|
			DocLinks.Product = DocLinks.Products.Pun;
 | 
						|
			DocLinks.Version = DocLinks.Versions.V2;
 | 
						|
 | 
						|
			//
 | 
						|
 | 
						|
			ModalWindow.gameObject.SetActive (false);
 | 
						|
 | 
						|
            MaximalCanvasGroup.gameObject.SetActive(true);
 | 
						|
 | 
						|
            this.UserIdText.text = "";
 | 
						|
            this.StateText.text = "";
 | 
						|
            this.StateText.gameObject.SetActive(true);
 | 
						|
            this.UserIdText.gameObject.SetActive(true);
 | 
						|
            this.Title.gameObject.SetActive(true);
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(false);
 | 
						|
            this.LobbyPanel.SetActive(false);
 | 
						|
            this.GamePanel.SetActive(false);
 | 
						|
 | 
						|
            if (string.IsNullOrEmpty(UserId))
 | 
						|
            {
 | 
						|
                UserId = "user" + Environment.TickCount % 99; //made-up username
 | 
						|
            }
 | 
						|
 | 
						|
            PlayerTtlField.SetValue(this.PlayerTtl);
 | 
						|
            EmptyRoomTtlField.SetValue(this.EmptyRoomTtl);
 | 
						|
            MaxPlayersField.SetValue(this.MaxPlayers);
 | 
						|
            PluginsField.SetValue(this.Plugins);
 | 
						|
            PublishUserIdField.SetValue(this.PublishUserId);
 | 
						|
            IsVisibleField.SetValue(this.IsVisible);
 | 
						|
            IsOpenField.SetValue(this.IsOpen);
 | 
						|
            CleanupCacheOnLeaveField.SetValue(this.CleanupCacheOnLeave);
 | 
						|
            //CheckUserOnJoinField.SetValue (this.CheckUserOnJoin);
 | 
						|
            DeleteNullPropertiesField.SetValue(this.DeleteNullProperties);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
            // prefill dropdown selection of users
 | 
						|
            ConnectAsDropDown.ClearOptions();
 | 
						|
            ConnectAsDropDown.AddOptions(FriendsList.Select(x => x.NickName).ToList());
 | 
						|
 | 
						|
 | 
						|
			// check the current network status
 | 
						|
 | 
						|
			if (PhotonNetwork.IsConnected)
 | 
						|
			{
 | 
						|
				if (PhotonNetwork.Server == ServerConnection.GameServer)
 | 
						|
				{
 | 
						|
					this.OnJoinedRoom ();
 | 
						|
 | 
						|
				}
 | 
						|
				else if (PhotonNetwork.Server == ServerConnection.MasterServer || PhotonNetwork.Server == ServerConnection.NameServer)
 | 
						|
				{
 | 
						|
			
 | 
						|
					if (PhotonNetwork.InLobby)
 | 
						|
					{
 | 
						|
						this.OnJoinedLobby ();
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						this.OnConnectedToMaster ();
 | 
						|
					}
 | 
						|
 | 
						|
				}
 | 
						|
			}else
 | 
						|
			{
 | 
						|
	            this.SwitchToSimpleConnection();
 | 
						|
 | 
						|
	            if (!Embedded)
 | 
						|
	            {
 | 
						|
	                MinimizeButton.SetActive(false);
 | 
						|
	                SwitchtoMaximalPanel();
 | 
						|
	            }
 | 
						|
	            else
 | 
						|
	            {
 | 
						|
	                this.Title.text = EmbeddedGameTitle;
 | 
						|
	                SwitchtoMinimalPanel();
 | 
						|
	            }
 | 
						|
			}
 | 
						|
        }
 | 
						|
 | 
						|
        public void SwitchtoMinimalPanel()
 | 
						|
        {
 | 
						|
            MinimalCanvasGroup.gameObject.SetActive(true);
 | 
						|
            MaximalCanvasGroup.alpha = 0f;
 | 
						|
            MaximalCanvasGroup.blocksRaycasts = false;
 | 
						|
            MaximalCanvasGroup.interactable = false;
 | 
						|
        }
 | 
						|
 | 
						|
        public void SwitchtoMaximalPanel()
 | 
						|
        {
 | 
						|
            MinimalUIEmbeddHelp.SetActive(false);
 | 
						|
            MinimalCanvasGroup.gameObject.SetActive(false);
 | 
						|
 | 
						|
            MaximalCanvasGroup.alpha = 1f;
 | 
						|
            MaximalCanvasGroup.blocksRaycasts = true;
 | 
						|
            MaximalCanvasGroup.interactable = true;
 | 
						|
        }
 | 
						|
 | 
						|
        public void SwitchToAdvancedConnection()
 | 
						|
        {
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(true);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SwitchToSimpleConnection()
 | 
						|
        {
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(true);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
        }
 | 
						|
 | 
						|
        public void ToggleInfosInMinimalPanel()
 | 
						|
        {
 | 
						|
            MinimalUiInfosPanel.SetActive(!MinimalUiInfosPanel.activeSelf);
 | 
						|
        }
 | 
						|
 | 
						|
        public void RequestInfosPanel(GameObject Parent)
 | 
						|
        {
 | 
						|
            if (Parent != null)
 | 
						|
            {
 | 
						|
                InfosPanel.transform.SetParent(Parent.transform, false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public void OnUserIdSubmited(string userId)
 | 
						|
        {
 | 
						|
            this.UserId = userId;
 | 
						|
            this.Connect();
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetPlayerTtlRoomOption(int value)
 | 
						|
        {
 | 
						|
            this.PlayerTtl = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:PlayerTtl = " + this.PlayerTtl);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetEmptyRoomTtlRoomOption(int value)
 | 
						|
        {
 | 
						|
            this.EmptyRoomTtl = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:EmptyRoomTtl = " + this.EmptyRoomTtl);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetMaxPlayersRoomOption(int value)
 | 
						|
        {
 | 
						|
            this.MaxPlayers = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:MaxPlayers = " + this.MaxPlayers);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetPluginsRoomOption(string value)
 | 
						|
        {
 | 
						|
            this.Plugins = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:Plugins = " + this.Plugins);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetPublishUserId(bool value)
 | 
						|
        {
 | 
						|
            this.PublishUserId = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:PublishUserId = " + this.PublishUserId);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetIsVisible(bool value)
 | 
						|
        {
 | 
						|
            this.IsVisible = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:IsVisible = " + this.IsVisible);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetIsOpen(bool value)
 | 
						|
        {
 | 
						|
            this.IsOpen = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:IsOpen = " + this.IsOpen);
 | 
						|
        }
 | 
						|
 | 
						|
        //	public void SetCheckUserOnJoin(bool value)
 | 
						|
        //	{
 | 
						|
        //		this.CheckUserOnJoin = value;
 | 
						|
        //		Debug.Log ("CheckUserOnJoin = " + this.CheckUserOnJoin);
 | 
						|
        //	}
 | 
						|
 | 
						|
		public void SetResetBestRegionCodeInPreferences(bool value)
 | 
						|
		{
 | 
						|
			this.ResetBestRegionCodeInPreferences = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:ResetBestRegionCodeInPreferences = " + this.ResetBestRegionCodeInPreferences);
 | 
						|
		}
 | 
						|
 | 
						|
        public void SetCleanupCacheOnLeave(bool value)
 | 
						|
        {
 | 
						|
            this.CleanupCacheOnLeave = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:CleanupCacheOnLeave = " + this.CleanupCacheOnLeave);
 | 
						|
        }
 | 
						|
 | 
						|
        public void SetDeleteNullProperties(bool value)
 | 
						|
        {
 | 
						|
            this.DeleteNullProperties = value;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:DeleteNullProperties = " + this.DeleteNullProperties);
 | 
						|
        }
 | 
						|
 | 
						|
		LoadBalancingClient _lbc;
 | 
						|
		bool _regionPingProcessActive;
 | 
						|
		List<Region> RegionsList;
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// in progress, not fully working
 | 
						|
		/// </summary>
 | 
						|
		public void PingRegions()
 | 
						|
		{
 | 
						|
			ModalWindow.gameObject.SetActive (true);
 | 
						|
 | 
						|
			RegionListLoadingFeedback.text = "Connecting to NameServer...";
 | 
						|
			_regionPingProcessActive = true;
 | 
						|
			if (debug)	Debug.Log("PunCockpit:PingRegions:ConnectToNameServer");
 | 
						|
 | 
						|
 | 
						|
            _lbc = new LoadBalancingClient();
 | 
						|
            
 | 
						|
			_lbc.AddCallbackTarget(this);
 | 
						|
 | 
						|
 | 
						|
			_lbc.StateChanged += OnStateChanged;
 | 
						|
 | 
						|
			_lbc.AppId = PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime;
 | 
						|
			_lbc.ConnectToNameServer ();
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		void Update()
 | 
						|
		{
 | 
						|
			if (_lbc!=null) _lbc.Service();
 | 
						|
 | 
						|
			if (RegionsList !=null)
 | 
						|
			{
 | 
						|
				if (this.ModalWindow.gameObject.activeInHierarchy) {
 | 
						|
 | 
						|
					if (PunCockpit.Instance.debug)	Debug.Log("PunCockpit:OnRegionsPinged");
 | 
						|
 | 
						|
					this.RegionListView.OnRegionListUpdate (RegionsList);
 | 
						|
				}
 | 
						|
 | 
						|
				_lbc = null;
 | 
						|
 | 
						|
				RegionListLoadingFeedback.text = string.Empty;
 | 
						|
 | 
						|
				RegionsList = null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		void OnStateChanged(ClientState previousState, ClientState state)
 | 
						|
		{
 | 
						|
			if (state == ClientState.ConnectedToNameServer) {
 | 
						|
				_lbc.StateChanged -= this.OnStateChanged;
 | 
						|
 | 
						|
				if (debug)	Debug.Log("PunCockpit:OnStateChanged: ClientState.ConnectedToNameServer. Waiting for OnRegionListReceived callback.");
 | 
						|
 | 
						|
				RegionListLoadingFeedback.text = "Waiting for application Region List...";
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        public override void OnRegionListReceived(RegionHandler regionHandler)
 | 
						|
		{
 | 
						|
			if (PunCockpit.Instance.debug)
 | 
						|
				Debug.Log ("PunCockpit:OnRegionListReceived: " + regionHandler);
 | 
						|
 | 
						|
			if (_regionPingProcessActive)
 | 
						|
			{
 | 
						|
				RegionListLoadingFeedback.text = "Pinging Regions...";
 | 
						|
				_regionPingProcessActive = false;
 | 
						|
				regionHandler.PingMinimumOfRegions (OnRegionsPinged, null);
 | 
						|
			}
 | 
						|
        }
 | 
						|
        
 | 
						|
 | 
						|
		private void OnRegionsPinged(RegionHandler regionHandler)
 | 
						|
		{
 | 
						|
				RegionsList = regionHandler.EnabledRegions.OrderBy(x=>x.Ping).ToList();
 | 
						|
				// will check this on Update() to get back to the main thread.
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		public void CloseRegionListView()
 | 
						|
		{
 | 
						|
 | 
						|
			RegionsList = null;
 | 
						|
 | 
						|
			if (_lbc != null) {
 | 
						|
				_lbc.Disconnect ();
 | 
						|
				_lbc = null;
 | 
						|
			}
 | 
						|
 | 
						|
			_regionPingProcessActive = false;
 | 
						|
 | 
						|
			this.RegionListView.ResetList ();
 | 
						|
			this.ModalWindow.gameObject.SetActive (false);
 | 
						|
		}
 | 
						|
 | 
						|
		public void LoadLevel(string level)
 | 
						|
		{
 | 
						|
			if (debug) Debug.Log("PunCockpit:LoadLevel(" +level+")");
 | 
						|
			PhotonNetwork.LoadLevel(level);
 | 
						|
		}
 | 
						|
 | 
						|
        public void SetRoomCustomProperty(string value)
 | 
						|
        {
 | 
						|
			if (debug) Debug.Log("PunCockpit:SetRoomCustomProperty() c0 = " + value);
 | 
						|
            PhotonNetwork.CurrentRoom.SetCustomProperties(new Hashtable() { { "C0", value } });
 | 
						|
        }
 | 
						|
 | 
						|
        private string roomNameToEnter;
 | 
						|
 | 
						|
        public void JoinRoom(string roomName)
 | 
						|
        {
 | 
						|
            this.RoomListManager.ResetList();
 | 
						|
            this.LobbyPanel.gameObject.SetActive(false);
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
            this.roomNameToEnter = roomName;
 | 
						|
            PhotonNetwork.JoinRoom(roomName);
 | 
						|
        }
 | 
						|
 | 
						|
        public void CreateRoom()
 | 
						|
        {
 | 
						|
            this.CreateRoom(null, null, LobbyType.Default);
 | 
						|
        }
 | 
						|
 | 
						|
        public void CreateRoom(string roomName, string lobbyName = "MyLobby", LobbyType lobbyType = LobbyType.SqlLobby, string[] expectedUsers = null)
 | 
						|
        {
 | 
						|
			if (debug) Debug.Log("PunCockpit:CreateRoom roomName:" + roomName + " lobbyName:" + lobbyName + " lobbyType:" + lobbyType + " expectedUsers:" + (expectedUsers == null ? "null" : expectedUsers.ToStringFull()));
 | 
						|
 | 
						|
            this.RoomListManager.ResetList();
 | 
						|
            this.LobbyPanel.gameObject.SetActive(false);
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
            RoomOptions _roomOptions = this.GetRoomOptions();
 | 
						|
			if (debug) Debug.Log("PunCockpit:Room options  <" + _roomOptions + ">");
 | 
						|
 | 
						|
            TypedLobby sqlLobby = new TypedLobby(lobbyName, lobbyType);
 | 
						|
            bool _result = PhotonNetwork.CreateRoom(roomName, _roomOptions, sqlLobby, expectedUsers);
 | 
						|
 | 
						|
			if (debug) Debug.Log("PunCockpit:CreateRoom() -> " + _result);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public void JoinRandomRoom()
 | 
						|
        {
 | 
						|
            PhotonNetwork.JoinRandomRoom();
 | 
						|
        }
 | 
						|
 | 
						|
        public void LeaveRoom()
 | 
						|
        {
 | 
						|
            PlayerListManager.ResetList();
 | 
						|
            this.GamePanel.gameObject.SetActive(false);
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
            PhotonNetwork.LeaveRoom();
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public void Connect()
 | 
						|
        {
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
 | 
						|
            PhotonNetwork.AuthValues = new AuthenticationValues();
 | 
						|
            PhotonNetwork.AuthValues.UserId = this.UserId;
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
            PhotonNetwork.ConnectUsingSettings();
 | 
						|
			//if (GameVersionOverride != string.Empty) {
 | 
						|
		//		PhotonNetwork.GameVersion = "28"; // GameVersionOverride;
 | 
						|
		//	}
 | 
						|
        }
 | 
						|
 | 
						|
        public void ReConnect()
 | 
						|
        {
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
 | 
						|
            PhotonNetwork.AuthValues = new AuthenticationValues();
 | 
						|
            PhotonNetwork.AuthValues.UserId = this.UserId;
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
            PhotonNetwork.Reconnect();
 | 
						|
        }
 | 
						|
 | 
						|
        public void ReconnectAndRejoin()
 | 
						|
        {
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
 | 
						|
            PhotonNetwork.AuthValues = new AuthenticationValues();
 | 
						|
            PhotonNetwork.AuthValues.UserId = this.UserId;
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
            PhotonNetwork.ReconnectAndRejoin();
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public void ConnectToBestCloudServer()
 | 
						|
        {
 | 
						|
 | 
						|
            PhotonNetwork.NetworkingClient.AppId = PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime;
 | 
						|
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
 | 
						|
            PhotonNetwork.AuthValues = new AuthenticationValues();
 | 
						|
            PhotonNetwork.AuthValues.UserId = this.UserId;
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
			if (this.ResetBestRegionCodeInPreferences) {
 | 
						|
				ServerSettings.ResetBestRegionCodeInPreferences ();
 | 
						|
			}
 | 
						|
 | 
						|
            PhotonNetwork.ConnectToBestCloudServer();
 | 
						|
			if (GameVersionOverride != string.Empty) {
 | 
						|
				PhotonNetwork.GameVersion = GameVersionOverride;
 | 
						|
			}
 | 
						|
        }
 | 
						|
 | 
						|
        public void ConnectToRegion(string region)
 | 
						|
        {
 | 
						|
 | 
						|
			if (debug)  Debug.Log("PunCockpit:ConnectToRegion(" + region + ")");
 | 
						|
 | 
						|
            PhotonNetwork.NetworkingClient.AppId = PhotonNetwork.PhotonServerSettings.AppSettings.AppIdRealtime;
 | 
						|
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
 | 
						|
            PhotonNetwork.AuthValues = new AuthenticationValues();
 | 
						|
            PhotonNetwork.AuthValues.UserId = this.UserId;
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(true);
 | 
						|
 | 
						|
            bool _result = PhotonNetwork.ConnectToRegion(region);
 | 
						|
 | 
						|
			if (GameVersionOverride != string.Empty) {
 | 
						|
				PhotonNetwork.GameVersion = GameVersionOverride;
 | 
						|
			}
 | 
						|
 | 
						|
			if (debug)  Debug.Log("PunCockpit:ConnectToRegion(" + region + ") ->" + _result);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        public void ConnectOffline()
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:ConnectOffline()");
 | 
						|
            PhotonNetwork.OfflineMode = true;
 | 
						|
        }
 | 
						|
 | 
						|
        public void JoinLobby()
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:JoinLobby()");
 | 
						|
			bool _result =  PhotonNetwork.JoinLobby();
 | 
						|
 | 
						|
			if (!_result) {
 | 
						|
				Debug.LogError ("PunCockpit: Could not joinLobby");
 | 
						|
			}
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public void Disconnect()
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:Disconnect()");
 | 
						|
            PhotonNetwork.Disconnect();
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public void OpenDashboard()
 | 
						|
        {
 | 
						|
            Application.OpenURL("https://dashboard.photonengine.com");
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        #region CONNECT UI
 | 
						|
        public void OnDropdownConnectAs(int dropdownIndex)
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnDropdownConnectAs(" + dropdownIndex + ")");
 | 
						|
 | 
						|
            this.UserId = this.FriendsList[dropdownIndex].UserId;
 | 
						|
            PlayerPrefs.SetString(UserIdUiForm.UserIdPlayerPref, this.UserId);
 | 
						|
 | 
						|
            StartCoroutine(OnDropdownConnectAs_CB());
 | 
						|
        }
 | 
						|
 | 
						|
        IEnumerator OnDropdownConnectAs_CB()
 | 
						|
        {
 | 
						|
            // wait for the dropdown to animate.
 | 
						|
            yield return new WaitForSeconds(0.2f);
 | 
						|
 | 
						|
            this.Connect();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
        #region IN LOBBY UI
 | 
						|
 | 
						|
        public void OnLobbyToolsViewTabChanged(string tabId)
 | 
						|
        {
 | 
						|
            //	Debug.Log("PunCockpit:OnLobbyToolsViewTabChanged("+tabId+")");
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region IN ROOM UI 
 | 
						|
 | 
						|
        public void OnSelectPlayer()
 | 
						|
        {
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PUN CallBacks
 | 
						|
 | 
						|
        public override void OnConnected()
 | 
						|
        {
 | 
						|
			if (debug) Debug.Log("PunCockpit:OnConnected()");
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(false);
 | 
						|
 | 
						|
            this.UserIdText.text = "UserId:" + this.UserId + " Nickname:" + PhotonNetwork.NickName;
 | 
						|
        }
 | 
						|
 | 
						|
		public override void OnDisconnected(DisconnectCause cause)
 | 
						|
        {
 | 
						|
			if (debug) Debug.Log("PunCockpit:OnDisconnected("+cause+")");
 | 
						|
 | 
						|
            this.ConnectingLabel.SetActive(false);
 | 
						|
            this.UserIdText.text = string.Empty;
 | 
						|
            this.StateText.text = string.Empty;
 | 
						|
 | 
						|
            this.GamePanel.gameObject.SetActive(false);
 | 
						|
            this.LobbyPanel.gameObject.SetActive(false);
 | 
						|
            this.ConnectionPanel.gameObject.SetActive(true);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnConnectedToMaster()
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnConnectedToMaster()");
 | 
						|
 | 
						|
 | 
						|
            this.StateText.text = "Connected to Master" + (PhotonNetwork.OfflineMode ? " <Color=Red><b>Offline</b></color>" : "");
 | 
						|
 | 
						|
            this.SetUpLobbyGenericUI();
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnJoinedLobby()
 | 
						|
        {
 | 
						|
            this.StateText.text = "Connected to Lobby";
 | 
						|
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnJoinedLobby()");
 | 
						|
            this.SetUpLobbyGenericUI();
 | 
						|
        }
 | 
						|
 | 
						|
        void SetUpLobbyGenericUI()
 | 
						|
        {
 | 
						|
            this.ConnectingLabel.gameObject.SetActive(false);
 | 
						|
            this.AdvancedConnectionPanel.gameObject.SetActive(false);
 | 
						|
            this.LobbyPanel.gameObject.SetActive(true);
 | 
						|
            this.RoomListManager.OnJoinedLobbyCallBack();
 | 
						|
            this.FriendListManager.SetFriendDetails(this.FriendsList);
 | 
						|
 | 
						|
            JoinLobbyButton.interactable = !PhotonNetwork.InLobby && !PhotonNetwork.OfflineMode;
 | 
						|
 | 
						|
 | 
						|
            RoomListManager.gameObject.SetActive(!PhotonNetwork.OfflineMode);
 | 
						|
            FriendListManager.gameObject.SetActive(!PhotonNetwork.OfflineMode);
 | 
						|
 | 
						|
            RoomListMatchMakingForm.SetActive(!PhotonNetwork.InLobby);
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)
 | 
						|
        {
 | 
						|
			if (debug) Debug.Log("PunCockpit:OnRoomPropertiesUpdate() " + propertiesThatChanged.ToStringFull());
 | 
						|
 | 
						|
            if (propertiesThatChanged.ContainsKey("C0"))
 | 
						|
            {
 | 
						|
                RoomCustomPropertyInputfield.text = propertiesThatChanged["C0"].ToString();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnLeftLobby()
 | 
						|
        {
 | 
						|
			if (debug) Debug.Log("PunCockpit:OnLeftLobby()");
 | 
						|
 | 
						|
            this.RoomListManager.ResetList();
 | 
						|
            this.LobbyPanel.gameObject.SetActive(false);
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnCreateRoomFailed(short returnCode, string message)
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnCreateRoomFailed(" + returnCode + "," + message + ")");
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnJoinRandomFailed(short returnCode, string message)
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnJoinRandomFailed(" + returnCode + "," + message + ")");
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnJoinedRoom()
 | 
						|
        {
 | 
						|
 | 
						|
            this.StateText.text = "Connected to GameServer " + (PhotonNetwork.OfflineMode ? " <Color=Red><b>Offline</b></color>" : "");
 | 
						|
 | 
						|
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnJoinedRoom()");
 | 
						|
 | 
						|
            this.ConnectingLabel.gameObject.SetActive(false);
 | 
						|
 | 
						|
            this.PlayerListManager.ResetList();
 | 
						|
 | 
						|
            this.GamePanel.gameObject.SetActive(true);
 | 
						|
 | 
						|
            this.PlayerDetailsManager.SetPlayerTarget(PhotonNetwork.LocalPlayer);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnJoinRoomFailed(short returnCode, string message)
 | 
						|
        {
 | 
						|
            switch (returnCode)
 | 
						|
            {
 | 
						|
                case ErrorCode.JoinFailedFoundInactiveJoiner:
 | 
						|
                    if (!string.IsNullOrEmpty(this.roomNameToEnter))
 | 
						|
                    {
 | 
						|
                        PhotonNetwork.RejoinRoom(this.roomNameToEnter);
 | 
						|
                        this.roomNameToEnter = null;
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnLeftRoom()
 | 
						|
        {
 | 
						|
			if (debug)  Debug.Log("PunCockpit:OnLeftRoom()");
 | 
						|
            this.GamePanel.gameObject.SetActive(false);
 | 
						|
 | 
						|
			if (PhotonNetwork.OfflineMode)
 | 
						|
			{
 | 
						|
				this.ConnectingLabel.gameObject.SetActive(false);
 | 
						|
				this.ConnectionPanel.gameObject.SetActive (true);
 | 
						|
			}
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
 | 
						|
        RoomOptions GetRoomOptions()
 | 
						|
        {
 | 
						|
            RoomOptions _roomOptions = new RoomOptions();
 | 
						|
 | 
						|
            _roomOptions.MaxPlayers = (byte)this.MaxPlayers;
 | 
						|
 | 
						|
            _roomOptions.IsOpen = this.IsOpen;
 | 
						|
 | 
						|
            _roomOptions.IsVisible = this.IsVisible;
 | 
						|
 | 
						|
            _roomOptions.EmptyRoomTtl = this.EmptyRoomTtl;
 | 
						|
 | 
						|
            _roomOptions.PlayerTtl = this.PlayerTtl;
 | 
						|
 | 
						|
            _roomOptions.PublishUserId = this.PublishUserId;
 | 
						|
 | 
						|
            _roomOptions.CleanupCacheOnLeave = this.CleanupCacheOnLeave;
 | 
						|
            _roomOptions.DeleteNullProperties = this.DeleteNullProperties;
 | 
						|
 | 
						|
            _roomOptions.CustomRoomProperties = new ExitGames.Client.Photon.Hashtable() { { "C0", "Hello" } };
 | 
						|
            _roomOptions.CustomRoomPropertiesForLobby = new string[] { "C0" };
 | 
						|
 | 
						|
 | 
						|
            return _roomOptions;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |