BoxUserProfile.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using AppUI.Manager.Role;
  2. using AppUI.Util.Input;
  3. using JCUnityLib;
  4. using Newtonsoft.Json.Linq;
  5. using System;
  6. using UnityEngine;
  7. using UnityEngine.UI;
  8. namespace AppUI.View.Home.UserCenter
  9. {
  10. public class BoxUserProfile : MonoBehaviour
  11. {
  12. [SerializeField] AppUITMPInputField inputFieldNickname;
  13. [SerializeField] UserInfo userInfo;
  14. [SerializeField] UserInfo userInfoRecord;
  15. [SerializeField] Image selectAvatarImage;
  16. void OnEnable()
  17. {
  18. if (inputFieldNickname != null)
  19. inputFieldNickname.OnEndEdit += OnNicknameEndEdit;
  20. InitInfo();
  21. }
  22. void OnDisable()
  23. {
  24. if (inputFieldNickname != null)
  25. inputFieldNickname.OnEndEdit -= OnNicknameEndEdit;
  26. }
  27. void OnNicknameEndEdit(string _)
  28. {
  29. if (inputFieldNickname == null)
  30. return;
  31. var nickname = inputFieldNickname.TrimmedText;
  32. if (nickname.Length == 0)
  33. return;
  34. LoginMgr.myUserInfo.nickname = nickname;
  35. LoginMgr.myUserInfo.Save();
  36. RenderInfo();
  37. }
  38. void InitInfo()
  39. {
  40. if (inputFieldNickname != null)
  41. inputFieldNickname.SetText(LoginMgr.myUserInfo.nickname);
  42. RenderAvatar();
  43. }
  44. void RenderInfo()
  45. {
  46. // 更新界面显示
  47. userInfo.RenderUserInfo();
  48. userInfoRecord.RenderUserInfo();
  49. GetComponentInParent<UserCenterView>().NotifyUserInfoRefresh();
  50. }
  51. void RenderAvatar()
  52. {
  53. RenderInfo();
  54. // 更新头像显示
  55. RoleManager.SetAvatarToImage(selectAvatarImage, LoginMgr.myUserInfo.avatarID, LoginMgr.myUserInfo.avatarUrl);
  56. }
  57. #region 头像选择
  58. [SerializeField] Transform avatarSelectView;
  59. [SerializeField] GameObject avatarPrefab;
  60. GridLayoutGroup gridLayoutGroup;
  61. GameObject customAvatarObj;
  62. bool avatarSelectViewInited = false;
  63. int curAvatarSelectID = 0;
  64. public void ShowAvatarSelectView()
  65. {
  66. AudioMgr.ins.PlayBtn();
  67. avatarSelectView.gameObject.SetActive(true);
  68. if (!avatarSelectViewInited)
  69. {
  70. avatarSelectViewInited = true;
  71. curAvatarSelectID = LoginMgr.myUserInfo.avatarID;//服务器带的信息是 -1是微信头像,-2是自定义。
  72. avatarSelectView.Find("FrameBox/BtnClose").GetComponent<Button>().onClick.AddListener(CloseAvatarSelectView);
  73. if (!gridLayoutGroup)
  74. gridLayoutGroup = avatarSelectView.GetComponentInChildren<GridLayoutGroup>();
  75. //打开相册
  76. gridLayoutGroup.transform.Find("AddBtn").GetComponent<Button>().onClick.AddListener(OpenGallery);
  77. //GameObject avatarPrefab = gridLayoutGroup.transform.Find("Avatar").gameObject;
  78. // -1 是自定义头像
  79. for (int id = -1; id < RoleManager.GetAvatarListLen() ; id++)
  80. {
  81. // 对战的头像?
  82. if (RoleManager.IsRoleAvatar(id)) continue;
  83. // 如果是第三方并且是空的(这里的id = -1 是指不是固定头像)?
  84. if (id == -1 && string.IsNullOrWhiteSpace(LoginMgr.myUserInfo.avatarUrl)) continue;
  85. GameObject avatar = Instantiate(avatarPrefab, gridLayoutGroup.transform);
  86. Image avatarImage = avatar.transform.Find("Mask/Sprite").GetComponent<Image>();
  87. //自定义用当前id命名
  88. int aid = id; //记录该值
  89. avatar.name = id.ToString();
  90. // 看看是不是自定义的url
  91. if (id == -1)
  92. {
  93. aid = RoleManager.IsCosResource(LoginMgr.myUserInfo.avatarUrl) ? -2 : -1;
  94. avatar.name = aid.ToString();
  95. customAvatarObj = avatar;
  96. }
  97. RoleManager.SetAvatarToImage(avatarImage, aid, LoginMgr.myUserInfo.avatarUrl);
  98. avatar.transform.Find("Check").gameObject.SetActive(aid == curAvatarSelectID);
  99. avatar.GetComponent<Button>().onClick.AddListener(() => {
  100. AudioMgr.ins.PlayBtn();
  101. updateCheck(aid);
  102. });
  103. }
  104. LayoutRebuilder.ForceRebuildLayoutImmediate(gridLayoutGroup.transform.parent.GetComponent<RectTransform>());
  105. }
  106. }
  107. void CloseAvatarSelectView()
  108. {
  109. AudioMgr.ins.PlayBtn();
  110. avatarSelectView.gameObject.SetActive(false);
  111. if (curAvatarSelectID != LoginMgr.myUserInfo.avatarID)
  112. {
  113. LoginMgr.myUserInfo.avatarID = curAvatarSelectID;
  114. //render
  115. RenderAvatar();
  116. //save data
  117. LoginMgr.myUserInfo.Save();
  118. }
  119. }
  120. /// <summary>
  121. /// 刷新列表选择的check,和当前的选择id
  122. /// </summary>
  123. /// <param name="aid"></param>
  124. void updateCheck(int aid)
  125. {
  126. curAvatarSelectID = aid;
  127. if (!gridLayoutGroup)
  128. gridLayoutGroup = avatarSelectView.GetComponentInChildren<GridLayoutGroup>();
  129. for (int i = 0; i < gridLayoutGroup.transform.childCount; i++)
  130. {
  131. Transform item = gridLayoutGroup.transform.GetChild(i);
  132. if (item.gameObject.name == "AddBtn") continue;
  133. int theAvatarID = int.Parse(item.gameObject.name);
  134. item.Find("Check").gameObject.SetActive(theAvatarID == curAvatarSelectID);
  135. }
  136. }
  137. /// <summary>
  138. /// 添加新的自定义头像
  139. /// </summary>
  140. public void OpenGallery()
  141. {
  142. // 打开相册选择图片
  143. NativeGallery.GetImageFromGallery((path) =>
  144. {
  145. HandleImagePicked(path);
  146. }, "Select Avatar", "image/*");
  147. }
  148. private void HandleImagePicked(string path)
  149. {
  150. if (string.IsNullOrEmpty(path))
  151. return;
  152. Texture2D texture = NativeGallery.LoadImageAtPath(path, 100, false);
  153. if (texture == null)
  154. {
  155. Debug.LogError("加载图片失败: " + path);
  156. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("avatar_path_error"));
  157. return;
  158. }
  159. // 上传
  160. CoroutineStarter.Start(LoginController.Instance.UploadAvatar(texture, (res) =>
  161. {
  162. if (res.code == 0)
  163. {
  164. JObject obj = res.data as JObject;
  165. int avatarID = obj.Value<int>("avatarID");
  166. string avatarUrl = obj.Value<string>("avatarUrl");
  167. LoginMgr.myUserInfo.avatarID = avatarID;
  168. LoginMgr.myUserInfo.avatarUrl = avatarUrl;
  169. // 更新头像列表
  170. if (!customAvatarObj)
  171. {
  172. customAvatarObj = Instantiate(avatarPrefab, gridLayoutGroup.transform);
  173. customAvatarObj.name = avatarID.ToString();
  174. customAvatarObj.transform.SetSiblingIndex(1);
  175. }
  176. Image avatarImage = customAvatarObj.transform.Find("Mask/Sprite").GetComponent<Image>();
  177. RoleManager.SetAvatarToImage(avatarImage, avatarID, avatarUrl);
  178. updateCheck(avatarID);
  179. RenderAvatar();
  180. //PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("common_update_successful"));
  181. }
  182. else
  183. {
  184. Debug.LogError("上传头像失败:" + res.msg);
  185. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByKey("common_update_failed"));
  186. }
  187. }));
  188. }
  189. #endregion
  190. }
  191. }