using UnityEngine; using System.Collections; using UnityEngine.Networking; using UnityEngine.Networking.Match; using UnityEngine.SceneManagement; using UnityEngine.UI; public class LobbyUIManager : MonoBehaviour { private static LobbyUIManager _instance; private LobbyManager _lobbyManager; [SerializeField] private InputField _portField; [SerializeField] private InputField _ipField; [SerializeField] private OfflineDisplay _offline; [SerializeField] private OnlineDisplay _online; [SerializeField] private LobbyPlayerUI _playerInfo; [SerializeField] private RectTransform _lobby; [SerializeField] private Button _hostButton; [SerializeField] private Button _joinButton; [SerializeField] private Image _connectingDisplay; private int _playerCount = 0; private LobbyManager LobbyMngr { get { return _lobbyManager ?? (_lobbyManager = LobbyManager.GetInstance ()); } } public int PlayerCount { get { return _playerCount; } } private void Awake () { if (null != _instance && _instance != this) { Destroy (gameObject); return; } _instance = this; } void Start () { _portField.text = "" + LobbyMngr.networkPort; LobbyMngr.onConnected += OnConnected; LobbyMngr.onDisconnected += OnDisconnected; SetOnlineOffline (false); PlayerConnectedEvent.handler += OnPlayerConnectedEvent; } void OnDestroy () { LobbyMngr.onConnected -= OnConnected; LobbyMngr.onDisconnected -= OnDisconnected; PlayerConnectedEvent.handler -= OnPlayerConnectedEvent; } private void SetOnlineOffline (bool online) { _offline.gameObject.SetActive (!online); _online.gameObject.SetActive (online); } private void OnConnected () { if (null != _connectingDisplay) _connectingDisplay.gameObject.SetActive (false); SetOnlineOffline (true); } public void OnReturnToLobby () { _offline = OfflineDisplay.GetInstance (); _online = OnlineDisplay.GetInstance (); OnConnected (); } private void OnDisconnected () { Destroy (LobbyManager.GetInstance ().gameObject); SceneManager.LoadScene ("Lobby"); } public void StartHost () { _hostButton.interactable = false; _joinButton.interactable = false; LobbyMngr.networkPort = int.Parse (_portField.text); if (null == LobbyMngr.StartHost ()) { // Error occured when starting server! // Display error perhaps... OnDisconnected (); return; } _connectingDisplay.gameObject.SetActive (true); } public void StartDedicated () { LobbyMngr.networkPort = int.Parse (_portField.text); LobbyMngr.StartServer (); } public void OnConnectError (NetworkMessage message) { OnDisconnected (); } public void ConnectToServer () { _hostButton.interactable = false; _joinButton.interactable = false; //LobbyMngr.networkPort = int.Parse (_portField.text); LobbyMngr.networkAddress = _ipField.text; NetworkClient client = LobbyMngr.StartClient (); client.RegisterHandler (MsgType.Error | MsgType.Disconnect, OnConnectError); _connectingDisplay.gameObject.SetActive (true); } public void Disconnect () { LobbyMngr.StopHost (); } public void OnPlayerConnectedEvent (PlayerConnectedEvent e) { LobbyPlayerUI obj = Instantiate (_playerInfo); obj.transform.SetParent (_lobby, false); Vector3 pos = obj.transform.localPosition; pos.y -= 50 * PlayerCount; obj.transform.localPosition = pos; ++_playerCount; obj.SetLobbyPlayer (e.Player); } public static LobbyUIManager GetInstance () { return _instance; } }