|
|
|
|
// --------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
// <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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|