using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using Networking; using Networking.Server; public class LobbyUIController : MonoBehaviour { [SerializeField] private ClientList Clients; [SerializeField] private string SceneToStart; [Header("UI Elements")] [SerializeField] private TextMeshProUGUI IPText; [SerializeField] private Transform Content; [SerializeField] private GameObject ClientTag; [SerializeField] private ServerObject Server; // Start is called before the first frame update void Start() { IPText.text = "Enter '" + Networking.Utility.GetIP(Networking.Utility.ADDRESSFAM.IPv4) + "' into browser"; } private void OnEnable() { Clients.OnClientsChange += DisplayClients; DisplayClients(Clients.ConnectedClients); if (Server.server != null) Server.RegisterHandler(LoginProtocols.StartGame, RecieveStartMsg); else Debug.LogWarning("Server not started yet"); } private void OnDisable() { Clients.OnClientsChange -= DisplayClients; if (Server.server != null) Server.UnregisterHandler(LoginProtocols.StartGame); } private void DisplayClients(List data) { //Debug.Log("Updating Connected Clients"); foreach (Transform child in Content) if (child.gameObject != ClientTag) Destroy(child.gameObject); for (int i = 0; i < Clients.ConnectedClients.Count; i++) { ClientData client = Clients.ConnectedClients[i]; GameObject clientObject = Instantiate(ClientTag, Content); TextMeshProUGUI clientText = clientObject.GetComponent(); clientText.text = client.Name + " the " + client.characterAnimal; clientText.color = client.Color; Material materialInstance = clientText.fontMaterial; materialInstance.EnableKeyword(ShaderUtilities.Keyword_Underlay); materialInstance.SetColor("_UnderlayColor", new Color(0.2264151f, 0.2264151f, 0.2264151f, 1)); materialInstance.SetFloat("_UnderlayOffsetX", 0.5f); materialInstance.SetFloat("_UnderlayOffsetY", -0.5f); clientObject.SetActive(true); } } public void OnClick_Back() { UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu Server"); } public void OnClick_StartGame() { #if UNITY_EDITOR UnityEngine.SceneManagement.SceneManager.LoadScene(SceneToStart); #else if (Clients.ConnectedClients.Count >= 2 && Clients.ConnectedClients.Count <= 8){ UnityEngine.SceneManagement.SceneManager.LoadScene(SceneToStart); } #endif } public void RecieveStartMsg(UnityEngine.Networking.NetworkMessage msg) { OnClick_StartGame(); } }