You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
6.9 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Networking.Client;
  5. using TMPro;
  6. public class LoginUIManager : MonoBehaviour
  7. {
  8. public int conn;
  9. int maxPlayers = 8;
  10. public ConnectedClients clients;
  11. [Header("References")]
  12. [SerializeField]
  13. private ClientLoginManager clientManager;
  14. [SerializeField]
  15. private TextMeshProUGUI Title;
  16. [SerializeField]
  17. private GameObject Content;
  18. [Header("Connection")]
  19. [SerializeField]
  20. private string ConnectionTitle = "Connect to Server";
  21. [SerializeField]
  22. private GameObject ConnectionObject;
  23. [Header("PlayerDetails")]
  24. [SerializeField]
  25. private string DetailsTitle = "Player Details";
  26. [SerializeField]
  27. private GameObject DetailsObject;
  28. [Header("WaitForPlayers")]
  29. [SerializeField]
  30. private string WaitTitle = "Wait for Players";
  31. [SerializeField]
  32. private string SceneToLoad;
  33. [SerializeField]
  34. private GameObject WaitObject;
  35. [Header("TooManyPlayerDetails")]
  36. [SerializeField]
  37. private GameObject tooManyObject;
  38. private string serverAddress;
  39. private int serverPort;
  40. private string playerName;
  41. private string playerAnimal;
  42. private Color playerColor;
  43. bool animalSelected = false;
  44. bool colorSelected = false;
  45. #region Unity Functions
  46. private void Update()
  47. {
  48. conn = GetComponent<animalSelection>().count;
  49. clients = GetComponent<animalSelection>().Clients;
  50. foreach (ClientData cli in clients.AllClients)
  51. {
  52. if (playerAnimal == cli.characterAnimal)
  53. {
  54. playerAnimal = null;
  55. animalSelected = false;
  56. }
  57. }
  58. }
  59. private void OnEnable()
  60. {
  61. clientManager.OnConnectedToServer += OnConnect;
  62. clientManager.OnLoginSucess += OnLogin;
  63. clientManager.OnLoginFail += OnLoginFail;
  64. }
  65. private void OnDisable()
  66. {
  67. clientManager.OnConnectedToServer -= OnConnect;
  68. clientManager.OnLoginSucess -= OnLogin;
  69. clientManager.OnLoginFail -= OnLoginFail;
  70. }
  71. private void Start()
  72. {
  73. serverAddress = PlayerPrefs.GetString("LastUsedAddress", "");
  74. serverPort = PlayerPrefs.GetInt("LastUsedPort", 2222);
  75. playerName = PlayerPrefs.GetString("LastUsedName");
  76. OnLoginFail();
  77. }
  78. #endregion Unity Functions
  79. #region Event Functions
  80. IEnumerator DisplayTooManyCoroutine()
  81. {
  82. tooManyObject.SetActive(true);
  83. yield return new WaitForSeconds(5.0f);
  84. tooManyObject.SetActive(false);
  85. }
  86. public void OnConnect()
  87. {
  88. Title.text = DetailsTitle;
  89. CloseAll();
  90. DetailsObject.SetActive(true);
  91. }
  92. public void OnLogin()
  93. {
  94. Title.text = WaitTitle;
  95. CloseAll();
  96. WaitObject.SetActive(true);
  97. }
  98. public void OnLoginFail2Many()
  99. {
  100. Title.text = ConnectionTitle;
  101. CloseAll();
  102. StartCoroutine(DisplayTooManyCoroutine());
  103. ConnectionObject.SetActive(true);
  104. }
  105. public void OnLoginFail()
  106. {
  107. Title.text = ConnectionTitle;
  108. Debug.Log("Failure");
  109. CloseAll();
  110. ConnectionObject.SetActive(true);
  111. }
  112. #endregion Event Functions
  113. #region UI Functionality
  114. public void OnChange_ServerAddress(string serverAddress)
  115. {
  116. this.serverAddress = serverAddress;
  117. }
  118. public void OnChange_ServerPort(string serverPort)
  119. {
  120. this.serverPort = int.Parse(serverPort);
  121. }
  122. public void OnClick_Back()
  123. {
  124. UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu Client");
  125. }
  126. public void OnClick_Connect()
  127. {
  128. clientManager.StartClient(serverAddress, serverPort);
  129. PlayerPrefs.SetString("LastUsedAddress", serverAddress);
  130. PlayerPrefs.SetInt("LastUsedPort", serverPort);
  131. PlayerPrefs.Save();
  132. }
  133. public void OnClick_Done()
  134. {
  135. if(conn < maxPlayers)
  136. {
  137. if (colorSelected == true && animalSelected == true && playerName != "")
  138. {
  139. clientManager.SendPlayerDetails(playerName, playerColor, playerAnimal);
  140. PlayerPrefs.SetString("LastUsedName", playerName);
  141. }
  142. }
  143. else
  144. {
  145. OnLoginFail2Many();
  146. }
  147. }
  148. public void OnClick_Animal(string playerAnimal)
  149. {
  150. this.playerAnimal = playerAnimal;
  151. animalSelected = true;
  152. getPlayerColour(playerAnimal);
  153. clientManager.SendPlayerADetails(playerAnimal);
  154. }
  155. public void OnChange_Name(string playerName)
  156. {
  157. this.playerName = playerName;
  158. }
  159. public void OnClick_Ready()
  160. {
  161. UnityEngine.SceneManagement.SceneManager.LoadScene(SceneToLoad);
  162. }
  163. public void getPlayerColour(string playerAnimal)
  164. {
  165. Color newColor = new Color();
  166. string hex = "#000000";
  167. switch (playerAnimal)
  168. {
  169. case "Bear":
  170. //red
  171. hex = "#FF0000";
  172. break;
  173. case "Cat":
  174. //sky blue
  175. hex = "#008BFF";
  176. break;
  177. case "Cow":
  178. //yellow
  179. hex = "#FFFF00";
  180. break;
  181. case "Deer":
  182. //purpe/pink
  183. hex = "#B200FF";
  184. break;
  185. case "Dog":
  186. //purple
  187. hex = "#6700FF";
  188. break;
  189. case "Fox":
  190. //orange
  191. hex = "#FF7B00";
  192. break;
  193. case "Goat":
  194. //cyan
  195. hex = "#00FFFF";
  196. break;
  197. case "Horse":
  198. //dark blue
  199. hex = "#0000FF";
  200. break;
  201. case "Lion":
  202. //lime
  203. hex = "#00FF00";
  204. break;
  205. case "Lizard":
  206. //light green
  207. hex = "#7AFF00";
  208. break;
  209. case "Panda":
  210. //salmon
  211. hex = "#FF7A82";
  212. break;
  213. case "Pig":
  214. //pink
  215. hex = "#FF00DA";
  216. break;
  217. case "Sheep":
  218. //maroon
  219. hex = "#800000";
  220. break;
  221. case "Turtle":
  222. //dark green
  223. hex = "#008000";
  224. break;
  225. case "Wolf":
  226. //grey
  227. hex = "#808080";
  228. break;
  229. case "Zebra":
  230. //black
  231. hex = "#000000";
  232. break;
  233. default:
  234. break;
  235. }
  236. if (ColorUtility.TryParseHtmlString(hex, out newColor))
  237. {
  238. this.playerColor = newColor;
  239. colorSelected = true;
  240. }
  241. }
  242. #endregion UI Functionality
  243. #region Helper Functions
  244. private void CloseAll()
  245. {
  246. foreach (Transform child in Content.transform)
  247. child.gameObject.SetActive(false);
  248. }
  249. #endregion Helper Functions
  250. }