RegisterUIController.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Net.Mail;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. /* 这个controller用来控制注册UI和相关通讯的代码
  7. * 设置注册语言
  8. * 显示和关闭注册菜单
  9. * 跳转下一个场景
  10. * 上传用户注册信息
  11. */
  12. public class RegisterUIController : MonoBehaviour
  13. {
  14. private TextField userName, password, mobile, email;
  15. private Button confirm, cancel;
  16. private Label errorMsgLabel;
  17. private string errorText = null; // 错误信息汇总
  18. private Dictionary<string, string> errorMessageDict = new();
  19. // Start is called once before the first execution of Update after the MonoBehaviour is created
  20. void Start()
  21. {
  22. var root = GetComponent<UIDocument>().rootVisualElement;
  23. userName = root.Q<TextField>("name");
  24. password = root.Q<TextField>("password");
  25. mobile = root.Q<TextField>("mobile");
  26. email = root.Q<TextField>("email");
  27. confirm = root.Q<VisualElement>("confirmArea").Q<Button>("confirm");
  28. cancel = root.Q<VisualElement>("confirmArea").Q<Button>("cancel");
  29. errorMsgLabel = root.Q<Label>("error_msg");
  30. confirm.clicked += ConfirmClick;
  31. cancel.clicked += CancelClick;
  32. InitSetting();
  33. ClearTextFieldValue();
  34. }
  35. // Update is called once per frame
  36. void Update()
  37. {
  38. }
  39. // 绑定confirm按键按下事件
  40. void ConfirmClick()
  41. {
  42. Debug.Log("confirm btn clicked.");
  43. if (ContentCheckBeforePost())
  44. {
  45. StartCoroutine(Register());
  46. }
  47. }
  48. // 绑定取消按键
  49. void CancelClick()
  50. {
  51. var RegCanvas = GameObject.Find("Register Canvas");
  52. RegCanvas.SetActive(false);
  53. }
  54. // POST数据到服务器
  55. IEnumerator Register()
  56. {
  57. yield return null;
  58. }
  59. // 初始化语言和显示设定
  60. void InitSetting()
  61. {
  62. // 设置 shopping UI界面里面label和按键的语言显示
  63. string textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "confirm", EnviromentSetting.languageCode });
  64. confirm.text = textValue;
  65. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "cancel", EnviromentSetting.languageCode });
  66. cancel.text = textValue;
  67. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "name", EnviromentSetting.languageCode });
  68. userName.label = textValue;
  69. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "password", EnviromentSetting.languageCode });
  70. password.label = textValue;
  71. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "mobile", EnviromentSetting.languageCode });
  72. mobile.label = textValue;
  73. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "email", EnviromentSetting.languageCode });
  74. email.label = textValue;
  75. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "duplicated_user_name", EnviromentSetting.languageCode });
  76. errorMessageDict.Add("duplicated_user_name", textValue);
  77. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "user_name_is_empty", EnviromentSetting.languageCode });
  78. errorMessageDict.Add("user_name_is_empty", textValue);
  79. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "password_too_short", EnviromentSetting.languageCode });
  80. errorMessageDict.Add("password_too_short", textValue);
  81. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "mobile_is_empty", EnviromentSetting.languageCode });
  82. errorMessageDict.Add("mobile_is_empty", textValue);
  83. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "email_is_empty", EnviromentSetting.languageCode });
  84. errorMessageDict.Add("email_is_empty", textValue);
  85. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "email_format_wrong", EnviromentSetting.languageCode });
  86. errorMessageDict.Add("email_format_wrong", textValue);
  87. textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "duplicated_email", EnviromentSetting.languageCode });
  88. errorMessageDict.Add("duplicated_email", textValue);
  89. if (EnviromentSetting.languageCode == "zh-cn")
  90. {
  91. email.visible = false;
  92. }
  93. else
  94. {
  95. mobile.visible = false;
  96. }
  97. }
  98. // 清空TextField 内容
  99. void ClearTextFieldValue()
  100. {
  101. userName.value = string.Empty;
  102. password.value = string.Empty;
  103. mobile.value = string.Empty;
  104. email.value = string.Empty;
  105. errorMsgLabel.text = string.Empty;
  106. }
  107. #region 格式检测
  108. // POST之前的输入内容检测
  109. private bool ContentCheckBeforePost()
  110. {
  111. if (string.IsNullOrWhiteSpace(userName.value))
  112. {
  113. errorText += errorMessageDict["user_name_is_empty"];
  114. errorText += "<br>";
  115. }
  116. if (password.value.Length < 8)
  117. {
  118. errorText += errorMessageDict["password_too_short"];
  119. errorText += "<br>";
  120. }
  121. if (EnviromentSetting.languageCode == "zh-cn") // 中文检测内容
  122. {
  123. if (string.IsNullOrWhiteSpace(mobile.value))
  124. {
  125. errorText += errorMessageDict["mobile_is_empty"];
  126. errorText += "<br>";
  127. }
  128. }
  129. else // 非中文检测内容
  130. {
  131. if (string.IsNullOrWhiteSpace(email.value))
  132. {
  133. errorText += errorMessageDict["email_is_empty"];
  134. errorText += "<br>";
  135. }
  136. else if (!IsValidEmail(email.value))
  137. {
  138. errorText += errorMessageDict["email_format_wrong"];
  139. errorText += "<br>";
  140. }
  141. }
  142. if (string.IsNullOrWhiteSpace(errorText))
  143. {
  144. return true;
  145. }
  146. else
  147. {
  148. errorMsgLabel.text = errorText;
  149. return false;
  150. }
  151. }
  152. // email 格式检测
  153. private bool IsValidEmail(string email)
  154. {
  155. try
  156. {
  157. var addr = new MailAddress(email);
  158. return addr.Address == email;
  159. }
  160. catch
  161. {
  162. return false;
  163. }
  164. }
  165. #endregion
  166. }