PKMatchView.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. using Newtonsoft.Json.Linq;
  7. using AppUI.Manager.View;
  8. /* 界面-PK匹配 */
  9. public class PKMatchView : JCUnityLib.ViewBase, MenuBackInterface
  10. {
  11. [SerializeField] Sprite[] matchHeadBGList;
  12. [SerializeField] GameObject randomObj;
  13. [SerializeField] GameObject friendObj;
  14. [SerializeField] GameObject boxRightObj;
  15. [SerializeField] GameObject btnMatchObj;
  16. [SerializeField] Sprite[] btnMatchTextures;
  17. void Awake()
  18. {
  19. InitBtnTabs();
  20. Init();
  21. InitFriendSelectView();
  22. }
  23. void Start()
  24. {
  25. PersistenHandler.ins?.menuBackCtr.views.Add(this);
  26. TopBarView.NeedShowIt(this);
  27. string nickname = LoginMgr.myUserInfo.nickname;
  28. RenderPlayerInfo(1, LoginMgr.myUserInfo.avatarID, LoginMgr.myUserInfo.avatarUrl, nickname, true);
  29. SetBtnTabSelected(btnTabs[0]);
  30. }
  31. void OnDestroy()
  32. {
  33. PersistenHandler.ins?.menuBackCtr.views.Remove(this);
  34. TopBarView.DontNeedShowIt(this);
  35. }
  36. public bool OnMenuBack()
  37. {
  38. ViewMgr.Instance.DestroyView<PKMatchView>();
  39. return true;
  40. }
  41. #region 左栏条目切换
  42. Button[] btnTabs = { null, null };
  43. void InitBtnTabs()
  44. {
  45. btnTabs[0] = randomObj.GetComponent<Button>();
  46. btnTabs[1] = friendObj.GetComponent<Button>();
  47. for (int i = 0; i < btnTabs.Length; i++)
  48. {
  49. Button btnTab = btnTabs[i];
  50. int btnTabIndex = i;
  51. btnTab.onClick.AddListener(() =>
  52. {
  53. AudioMgr.ins.PlayBtn();
  54. GameObject obj = btnTab.transform.Find("LightMask").gameObject;
  55. if (!obj.activeSelf)
  56. {
  57. SetBtnTabSelected(btnTab);
  58. }
  59. });
  60. }
  61. }
  62. void SetBtnTabSelected(Button btn)
  63. {
  64. foreach (var item in btnTabs)
  65. {
  66. GameObject obj = item.transform.Find("LightMask").gameObject;
  67. obj.SetActive(item == btn);
  68. }
  69. int index = Array.IndexOf(btnTabs, btn);
  70. HandleBtnTabSelectedLogic(index);
  71. }
  72. int curBtnTabIndex = 0;
  73. void HandleBtnTabSelectedLogic(int btnIndex)
  74. {
  75. curBtnTabIndex = btnIndex;
  76. RefreshMatchHeadBG();
  77. RefreshBtnMatch();
  78. RefreshOtherPlayerInfoRender();
  79. }
  80. #endregion
  81. void Init()
  82. {
  83. btnMatchObj.GetComponent<Button>().onClick.AddListener(() =>
  84. {
  85. AudioMgr.ins.PlayBtn();
  86. GlobalData.pkMatchType = GlobalDataTemp.pkMatchType;
  87. GlobalData.matchGameType = GlobalDataTemp.matchGameType;
  88. PKMatchingView pkMatchingView = PKMatchingView.Create();
  89. if (curBtnTabIndex == 1)
  90. {
  91. pkMatchingView.targetInvitePlayerID = selectedFriendInfo.playerID;
  92. pkMatchingView.isFriendPKInviter = true;
  93. pkMatchingView.eventOnRejectPKInvite += delegate ()
  94. {
  95. Destroy(pkMatchingView.gameObject);
  96. };
  97. }
  98. });
  99. boxRightObj.transform.Find("Player2/MatchHeadBG").GetComponent<Button>().onClick.AddListener(() =>
  100. {
  101. AudioMgr.ins.PlayBtn();
  102. EnterFriendSelectView();
  103. });
  104. }
  105. void RefreshMatchHeadBG()
  106. {
  107. Image img = boxRightObj.transform.Find("Player2/MatchHeadBG").GetComponent<Image>();
  108. img.sprite = matchHeadBGList[curBtnTabIndex];
  109. img.GetComponent<Button>().enabled = curBtnTabIndex == 1;
  110. }
  111. void RefreshBtnMatch()
  112. {
  113. Button btn = btnMatchObj.GetComponent<Button>();
  114. if (curBtnTabIndex == 0)
  115. {
  116. btn.interactable = true;
  117. }
  118. else if (curBtnTabIndex == 1)
  119. {
  120. btn.interactable = selectedFriendInfo == null ? false : true;
  121. }
  122. }
  123. void RefreshOtherPlayerInfoRender()
  124. {
  125. if (curBtnTabIndex == 0)
  126. {
  127. RenderPlayerInfo(2, RoleMgr.NullAvatarID, "", "", false);
  128. }
  129. else if (curBtnTabIndex == 1)
  130. {
  131. if (selectedFriendInfo != null)
  132. {
  133. RenderPlayerInfo(2, selectedFriendInfo.avatarID, selectedFriendInfo.avatarUrl, selectedFriendInfo.nickname, true);
  134. }
  135. else
  136. {
  137. RenderPlayerInfo(2, RoleMgr.NullAvatarID, "", "", false);
  138. }
  139. }
  140. }
  141. void RenderPlayerInfo(int playerID, int avatarID, string avatarUrl, string nickname, bool active)
  142. {
  143. Text _textTemp = boxRightObj.transform.Find($"Player{playerID}/NameBox").GetComponentInChildren<Text>();
  144. string inputText = active ? nickname : TextAutoLanguage2.GetTextByKey("pk-match_wait-to-join");
  145. TextEllipsis.SetTextWithEllipsis(_textTemp, inputText);
  146. Transform avatarT = boxRightObj.transform.Find($"Player{playerID}/MatchHeadBG/Avatar");
  147. avatarT.gameObject.SetActive(active);
  148. RoleMgr.SetAvatarToImage(
  149. avatarT.Find("Sprite").GetComponent<Image>(),
  150. avatarID, avatarUrl
  151. );
  152. }
  153. public void Back()
  154. {
  155. AudioMgr.ins.PlayBtn();
  156. //ViewMgr.Instance.DestroyView<PKMatchView>();
  157. ViewManager.HideView(UIViewType.PKMatchView);
  158. }
  159. #region PK好友选择
  160. GameObject friendSelectView;
  161. void InitFriendSelectView()
  162. {
  163. friendSelectView = transform.Find("FriendSelectView").gameObject;
  164. friendSelectView.SetActive(false);
  165. GetFriendSelectItemPrefab().SetActive(false);
  166. }
  167. Transform GetFriendSelectItemParent()
  168. {
  169. return friendSelectView.transform.Find("FrameBox/ScrollView/Viewport/Content");
  170. }
  171. GameObject GetFriendSelectItemPrefab()
  172. {
  173. return GetFriendSelectItemParent().Find("Item").gameObject;
  174. }
  175. MatchPlayerInfo selectedFriendInfo = null;
  176. void EnterFriendSelectView()
  177. {
  178. friendSelectView.SetActive(true);
  179. for (int i = 1; i < GetFriendSelectItemParent().childCount; i++)
  180. {
  181. Destroy(GetFriendSelectItemParent().GetChild(i).gameObject);
  182. }
  183. Action<JArray> cb = delegate (JArray list)
  184. {
  185. if (list.Count > 0)
  186. {
  187. foreach (var itemInfo in list)
  188. {
  189. int friendID = itemInfo.Value<int>("friendID");
  190. int avatarID = itemInfo.Value<int>("avatarID");
  191. string avatarUrl = itemInfo.Value<string>("avatarUrl");
  192. string nickname = itemInfo.Value<string>("nickname");
  193. bool online = itemInfo.Value<bool>("online");
  194. long offlineTime = itemInfo.Value<long>("offlineTime");
  195. GameObject o = GameObject.Instantiate(GetFriendSelectItemPrefab(), GetFriendSelectItemParent());
  196. o.SetActive(true);
  197. o.name = friendID.ToString();
  198. RoleMgr.SetAvatarToImage(
  199. o.transform.Find("Avatar/Sprite").GetComponent<Image>(),
  200. avatarID, avatarUrl
  201. );
  202. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  203. o.transform.Find("Point").GetComponent<Image>().color = online ? Color.green : Color.red;
  204. Text onlineTip = o.transform.Find("OnlineTip").GetComponent<Text>();
  205. onlineTip.text = TimeUtil.GetOfflineTimeStr(offlineTime, online);
  206. onlineTip.color = online ? Color.green : Color.gray;
  207. Button btnPK = o.transform.Find("BtnPK").GetComponent<Button>();
  208. btnPK.onClick.RemoveAllListeners();
  209. btnPK.onClick.AddListener(delegate ()
  210. {
  211. btnEvent_CloseFriendSelectView();
  212. selectedFriendInfo = new MatchPlayerInfo(friendID, avatarID, avatarUrl, nickname);
  213. RefreshBtnMatch();
  214. RefreshOtherPlayerInfoRender();
  215. });
  216. btnPK.GetComponent<Image>().sprite = friendID == selectedFriendInfo.playerID? btnMatchTextures[0]: btnMatchTextures[1];
  217. }
  218. }
  219. };
  220. UserPlayer.ins.call("friendComp.getMyFriends", null, cb);
  221. }
  222. public void btnEvent_CloseFriendSelectView()
  223. {
  224. AudioMgr.ins.PlayBtn();
  225. friendSelectView.SetActive(false);
  226. }
  227. #endregion
  228. }