BoxUserSettings.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using JCUnityLib;
  6. using UnityEngine.EventSystems;
  7. using UnityEngine.Events;
  8. public class BoxUserSettings : MonoBehaviour
  9. {
  10. [SerializeField] GameObject inputs;
  11. [SerializeField] Sprite bgOn;
  12. [SerializeField] Sprite bgOff;
  13. [SerializeField] Image[] bgArray;
  14. InputField inputFieldNickname;//输入框组件
  15. bool isFocused = false;
  16. void OnEnable()
  17. {
  18. RenderInfo();
  19. RenderAvatar();
  20. }
  21. void Start()
  22. {
  23. inputFieldNickname = inputs.transform.Find("Nickname").GetComponentInChildren<InputField>();
  24. inputFieldNickname.onEndEdit.AddListener(s => {
  25. LoginMgr.myUserInfo.nickname = s;
  26. RenderInfo();
  27. LoginMgr.myUserInfo.Save();
  28. });
  29. //var eventTrigger = inputFieldNickname.gameObject.AddComponent<EventTrigger>();
  30. //UnityAction<BaseEventData> selectEvent = OnInputFieldClicked;
  31. //EventTrigger.Entry onClick = new EventTrigger.Entry()
  32. //{
  33. // eventID = EventTriggerType.PointerClick
  34. //};
  35. //onClick.callback.AddListener(selectEvent);
  36. //eventTrigger.triggers.Add(onClick);
  37. }
  38. private void Update()
  39. {
  40. if (isFocused != inputFieldNickname.isFocused)
  41. {
  42. isFocused = inputFieldNickname.isFocused;
  43. if (isFocused) setStateBg(1);
  44. //else bgArray[1].sprite = bgOff;
  45. }
  46. }
  47. private void OnInputFieldClicked(BaseEventData data)
  48. {
  49. //TODO: 点击事件
  50. setStateBg(1);
  51. }
  52. void RenderInfo()
  53. {
  54. inputs.transform.Find("Nickname").GetComponentInChildren<InputField>().text
  55. = LoginMgr.myUserInfo.nickname;
  56. inputs.transform.Find("Mobile").GetComponentInChildren<InputField>().text
  57. = LoginMgr.myUserInfo.phone;
  58. inputs.transform.Find("Email").GetComponentInChildren<InputField>().text
  59. = LoginMgr.myUserInfo.email;
  60. inputs.transform.Find("Birthday").GetComponentInChildren<InputField>().text
  61. = LoginMgr.myUserInfo.birthday;
  62. //如果是中国,直接翻译中国两个字
  63. //inputs.transform.Find("ItemBox/Region").GetComponentInChildren<InputField>().text
  64. // = TextAutoLanguage2.GetLanguage() == LanguageEnum.English && LoginMgr.myUserInfo.country == "中国" ? "China" : LoginMgr.myUserInfo.country;
  65. inputs.transform.Find("ItemBox/Region").GetComponentInChildren<InputField>().text = LoginMgr.myUserInfo.country;
  66. inputs.transform.Find("ItemBox/Gender/Text0").gameObject.SetActive(LoginMgr.myUserInfo.gender != 2);
  67. inputs.transform.Find("ItemBox/Gender/Text1").gameObject.SetActive(LoginMgr.myUserInfo.gender == 2);
  68. inputs.transform.Find("FixBox/Nickname").GetComponent<Text>().text = LoginMgr.myUserInfo.nickname;
  69. inputs.transform.Find("FixBox/ID").GetComponent<Text>().text = "ID: " + LoginMgr.myUserInfo.id;
  70. GetComponentInParent<PersonalView>().NotifyUserInfoRefresh();
  71. }
  72. void RenderAvatar()
  73. {
  74. Image avatarImage = inputs.transform.Find("FixBox/Avatar/Mask/Sprite").GetComponent<Image>();
  75. RoleMgr.SetAvatarToImage(avatarImage, LoginMgr.myUserInfo.avatarID, LoginMgr.myUserInfo.avatarUrl);
  76. GetComponentInParent<PersonalView>().NotifyUserInfoRefresh();
  77. }
  78. public void setStateBg(int index) {
  79. for (int i = 0; i < bgArray.Length; i++)
  80. {
  81. if (i == index)
  82. {
  83. bgArray[i].sprite = bgOn;
  84. }
  85. else {
  86. bgArray[i].sprite = bgOff;
  87. }
  88. }
  89. }
  90. public void OnClick_BindPhone()
  91. {
  92. setStateBg(0);
  93. AudioMgr.ins.PlayBtn();
  94. RelateValidateView relateValidateView =
  95. Instantiate(SceneResourceManager.Instance.GetPrefab("RelateValidateView"))
  96. .GetComponent<RelateValidateView>();
  97. CanvasUtils.PlusSortOrder(gameObject.GetComponentInParent<Canvas>().gameObject, relateValidateView.gameObject, 1);
  98. relateValidateView.InitForPhone2();
  99. relateValidateView.onValidateSuccess = (a, b, c) => {
  100. relateValidateView?.BanButtons();
  101. StartCoroutine(UserController.Instance.SavePhone(a, b, c, (res) => {
  102. if (res.code == 0)
  103. {
  104. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("RelateValidateView-pass1"));
  105. LoginMgr.myUserInfo.phone = a;
  106. RenderInfo();
  107. relateValidateView?.CloseView();
  108. }
  109. }));
  110. };
  111. }
  112. public void OnClick_BindEmail()
  113. {
  114. setStateBg(2);
  115. AudioMgr.ins.PlayBtn();
  116. RelateValidateView relateValidateView =
  117. Instantiate(SceneResourceManager.Instance.GetPrefab("RelateValidateView"))
  118. .GetComponent<RelateValidateView>();
  119. CanvasUtils.PlusSortOrder(gameObject.GetComponentInParent<Canvas>().gameObject, relateValidateView.gameObject, 1);
  120. relateValidateView.InitForEmail2();
  121. relateValidateView.onValidateSuccess = (a, b, c) => {
  122. relateValidateView?.BanButtons();
  123. StartCoroutine(UserController.Instance.SaveEmail(a, b, c, (res) => {
  124. if (res.code == 0)
  125. {
  126. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("RelateValidateView-pass1"));
  127. LoginMgr.myUserInfo.email = a;
  128. RenderInfo();
  129. relateValidateView?.CloseView();
  130. }
  131. }));
  132. };
  133. }
  134. #region 性别选择
  135. public void OnClick_ChangeGender()
  136. {
  137. setStateBg(4);
  138. AudioMgr.ins.PlayBtn();
  139. if (LoginMgr.myUserInfo.gender == 2) LoginMgr.myUserInfo.gender = 1;
  140. else LoginMgr.myUserInfo.gender = 2;
  141. RenderInfo();
  142. LoginMgr.myUserInfo.Save();
  143. }
  144. #endregion
  145. #region 地区选择
  146. private string countryCode = "", stateCode = "", cityCode = "";
  147. public void OpenLocationPicker()
  148. {
  149. setStateBg(3);
  150. AudioMgr.ins.PlayBtn();
  151. System.Action eOnAgree = () => {
  152. GPSTool.GetAddress((address) => {
  153. if (address != null)
  154. {
  155. countryCode = address[0];
  156. stateCode = address[1];
  157. cityCode = address[2];
  158. LoginMgr.myUserInfo.country = countryCode;
  159. LoginMgr.myUserInfo.state = stateCode;
  160. LoginMgr.myUserInfo.city = cityCode;
  161. RenderInfo();
  162. LoginMgr.myUserInfo.Save();
  163. }
  164. });
  165. };
  166. if (!HomeView.ShowProminentBeforeConnectBLE(eOnAgree)) eOnAgree.Invoke();
  167. }
  168. #endregion
  169. #region 日期选择
  170. [SerializeField] GameObject datePickerPrefab;
  171. public void OpenDatePicker()
  172. {
  173. setStateBg(5);
  174. AudioMgr.ins.PlayBtn();
  175. GameObject o = Instantiate(datePickerPrefab);
  176. //o.GetComponentInChildren<JC.Unity.Picker.DatePickerGroup>().onEnter += (JC.Unity.Picker.DatePickerGroup picker) =>
  177. //{
  178. // LoginMgr.myUserInfo.birthday = picker.GetSelectDateStr();
  179. // RenderInfo();
  180. // LoginMgr.myUserInfo.Save();
  181. //};
  182. o.GetComponentInChildren<DatePickerGroupNew>().onEnter += (DatePickerGroupNew picker) =>
  183. {
  184. LoginMgr.myUserInfo.birthday = picker.GetSelectDateStr();
  185. RenderInfo();
  186. LoginMgr.myUserInfo.Save();
  187. };
  188. }
  189. #endregion
  190. #region 头像选择
  191. [SerializeField] Transform avatarSelectView;
  192. bool avatarSelectViewInited = false;
  193. int curAvatarSelectID = 0;
  194. public void ShowAvatarSelectView()
  195. {
  196. AudioMgr.ins.PlayBtn();
  197. avatarSelectView.gameObject.SetActive(true);
  198. if (avatarSelectViewInited)
  199. {
  200. }
  201. else
  202. {
  203. avatarSelectViewInited = true;
  204. curAvatarSelectID = LoginMgr.myUserInfo.avatarID;
  205. avatarSelectView.Find("FrameBox/BtnClose").GetComponent<Button>().onClick.AddListener(CloseAvatarSelectView);
  206. GridLayoutGroup gridLayoutGroup = avatarSelectView.GetComponentInChildren<GridLayoutGroup>();
  207. GameObject avatarPrefab = gridLayoutGroup.transform.Find("Avatar").gameObject;
  208. for (int id = -1; id < RoleMgr.GetAvatarListLen(); id++)
  209. {
  210. if (RoleMgr.IsRoleAvatar(id)) continue;
  211. if (id == -1 && string.IsNullOrWhiteSpace(LoginMgr.myUserInfo.avatarUrl)) continue;
  212. GameObject avatar = Instantiate(avatarPrefab, gridLayoutGroup.transform);
  213. Image avatarImage = avatar.transform.Find("Mask/Sprite").GetComponent<Image>();
  214. RoleMgr.SetAvatarToImage(avatarImage, id, LoginMgr.myUserInfo.avatarUrl);
  215. avatar.transform.Find("Check").gameObject.SetActive(id == curAvatarSelectID);
  216. avatar.gameObject.name = id.ToString();
  217. int aid = id; //记录该值
  218. avatar.GetComponent<Button>().onClick.AddListener(() => {
  219. AudioMgr.ins.PlayBtn();
  220. curAvatarSelectID = aid;
  221. for (int i = 0; i < gridLayoutGroup.transform.childCount; i++)
  222. {
  223. Transform item = gridLayoutGroup.transform.GetChild(i);
  224. int theAvatarID = int.Parse(item.gameObject.name);
  225. item.Find("Check").gameObject.SetActive(theAvatarID == curAvatarSelectID);
  226. }
  227. });
  228. }
  229. Destroy(avatarPrefab);
  230. LayoutRebuilder.ForceRebuildLayoutImmediate(gridLayoutGroup.transform.parent.GetComponent<RectTransform>());
  231. }
  232. }
  233. void CloseAvatarSelectView()
  234. {
  235. AudioMgr.ins.PlayBtn();
  236. avatarSelectView.gameObject.SetActive(false);
  237. if (curAvatarSelectID != LoginMgr.myUserInfo.avatarID)
  238. {
  239. LoginMgr.myUserInfo.avatarID = curAvatarSelectID;
  240. //render
  241. RenderAvatar();
  242. //save data
  243. LoginMgr.myUserInfo.Save();
  244. }
  245. }
  246. #endregion
  247. #region 删除按钮背景
  248. public void setDeleteBtnBg()
  249. {
  250. setStateBg(6);
  251. }
  252. #endregion
  253. }