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.

275 lines
6.7 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. public int maxPlayers = 2;
  10. 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. }
  50. private void OnEnable()
  51. {
  52. clientManager.OnConnectedToServer += OnConnect;
  53. clientManager.OnLoginSucess += OnLogin;
  54. clientManager.OnLoginFail += OnLoginFail;
  55. }
  56. private void OnDisable()
  57. {
  58. clientManager.OnConnectedToServer -= OnConnect;
  59. clientManager.OnLoginSucess -= OnLogin;
  60. clientManager.OnLoginFail -= OnLoginFail;
  61. }
  62. private void Start()
  63. {
  64. serverAddress = PlayerPrefs.GetString("LastUsedAddress", "");
  65. serverPort = PlayerPrefs.GetInt("LastUsedPort", 2222);
  66. playerName = PlayerPrefs.GetString("LastUsedName");
  67. OnLoginFail();
  68. }
  69. #endregion Unity Functions
  70. #region Event Functions
  71. IEnumerator DisplayTooManyCoroutine()
  72. {
  73. tooManyObject.SetActive(true);
  74. yield return new WaitForSeconds(5.0f);
  75. tooManyObject.SetActive(false);
  76. }
  77. public void OnConnect()
  78. {
  79. Title.text = DetailsTitle;
  80. CloseAll();
  81. DetailsObject.SetActive(true);
  82. }
  83. public void OnLogin()
  84. {
  85. Title.text = WaitTitle;
  86. CloseAll();
  87. WaitObject.SetActive(true);
  88. }
  89. public void OnLoginFail2Many()
  90. {
  91. Title.text = ConnectionTitle;
  92. CloseAll();
  93. StartCoroutine(DisplayTooManyCoroutine());
  94. ConnectionObject.SetActive(true);
  95. }
  96. public void OnLoginFail()
  97. {
  98. Title.text = ConnectionTitle;
  99. Debug.Log("Failure");
  100. CloseAll();
  101. ConnectionObject.SetActive(true);
  102. }
  103. #endregion Event Functions
  104. #region UI Functionality
  105. public void OnChange_ServerAddress(string serverAddress)
  106. {
  107. this.serverAddress = serverAddress;
  108. }
  109. public void OnChange_ServerPort(string serverPort)
  110. {
  111. this.serverPort = int.Parse(serverPort);
  112. }
  113. public void OnClick_Back()
  114. {
  115. UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu Client");
  116. }
  117. public void OnClick_Connect()
  118. {
  119. clientManager.StartClient(serverAddress, serverPort);
  120. PlayerPrefs.SetString("LastUsedAddress", serverAddress);
  121. PlayerPrefs.SetInt("LastUsedPort", serverPort);
  122. PlayerPrefs.Save();
  123. }
  124. public void OnClick_Done()
  125. {
  126. if(conn <= maxPlayers)
  127. {
  128. if (colorSelected == true && animalSelected == true && playerName != "")
  129. {
  130. clientManager.SendPlayerDetails(playerName, playerColor, playerAnimal);
  131. PlayerPrefs.SetString("LastUsedName", playerName);
  132. }
  133. }
  134. else
  135. {
  136. OnLoginFail2Many();
  137. }
  138. }
  139. public void OnClick_Animal(string playerAnimal)
  140. {
  141. this.playerAnimal = playerAnimal;
  142. animalSelected = true;
  143. getPlayerColour(playerAnimal);
  144. clientManager.SendPlayerADetails(playerAnimal);
  145. }
  146. public void OnChange_Name(string playerName)
  147. {
  148. this.playerName = playerName;
  149. }
  150. public void OnClick_Ready()
  151. {
  152. UnityEngine.SceneManagement.SceneManager.LoadScene(SceneToLoad);
  153. }
  154. public void getPlayerColour(string playerAnimal)
  155. {
  156. Color newColor = new Color();
  157. string hex = "#000000";
  158. switch (playerAnimal)
  159. {
  160. case "Bear":
  161. //red
  162. hex = "#FF0000";
  163. break;
  164. case "Cat":
  165. //sky blue
  166. hex = "#008BFF";
  167. break;
  168. case "Cow":
  169. //yellow
  170. hex = "#FFFF00";
  171. break;
  172. case "Deer":
  173. //purpe/pink
  174. hex = "#B200FF";
  175. break;
  176. case "Dog":
  177. //purple
  178. hex = "#6700FF";
  179. break;
  180. case "Fox":
  181. //orange
  182. hex = "#FF7B00";
  183. break;
  184. case "Goat":
  185. //cyan
  186. hex = "#00FFFF";
  187. break;
  188. case "Horse":
  189. //dark blue
  190. hex = "#0000FF";
  191. break;
  192. case "Lion":
  193. //lime
  194. hex = "#00FF00";
  195. break;
  196. case "Lizard":
  197. //light green
  198. hex = "#7AFF00";
  199. break;
  200. case "Panda":
  201. //salmon
  202. hex = "#FFA07A";
  203. break;
  204. case "Pig":
  205. //pink
  206. hex = "#FF00DA";
  207. break;
  208. case "Sheep":
  209. //maroon
  210. hex = "#800000";
  211. break;
  212. case "Turtle":
  213. //dark green
  214. hex = "#008000";
  215. break;
  216. case "Wolf":
  217. //grey
  218. hex = "#808080";
  219. break;
  220. case "Zebra":
  221. //black
  222. hex = "#000000";
  223. break;
  224. default:
  225. break;
  226. }
  227. if (ColorUtility.TryParseHtmlString(hex, out newColor))
  228. {
  229. this.playerColor = newColor;
  230. colorSelected = true;
  231. }
  232. }
  233. #endregion UI Functionality
  234. #region Helper Functions
  235. private void CloseAll()
  236. {
  237. foreach (Transform child in Content.transform)
  238. child.gameObject.SetActive(false);
  239. }
  240. #endregion Helper Functions
  241. }