FriendView.cs 12 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. 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. long offlineTime = itemInfo.Value<long>("offlineTime");
  48. GameObject o = GameObject.Instantiate(GetMyFriendItemPrefab(), GetMyFriendItemParent());
  49. o.SetActive(true);
  50. o.name = friendID.ToString();
  51. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  52. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  53. o.transform.Find("BG0").gameObject.SetActive(!online);
  54. o.transform.Find("BG1").gameObject.SetActive(online);
  55. Text onlineTip = o.transform.Find("OnlineTip").GetComponent<Text>();
  56. onlineTip.text = TimeUtil.GetOfflineTimeStr(offlineTime, online);
  57. onlineTip.color = online ? Color.green : Color.gray;
  58. Button btnDelete = o.transform.Find("BtnDelete").GetComponent<Button>();
  59. btnDelete.onClick.RemoveAllListeners();
  60. btnDelete.onClick.AddListener(delegate() {
  61. AudioMgr.ins.PlayBtn();
  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. PopupMgr.ins.ClearAllTip();
  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. for (int i = 1; i < GetFriendRequestItemParent().childCount; i++) {
  92. Destroy(GetFriendRequestItemParent().GetChild(i).gameObject);
  93. }
  94. Action<JArray> cb = delegate(JArray list) {
  95. if (list.Count > 0) {
  96. foreach (var itemInfo in list) {
  97. int otherID = itemInfo.Value<int>("otherID");
  98. int avatarID = itemInfo.Value<int>("avatarID");
  99. string nickname = itemInfo.Value<string>("nickname");
  100. bool online = itemInfo.Value<bool>("online");
  101. long offlineTime = itemInfo.Value<long>("offlineTime");
  102. GameObject o = GameObject.Instantiate(GetFriendRequestItemPrefab(), GetFriendRequestItemParent());
  103. o.SetActive(true);
  104. o.name = otherID.ToString();
  105. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  106. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  107. o.transform.Find("BG0").gameObject.SetActive(!online);
  108. o.transform.Find("BG1").gameObject.SetActive(online);
  109. Text onlineTip = o.transform.Find("OnlineTip").GetComponent<Text>();
  110. onlineTip.text = TimeUtil.GetOfflineTimeStr(offlineTime, online);
  111. onlineTip.color = online ? Color.green : Color.gray;
  112. Button btnNo = o.transform.Find("BtnNo").GetComponent<Button>();
  113. btnNo.onClick.RemoveAllListeners();
  114. btnNo.onClick.AddListener(delegate() {
  115. AudioMgr.ins.PlayBtn();
  116. UserPlayer.ins.call("friendComp.decideAddFriend", new object[]{false, otherID});
  117. Destroy(o);
  118. });
  119. Button btnYes = o.transform.Find("BtnYes").GetComponent<Button>();
  120. btnYes.onClick.RemoveAllListeners();
  121. btnYes.onClick.AddListener(delegate() {
  122. AudioMgr.ins.PlayBtn();
  123. UserPlayer.ins.call("friendComp.decideAddFriend", new object[]{true, otherID});
  124. Destroy(o);
  125. });
  126. }
  127. } else {
  128. PopupMgr.ins.ShowTip("好友请求列表为空");
  129. }
  130. };
  131. UserPlayer.ins.call("friendComp.getFriendRequestList", null, cb);
  132. PopupMgr.ins.ClearAllTip();
  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. PopupMgr.ins.ClearAllTip();
  149. }
  150. InputField GetSearchInputField() {
  151. return searchPlayerBox.transform.Find("SearchBox/InputField").GetComponent<InputField>();
  152. }
  153. long _lastSearchTime = 0;
  154. public void btnEvent_SearchPlayer() {
  155. AudioMgr.ins.PlayBtn();
  156. if (JC.CS.Utility.GetTimestamp() - _lastSearchTime < 3000) {
  157. PopupMgr.ins.ShowTip("操作过于频繁");
  158. return;
  159. } else {
  160. _lastSearchTime = JC.CS.Utility.GetTimestamp();
  161. }
  162. string searchText = GetSearchInputField().text;
  163. Action<JArray> cb = delegate(JArray list) {
  164. for (int i = 1; i < GetSearchPlayerItemParent().childCount; i++) {
  165. Destroy(GetSearchPlayerItemParent().GetChild(i).gameObject);
  166. }
  167. if (list.Count > 0) {
  168. foreach (var itemInfo in list) {
  169. int userID = itemInfo.Value<int>("id");
  170. int avatarID = itemInfo.Value<int>("avatarID");
  171. string nickname = itemInfo.Value<string>("nickname");
  172. bool online = itemInfo.Value<bool>("online");
  173. long offlineTime = itemInfo.Value<long>("offlineTime");
  174. GameObject o = GameObject.Instantiate(GetSearchPlayerItemPrefab(), GetSearchPlayerItemParent());
  175. o.SetActive(true);
  176. o.name = userID.ToString();
  177. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  178. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  179. o.transform.Find("BG0").gameObject.SetActive(!online);
  180. o.transform.Find("BG1").gameObject.SetActive(online);
  181. Text onlineTip = o.transform.Find("OnlineTip").GetComponent<Text>();
  182. onlineTip.text = TimeUtil.GetOfflineTimeStr(offlineTime, online);
  183. onlineTip.color = online ? Color.green : Color.gray;
  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. }