FriendView.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Linq;
  8. public class FriendView : MonoBehaviour
  9. {
  10. [SerializeField] GameObject myFriendBox;
  11. [SerializeField] GameObject friendRequestBox;
  12. [SerializeField] GameObject searchPlayerBox;
  13. void Awake()
  14. {
  15. InitBtnTabs();
  16. InitMyFriendBox();
  17. InitFriendRequestBox();
  18. InitSearchPlayerBox();
  19. }
  20. void Start()
  21. {
  22. SetBtnTabSelected(btnTabs[0]);
  23. }
  24. #region myFriend
  25. void InitMyFriendBox() {
  26. myFriendBox.SetActive(false);
  27. GetMyFriendItemPrefab().SetActive(false);
  28. }
  29. Transform GetMyFriendItemParent() {
  30. return myFriendBox.transform.Find("ScrollView/Viewport/Content");
  31. }
  32. GameObject GetMyFriendItemPrefab() {
  33. return GetMyFriendItemParent().Find("Item").gameObject;
  34. }
  35. void EnterMyFriendBox() {
  36. myFriendBox.SetActive(true);
  37. Action<JArray> cb = delegate(JArray list) {
  38. if (list.Count > 0) {
  39. foreach (var itemInfo in list) {
  40. int friendID = itemInfo.Value<int>("friendID");
  41. int avatarID = itemInfo.Value<int>("avatarID");
  42. string nickname = itemInfo.Value<string>("nickname");
  43. bool online = itemInfo.Value<bool>("online");
  44. for (int i = 1; i < GetMyFriendItemParent().childCount; i++) {
  45. Destroy(GetMyFriendItemParent().GetChild(i).gameObject);
  46. }
  47. GameObject o = GameObject.Instantiate(GetMyFriendItemPrefab(), GetMyFriendItemParent());
  48. o.SetActive(true);
  49. o.name = friendID.ToString();
  50. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  51. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  52. o.transform.Find("Point").GetComponent<Image>().color = online ? Color.green : Color.red;
  53. Button btnDelete = o.transform.Find("BtnDelete").GetComponent<Button>();
  54. btnDelete.onClick.RemoveAllListeners();
  55. btnDelete.onClick.AddListener(delegate() {
  56. AudioMgr.ins.PlayBtn();
  57. Action<bool> cb = delegate(bool res) {
  58. if (res) {
  59. Destroy(o);
  60. }
  61. };
  62. UserPlayer.ins.call("friendComp.deleteMyFriend", new object[]{friendID}, cb);
  63. });
  64. }
  65. } else {
  66. PopupMgr.ins.ShowTip("好友列表为空");
  67. }
  68. };
  69. UserPlayer.ins.call("friendComp.getMyFriends", null, cb);
  70. }
  71. #endregion
  72. #region friendRequest
  73. void InitFriendRequestBox() {
  74. friendRequestBox.SetActive(false);
  75. GetFriendRequestItemPrefab().SetActive(false);
  76. }
  77. Transform GetFriendRequestItemParent() {
  78. return friendRequestBox.transform.Find("ScrollView/Viewport/Content");
  79. }
  80. GameObject GetFriendRequestItemPrefab() {
  81. return GetFriendRequestItemParent().Find("Item").gameObject;
  82. }
  83. void EnterFriendRequestBox() {
  84. friendRequestBox.SetActive(true);
  85. Action<JArray> cb = delegate(JArray list) {
  86. if (list.Count > 0) {
  87. foreach (var itemInfo in list) {
  88. int otherID = itemInfo.Value<int>("otherID");
  89. int avatarID = itemInfo.Value<int>("avatarID");
  90. string nickname = itemInfo.Value<string>("nickname");
  91. bool online = itemInfo.Value<bool>("online");
  92. for (int i = 1; i < GetFriendRequestItemParent().childCount; i++) {
  93. Destroy(GetFriendRequestItemParent().GetChild(i).gameObject);
  94. }
  95. GameObject o = GameObject.Instantiate(GetFriendRequestItemPrefab(), GetFriendRequestItemParent());
  96. o.SetActive(true);
  97. o.name = otherID.ToString();
  98. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  99. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  100. o.transform.Find("Point").GetComponent<Image>().color = online ? Color.green : Color.red;
  101. Button btnNo = o.transform.Find("BtnNo").GetComponent<Button>();
  102. btnNo.onClick.RemoveAllListeners();
  103. btnNo.onClick.AddListener(delegate() {
  104. AudioMgr.ins.PlayBtn();
  105. UserPlayer.ins.call("friendComp.decideAddFriend", new object[]{false, otherID});
  106. Destroy(o);
  107. });
  108. Button btnYes = o.transform.Find("BtnYes").GetComponent<Button>();
  109. btnYes.onClick.RemoveAllListeners();
  110. btnYes.onClick.AddListener(delegate() {
  111. AudioMgr.ins.PlayBtn();
  112. UserPlayer.ins.call("friendComp.decideAddFriend", new object[]{true, otherID});
  113. Destroy(o);
  114. });
  115. }
  116. } else {
  117. PopupMgr.ins.ShowTip("好友请求列表为空");
  118. }
  119. };
  120. UserPlayer.ins.call("friendComp.getFriendRequestList", null, cb);
  121. }
  122. #endregion
  123. #region searchPlayer
  124. void InitSearchPlayerBox() {
  125. searchPlayerBox.SetActive(false);
  126. GetSearchPlayerItemPrefab().SetActive(false);
  127. }
  128. Transform GetSearchPlayerItemParent() {
  129. return searchPlayerBox.transform.Find("ScrollView/Viewport/Content");
  130. }
  131. GameObject GetSearchPlayerItemPrefab() {
  132. return GetSearchPlayerItemParent().Find("Item").gameObject;
  133. }
  134. void EnterSearchPlayerBox() {
  135. searchPlayerBox.SetActive(true);
  136. }
  137. InputField GetSearchInputField() {
  138. return searchPlayerBox.transform.Find("SearchBox/InputField").GetComponent<InputField>();
  139. }
  140. long _lastSearchTime = 0;
  141. public void btnEvent_SearchPlayer() {
  142. AudioMgr.ins.PlayBtn();
  143. if (JC.CS.Utility.GetTimestamp() - _lastSearchTime < 3000) {
  144. PopupMgr.ins.ShowTip("操作过于频繁");
  145. return;
  146. } else {
  147. _lastSearchTime = JC.CS.Utility.GetTimestamp();
  148. }
  149. string searchText = GetSearchInputField().text;
  150. Action<JArray> cb = delegate(JArray list) {
  151. if (list.Count > 0) {
  152. foreach (var itemInfo in list) {
  153. int userID = itemInfo.Value<int>("id");
  154. int avatarID = itemInfo.Value<int>("avatarID");
  155. string nickname = itemInfo.Value<string>("nickname");
  156. bool online = itemInfo.Value<bool>("online");
  157. for (int i = 1; i < GetSearchPlayerItemParent().childCount; i++) {
  158. Destroy(GetSearchPlayerItemParent().GetChild(i).gameObject);
  159. }
  160. GameObject o = GameObject.Instantiate(GetSearchPlayerItemPrefab(), GetSearchPlayerItemParent());
  161. o.SetActive(true);
  162. o.name = userID.ToString();
  163. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  164. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  165. o.transform.Find("Point").GetComponent<Image>().color = online ? Color.green : Color.red;
  166. Button btnYes = o.transform.Find("BtnAdd").GetComponent<Button>();
  167. btnYes.onClick.RemoveAllListeners();
  168. btnYes.onClick.AddListener(delegate() {
  169. AudioMgr.ins.PlayBtn();
  170. UserPlayer.ins.call("friendComp.requestAddFriend", userID);
  171. btnYes.interactable = false;
  172. });
  173. }
  174. } else {
  175. PopupMgr.ins.ShowTip("没有搜索到目标玩家");
  176. }
  177. };
  178. UserPlayer.ins.call("friendComp.searchPlayers", new object[]{searchText}, cb);
  179. }
  180. #endregion
  181. void HideAllBox() {
  182. myFriendBox.SetActive(false);
  183. friendRequestBox.SetActive(false);
  184. searchPlayerBox.SetActive(false);
  185. }
  186. public void Back() {
  187. AudioMgr.ins.PlayBtn();
  188. Destroy(this.gameObject);
  189. }
  190. #region 左栏条目切换
  191. [SerializeField] Sprite[] btnTabTextures;
  192. Button[] btnTabs = {null, null, null};
  193. void InitBtnTabs() {
  194. btnTabs[0] = this.transform.Find("LineV/BtnTab0").GetComponent<Button>();
  195. btnTabs[1] =this.transform.Find("LineV/BtnTab1").GetComponent<Button>();
  196. btnTabs[2] =this.transform.Find("LineV/BtnTab2").GetComponent<Button>();
  197. for (int i = 0; i < btnTabs.Length; i++) {
  198. Button btnTab = btnTabs[i];
  199. int btnTabIndex = i;
  200. btnTab.onClick.AddListener(() => {
  201. AudioMgr.ins.PlayBtn();
  202. if (!IsBtnTabSelected(btnTab)) {
  203. SetBtnTabSelected(btnTab);
  204. }
  205. });
  206. }
  207. }
  208. bool IsBtnTabSelected(Button btn) {
  209. Image img = btn.GetComponent<Image>();
  210. return img.sprite.name.Equals(btnTabTextures[1].name);
  211. }
  212. void SetBtnTabSelected(Button btn) {
  213. foreach (var item in btnTabs) {
  214. Image img = item.GetComponent<Image>();
  215. img.sprite = item == btn ? btnTabTextures[1] : btnTabTextures[0];
  216. }
  217. int index = Array.IndexOf(btnTabs, btn);
  218. HandleBtnTabSelectedLogic(index);
  219. }
  220. void HandleBtnTabSelectedLogic(int btnIndex) {
  221. HideAllBox();
  222. if (btnIndex == 0) {
  223. EnterMyFriendBox();
  224. } else if (btnIndex == 1) {
  225. EnterFriendRequestBox();
  226. } else if (btnIndex == 2) {
  227. EnterSearchPlayerBox();
  228. }
  229. }
  230. #endregion
  231. }