FriendView.cs 11 KB

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