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