// -------------------------------------------------------------------------------------------------------------------- // // Part of: Pun Cockpit // // developer@exitgames.com // -------------------------------------------------------------------------------------------------------------------- using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using Photon.Realtime; namespace Photon.Pun.Demo.Cockpit { /// /// Room list UI View. /// public class RoomListView : MonoBehaviourPunCallbacks { [System.Serializable] public class OnJoinRoomEvent : UnityEvent { } public OnJoinRoomEvent OnJoinRoom; public RoomListCell CellPrototype; public Text UpdateStatusText; public Text ContentFeedback; public InputField LobbyNameInputField; public InputField SqlQueryInputField; bool _firstUpdate = true; Dictionary roomCellList = new Dictionary(); public override void OnEnable() { base.OnEnable(); ResetList(); CellPrototype.gameObject.SetActive(false); UpdateStatusText.text = string.Empty; ContentFeedback.text = string.Empty; } public void OnRoomCellJoinButtonClick(string roomName) { OnJoinRoom.Invoke(roomName); } public override void OnRoomListUpdate(List roomList) { UpdateStatusText.text = "Updated"; if (roomList.Count == 0 && !PhotonNetwork.InLobby) { ContentFeedback.text = "No Room found in lobby "+LobbyNameInputField.text+" Matching: "+SqlQueryInputField.text; } foreach (RoomInfo entry in roomList) { if (roomCellList.ContainsKey(entry.Name)) { if (entry.RemovedFromList) { // we delete the cell roomCellList[entry.Name].RemoveFromList(); roomCellList.Remove(entry.Name); } else { // we update the cell roomCellList[entry.Name].RefreshInfo(entry); } } else { if (!entry.RemovedFromList) { // we create the cell roomCellList[entry.Name] = Instantiate(CellPrototype); roomCellList[entry.Name].gameObject.SetActive(true); roomCellList[entry.Name].transform.SetParent(CellPrototype.transform.parent, false); roomCellList[entry.Name].AddToList(entry, !_firstUpdate); } } } StartCoroutine("clearStatus"); _firstUpdate = false; } IEnumerator clearStatus() { yield return new WaitForSeconds(1f); UpdateStatusText.text = string.Empty; } public void OnJoinedLobbyCallBack() { _firstUpdate = true; ContentFeedback.text = string.Empty; } public void GetRoomList() { ResetList (); TypedLobby sqlLobby = new TypedLobby(LobbyNameInputField.text, LobbyType.SqlLobby); Debug.Log ("Cockpit: GetCustomRoomList() matchmaking against '"+LobbyNameInputField.text+"' SqlLobby using query : "+SqlQueryInputField.text); PhotonNetwork.GetCustomRoomList(sqlLobby, SqlQueryInputField.text ); //"C0 = 'Hello'" ContentFeedback.text = "looking for Rooms in Lobby '"+LobbyNameInputField.text+"' Matching: '"+SqlQueryInputField.text; } public void ResetList() { _firstUpdate = true; foreach (KeyValuePair entry in roomCellList) { if (entry.Value != null) { Destroy(entry.Value.gameObject); } } roomCellList = new Dictionary(); } } }