RankView.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. using Newtonsoft.Json.Linq;
  7. /* 界面-排行榜 */
  8. public class RankView : MonoBehaviour
  9. {
  10. [SerializeField] GameObject rankListBox;
  11. int rankArea = 0; //0: 全球,1: 本省,2: 本市
  12. int rankGameType = 9; //9: 静止靶PK
  13. void Awake() {
  14. InitBtnTabs();
  15. InitBtnTabs1();
  16. InitRankListBox();
  17. }
  18. void Start() {
  19. SetBtnTabSelected(btnTabs[0]);
  20. }
  21. public void Back() {
  22. AudioMgr.ins.PlayBtn();
  23. Destroy(this.gameObject);
  24. }
  25. #region 排行列表
  26. void InitRankListBox() {
  27. rankListBox.SetActive(false);
  28. GetRankListItemPrefab().SetActive(false);
  29. }
  30. Transform GetRankListItemParent() {
  31. return rankListBox.transform.Find("ScrollView/Viewport/Content");
  32. }
  33. GameObject GetRankListItemPrefab() {
  34. return GetRankListItemParent().Find("Item").gameObject;
  35. }
  36. GameObject GetMyRankItem() {
  37. return rankListBox.transform.Find("MyRankItem").gameObject;
  38. }
  39. void EnterRankListBox() {
  40. rankListBox.SetActive(true);
  41. GetMyRankItem().SetActive(false);
  42. ClearRankList();
  43. int rankArea_copy = rankArea;
  44. int rankGameType_copy = rankGameType;
  45. string countryCode = LoginMgr.myUserInfo.country;
  46. string stateCode = LoginMgr.myUserInfo.state;
  47. string cityCode = LoginMgr.myUserInfo.city;
  48. if (rankArea_copy != 0) {
  49. if (string.IsNullOrWhiteSpace(countryCode)) {
  50. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByCNKey("你尚未设置所属地区,无法查看该排行榜!"));
  51. return;
  52. }
  53. }
  54. Action<JArray, JArray> cb = delegate(JArray rankList, JArray myRank) {
  55. if (rankArea_copy != rankArea || rankGameType_copy != rankGameType) return;
  56. GetMyRankItem().SetActive(false);
  57. ClearRankList();
  58. foreach (var itemInfo in rankList) {
  59. int rankNum = itemInfo.Value<int>("rankNum");
  60. int userID = itemInfo.Value<int>("userID");
  61. int score = itemInfo.Value<int>("score");
  62. int avatarID = itemInfo.Value<int>("avatarID");
  63. string nickname = itemInfo.Value<string>("nickname");
  64. string country = itemInfo.Value<string>("country");
  65. GameObject o = GameObject.Instantiate(GetRankListItemPrefab(), GetRankListItemParent());
  66. o.SetActive(true);
  67. o.transform.Find("Rank1").gameObject.SetActive(rankNum == 1);
  68. o.transform.Find("Rank2").gameObject.SetActive(rankNum == 2);
  69. o.transform.Find("Rank3").gameObject.SetActive(rankNum == 3);
  70. o.transform.Find("RankNum").gameObject.SetActive(rankNum >= 4);
  71. if (rankNum >= 4) {
  72. o.transform.Find("RankNum").GetComponent<Text>().text = rankNum.ToString();
  73. }
  74. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  75. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  76. o.transform.Find("Score").GetComponent<Text>().text = score.ToString();
  77. if (rankArea == 0) {
  78. string countryStr = JC.Unity.Picker.LocationParseComponent.ins.ParseNameByCode(country, "", "").Item1.Trim();
  79. o.transform.Find("Country").GetComponent<Text>().text = countryStr;
  80. } else {
  81. o.transform.Find("Country").GetComponent<Text>().text = "";
  82. }
  83. }
  84. if (myRank.Count > 0) {
  85. JToken itemInfo = myRank[0];
  86. int rankNum = itemInfo.Value<int>("rankNum");
  87. int userID = itemInfo.Value<int>("userID");
  88. int score = itemInfo.Value<int>("score");
  89. int avatarID = itemInfo.Value<int>("avatarID");
  90. string nickname = itemInfo.Value<string>("nickname");
  91. string country = itemInfo.Value<string>("country");
  92. GameObject o = GetMyRankItem();
  93. o.SetActive(true);
  94. o.transform.Find("Rank1").gameObject.SetActive(rankNum == 1);
  95. o.transform.Find("Rank2").gameObject.SetActive(rankNum == 2);
  96. o.transform.Find("Rank3").gameObject.SetActive(rankNum == 3);
  97. o.transform.Find("RankNum").gameObject.SetActive(rankNum >= 4);
  98. if (rankNum >= 4) {
  99. o.transform.Find("RankNum").GetComponent<Text>().text = rankNum.ToString();
  100. }
  101. o.transform.Find("Avatar/Sprite").GetComponent<Image>().sprite = RoleMgr.GetAvatar(avatarID);
  102. o.transform.Find("Name").GetComponent<Text>().text = nickname;
  103. o.transform.Find("Score").GetComponent<Text>().text = score.ToString();
  104. if (rankArea == 0) {
  105. string countryStr = JC.Unity.Picker.LocationParseComponent.ins.ParseNameByCode(country, "", "").Item1.Trim();
  106. o.transform.Find("Country").GetComponent<Text>().text = countryStr;
  107. } else {
  108. o.transform.Find("Country").GetComponent<Text>().text = "";
  109. }
  110. }
  111. };
  112. UserPlayer.ins.call("rankComp.getRankList", new object[]{rankArea_copy, rankGameType_copy, countryCode, stateCode, cityCode}, cb);
  113. }
  114. void ClearRankList() {
  115. Transform parent = GetRankListItemParent();
  116. for (int i = 1; i < parent.childCount; i++) {
  117. Destroy(parent.GetChild(i).gameObject);
  118. }
  119. }
  120. #endregion
  121. #region 顶部条目
  122. [SerializeField] Sprite[] btnTabTextures1;
  123. Button[] btnTabs1 = {null, null, null, null};
  124. void InitBtnTabs1() {
  125. btnTabs1[0] = this.transform.Find("LineH/BtnTab0").GetComponent<Button>();
  126. btnTabs1[1] = this.transform.Find("LineH/BtnTab1").GetComponent<Button>();
  127. btnTabs1[2] = this.transform.Find("LineH/BtnTab2").GetComponent<Button>();
  128. btnTabs1[3] = this.transform.Find("LineH/BtnTab3").GetComponent<Button>();
  129. for (int i = 0; i < btnTabs1.Length; i++) {
  130. Button btnTab = btnTabs1[i];
  131. int btnTabIndex = i;
  132. btnTab.onClick.AddListener(() => {
  133. if (AudioMgr.ins) AudioMgr.ins.PlayBtn();
  134. if (!IsBtnTabSelected1(btnTab)) {
  135. SetBtnTabSelected1(btnTab);
  136. }
  137. });
  138. }
  139. }
  140. bool IsBtnTabSelected1(Button btn) {
  141. Image img = btn.GetComponent<Image>();
  142. return img.sprite.name.Equals(btnTabTextures1[1].name);
  143. }
  144. void SetBtnTabSelected1(Button btn) {
  145. foreach (var item in btnTabs1) {
  146. Image img = item.GetComponent<Image>();
  147. img.sprite = item == btn ? btnTabTextures1[1] : btnTabTextures1[0];
  148. }
  149. int index = Array.IndexOf(btnTabs1, btn);
  150. HandleBtnTabSelectedLogic1(index);
  151. }
  152. void HandleBtnTabSelectedLogic1(int btnIndex) {
  153. rankGameType = 9 + btnIndex;
  154. EnterRankListBox();
  155. }
  156. #endregion
  157. #region 左栏条目切换
  158. [SerializeField] Sprite[] btnTabTextures;
  159. Button[] btnTabs = {null, null, null};
  160. void InitBtnTabs() {
  161. btnTabs[0] = this.transform.Find("LineV/BtnTab0").GetComponent<Button>();
  162. btnTabs[1] =this.transform.Find("LineV/BtnTab1").GetComponent<Button>();
  163. btnTabs[2] =this.transform.Find("LineV/BtnTab2").GetComponent<Button>();
  164. for (int i = 0; i < btnTabs.Length; i++) {
  165. Button btnTab = btnTabs[i];
  166. int btnTabIndex = i;
  167. btnTab.onClick.AddListener(() => {
  168. if (AudioMgr.ins) AudioMgr.ins.PlayBtn();
  169. if (!IsBtnTabSelected(btnTab)) {
  170. SetBtnTabSelected(btnTab);
  171. }
  172. });
  173. }
  174. }
  175. bool IsBtnTabSelected(Button btn) {
  176. Image img = btn.GetComponent<Image>();
  177. return img.sprite.name.Equals(btnTabTextures[1].name);
  178. }
  179. void SetBtnTabSelected(Button btn) {
  180. foreach (var item in btnTabs) {
  181. Image img = item.GetComponent<Image>();
  182. img.sprite = item == btn ? btnTabTextures[1] : btnTabTextures[0];
  183. }
  184. int index = Array.IndexOf(btnTabs, btn);
  185. HandleBtnTabSelectedLogic(index);
  186. }
  187. void HandleBtnTabSelectedLogic(int btnIndex) {
  188. rankArea = btnIndex;
  189. EnterRankListBox();
  190. }
  191. #endregion
  192. }