FriendView.cs 11 KB

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