PKMatchView.cs 8.3 KB

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