BoxUserSettings.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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. inputs.transform.Find("ItemBox/Region").GetComponentInChildren<InputField>().text
  63. = LoginMgr.myUserInfo.country;
  64. inputs.transform.Find("ItemBox/Gender/Text0").gameObject.SetActive(LoginMgr.myUserInfo.gender != 2);
  65. inputs.transform.Find("ItemBox/Gender/Text1").gameObject.SetActive(LoginMgr.myUserInfo.gender == 2);
  66. inputs.transform.Find("FixBox/Nickname").GetComponent<Text>().text = LoginMgr.myUserInfo.nickname;
  67. inputs.transform.Find("FixBox/ID").GetComponent<Text>().text = "ID: " + LoginMgr.myUserInfo.id;
  68. GetComponentInParent<PersonalView>().NotifyUserInfoRefresh();
  69. }
  70. void RenderAvatar()
  71. {
  72. Image avatarImage = inputs.transform.Find("FixBox/Avatar/Mask/Sprite").GetComponent<Image>();
  73. RoleMgr.SetAvatarToImage(avatarImage, LoginMgr.myUserInfo.avatarID, LoginMgr.myUserInfo.avatarUrl);
  74. GetComponentInParent<PersonalView>().NotifyUserInfoRefresh();
  75. }
  76. public void setStateBg(int index) {
  77. for (int i = 0; i < bgArray.Length; i++)
  78. {
  79. if (i == index)
  80. {
  81. bgArray[i].sprite = bgOn;
  82. }
  83. else {
  84. bgArray[i].sprite = bgOff;
  85. }
  86. }
  87. }
  88. public void OnClick_BindPhone()
  89. {
  90. setStateBg(0);
  91. AudioMgr.ins.PlayBtn();
  92. RelateValidateView relateValidateView =
  93. Instantiate(SceneResourceManager.Instance.GetPrefab("RelateValidateView"))
  94. .GetComponent<RelateValidateView>();
  95. CanvasUtils.PlusSortOrder(gameObject.GetComponentInParent<Canvas>().gameObject, relateValidateView.gameObject, 1);
  96. relateValidateView.InitForPhone2();
  97. relateValidateView.onValidateSuccess = (a, b, c) => {
  98. relateValidateView?.BanButtons();
  99. StartCoroutine(UserController.Instance.SavePhone(a, b, c, (res) => {
  100. if (res.code == 0)
  101. {
  102. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("RelateValidateView-pass1"));
  103. LoginMgr.myUserInfo.phone = a;
  104. RenderInfo();
  105. relateValidateView?.CloseView();
  106. }
  107. }));
  108. };
  109. }
  110. public void OnClick_BindEmail()
  111. {
  112. setStateBg(2);
  113. AudioMgr.ins.PlayBtn();
  114. RelateValidateView relateValidateView =
  115. Instantiate(SceneResourceManager.Instance.GetPrefab("RelateValidateView"))
  116. .GetComponent<RelateValidateView>();
  117. CanvasUtils.PlusSortOrder(gameObject.GetComponentInParent<Canvas>().gameObject, relateValidateView.gameObject, 1);
  118. relateValidateView.InitForEmail2();
  119. relateValidateView.onValidateSuccess = (a, b, c) => {
  120. relateValidateView?.BanButtons();
  121. StartCoroutine(UserController.Instance.SaveEmail(a, b, c, (res) => {
  122. if (res.code == 0)
  123. {
  124. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("RelateValidateView-pass1"));
  125. LoginMgr.myUserInfo.email = a;
  126. RenderInfo();
  127. relateValidateView?.CloseView();
  128. }
  129. }));
  130. };
  131. }
  132. #region 性别选择
  133. public void OnClick_ChangeGender()
  134. {
  135. setStateBg(4);
  136. AudioMgr.ins.PlayBtn();
  137. if (LoginMgr.myUserInfo.gender == 2) LoginMgr.myUserInfo.gender = 1;
  138. else LoginMgr.myUserInfo.gender = 2;
  139. RenderInfo();
  140. LoginMgr.myUserInfo.Save();
  141. }
  142. #endregion
  143. #region 地区选择
  144. private string countryCode = "", stateCode = "", cityCode = "";
  145. public void OpenLocationPicker()
  146. {
  147. setStateBg(3);
  148. AudioMgr.ins.PlayBtn();
  149. System.Action eOnAgree = () => {
  150. GPSTool.GetAddress((address) => {
  151. if (address != null)
  152. {
  153. countryCode = address[0];
  154. stateCode = address[1];
  155. cityCode = address[2];
  156. LoginMgr.myUserInfo.country = countryCode;
  157. LoginMgr.myUserInfo.state = stateCode;
  158. LoginMgr.myUserInfo.city = cityCode;
  159. RenderInfo();
  160. LoginMgr.myUserInfo.Save();
  161. }
  162. });
  163. };
  164. if (!HomeView.ShowProminentBeforeConnectBLE(eOnAgree)) eOnAgree.Invoke();
  165. }
  166. #endregion
  167. #region 日期选择
  168. [SerializeField] GameObject datePickerPrefab;
  169. public void OpenDatePicker()
  170. {
  171. setStateBg(5);
  172. AudioMgr.ins.PlayBtn();
  173. GameObject o = Instantiate(datePickerPrefab);
  174. //o.GetComponentInChildren<JC.Unity.Picker.DatePickerGroup>().onEnter += (JC.Unity.Picker.DatePickerGroup picker) =>
  175. //{
  176. // LoginMgr.myUserInfo.birthday = picker.GetSelectDateStr();
  177. // RenderInfo();
  178. // LoginMgr.myUserInfo.Save();
  179. //};
  180. o.GetComponentInChildren<DatePickerGroupNew>().onEnter += (DatePickerGroupNew picker) =>
  181. {
  182. LoginMgr.myUserInfo.birthday = picker.GetSelectDateStr();
  183. RenderInfo();
  184. LoginMgr.myUserInfo.Save();
  185. };
  186. }
  187. #endregion
  188. #region 头像选择
  189. [SerializeField] Transform avatarSelectView;
  190. bool avatarSelectViewInited = false;
  191. int curAvatarSelectID = 0;
  192. public void ShowAvatarSelectView()
  193. {
  194. AudioMgr.ins.PlayBtn();
  195. avatarSelectView.gameObject.SetActive(true);
  196. if (avatarSelectViewInited)
  197. {
  198. }
  199. else
  200. {
  201. avatarSelectViewInited = true;
  202. curAvatarSelectID = LoginMgr.myUserInfo.avatarID;
  203. avatarSelectView.Find("FrameBox/BtnClose").GetComponent<Button>().onClick.AddListener(CloseAvatarSelectView);
  204. GridLayoutGroup gridLayoutGroup = avatarSelectView.GetComponentInChildren<GridLayoutGroup>();
  205. GameObject avatarPrefab = gridLayoutGroup.transform.Find("Avatar").gameObject;
  206. for (int id = -1; id < RoleMgr.GetAvatarListLen(); id++)
  207. {
  208. if (RoleMgr.IsRoleAvatar(id)) continue;
  209. if (id == -1 && string.IsNullOrWhiteSpace(LoginMgr.myUserInfo.avatarUrl)) continue;
  210. GameObject avatar = Instantiate(avatarPrefab, gridLayoutGroup.transform);
  211. Image avatarImage = avatar.transform.Find("Mask/Sprite").GetComponent<Image>();
  212. RoleMgr.SetAvatarToImage(avatarImage, id, LoginMgr.myUserInfo.avatarUrl);
  213. avatar.transform.Find("Check").gameObject.SetActive(id == curAvatarSelectID);
  214. avatar.gameObject.name = id.ToString();
  215. int aid = id; //记录该值
  216. avatar.GetComponent<Button>().onClick.AddListener(() => {
  217. AudioMgr.ins.PlayBtn();
  218. curAvatarSelectID = aid;
  219. for (int i = 0; i < gridLayoutGroup.transform.childCount; i++)
  220. {
  221. Transform item = gridLayoutGroup.transform.GetChild(i);
  222. int theAvatarID = int.Parse(item.gameObject.name);
  223. item.Find("Check").gameObject.SetActive(theAvatarID == curAvatarSelectID);
  224. }
  225. });
  226. }
  227. Destroy(avatarPrefab);
  228. LayoutRebuilder.ForceRebuildLayoutImmediate(gridLayoutGroup.transform.parent.GetComponent<RectTransform>());
  229. }
  230. }
  231. void CloseAvatarSelectView()
  232. {
  233. AudioMgr.ins.PlayBtn();
  234. avatarSelectView.gameObject.SetActive(false);
  235. if (curAvatarSelectID != LoginMgr.myUserInfo.avatarID)
  236. {
  237. LoginMgr.myUserInfo.avatarID = curAvatarSelectID;
  238. //render
  239. RenderAvatar();
  240. //save data
  241. LoginMgr.myUserInfo.Save();
  242. }
  243. }
  244. #endregion
  245. #region 删除按钮背景
  246. public void setDeleteBtnBg()
  247. {
  248. setStateBg(6);
  249. }
  250. #endregion
  251. }