PageRank.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import { _decorator, Component, Node } from "cc";
  2. import BaseUI from "../../scripts/base/BaseUI";
  3. import { Tips } from "../../scripts/mgr/Tips";
  4. import { CommonTabsTitle, OnTabClickListener } from "../common/CommonTabsTitle";
  5. import RankM, { RankDto } from "../../scripts/api/RankM";
  6. import Utils from "../../scripts/utils/Utils";
  7. import UserM from "../../scripts/api/UserM";
  8. import { ScrollView } from "cc";
  9. import AB from "../../scripts/base/AB";
  10. import ConfigM, { Config, ConfigGrade } from "../../scripts/api/ConfigM";
  11. import { instantiate } from "cc";
  12. import { GradeItem } from "../item/GradeItem";
  13. import { Prefab } from "cc";
  14. import { RankPlayerItem } from "../item/RankPlayerItem";
  15. import { HelpLayer } from "../layer/HelpLayer";
  16. import { HelpRank } from "../layer/HelpRank";
  17. import { TipsData, TipsLayer } from "../layer/TipsLayer";
  18. const { ccclass, property } = _decorator;
  19. @ccclass("PageRank")
  20. export class PageRank extends BaseUI implements OnTabClickListener {
  21. public static readonly RankTypeSeason = 0;
  22. public static readonly RankTypeTotal = 1;
  23. private tabs: CommonTabsTitle;
  24. private rank_people_layout: Node;
  25. protected onLoad(): void {
  26. super.onLoad();
  27. this.tabs = this.FindAs("CommonTabsTitle", CommonTabsTitle);
  28. this.rank_people_layout = this.FindNode("rank_people_layout");
  29. // 获取内部的水平ScrollView
  30. let gradeScrollView = this.FindAs("GradeItemScrollView", ScrollView);
  31. // 最简单的方式:设置内部ScrollView不取消内部事件,让外部ScrollView可以正常响应垂直滑动
  32. if (gradeScrollView) {
  33. gradeScrollView.cancelInnerEvents = false;
  34. }
  35. let tab_titles = [
  36. Utils.setI18nLabel("Rank.Season"),
  37. Utils.setI18nLabel("Rank.Total"),
  38. ];
  39. this.tabs.init(tab_titles, this);
  40. this.refresh();
  41. }
  42. async refresh() {
  43. if (this._grade <= 0) {
  44. this._grade = UserM.ins.getGrade();
  45. }
  46. this.init();
  47. this.initGrades();
  48. this.initTitles();
  49. this.initRankPeoples(this._grade);
  50. }
  51. private refreshGradeSelected() {
  52. this.getComponentsInChildren(GradeItem).forEach((item) => {
  53. item.setSelected(item && item.data.id == this._grade);
  54. });
  55. }
  56. private _type: number = PageRank.RankTypeSeason;
  57. private _grade: number = 0;
  58. async initRankPeoples(grade: number) {
  59. this.refreshGradeSelected();
  60. let tpl = await AB.ins.loadPrefab("prefab/item/RankPlayerItem");
  61. let data = await RankM.ins.rankPeoples(this._type, grade);
  62. this.rank_people_layout.removeAllChildren();
  63. if (!data || !data.rankList || data.rankList.length <= 0) {
  64. return;
  65. }
  66. for (let i = 0; i < data.rankList.length; i++) {
  67. let item = instantiate(tpl);
  68. item.getComponent(RankPlayerItem).init(data.rankList[i]);
  69. this.rank_people_layout.addChild(item);
  70. }
  71. }
  72. initTitles() {
  73. this.setText(
  74. "lbl_t_current_season",
  75. Utils.setI18nLabel("Rank.CurrentSeason")
  76. );
  77. this.setText("lbl_t_season_desc", Utils.setI18nLabel("Rank.TotalPogTip"));
  78. this.setText("lbl_t_sent", Utils.setI18nLabel("Rank.TodaySend"));
  79. this.setText("lbl_t_remaining", Utils.setI18nLabel("Rank.TodayRemaining"));
  80. this.setText("lbl_rank_my_tips", Utils.setI18nLabel("Rank.MyRankTip"));
  81. this.setText(
  82. "lbl_online_time_tips",
  83. Utils.setI18nLabel("Rank.WeekTimeTip")
  84. );
  85. this.setText(
  86. "lbl_t_grade_title",
  87. Utils.setI18nLabel("Rank.AllTankSegmentTitle")
  88. );
  89. }
  90. onGradeClick(data: ConfigGrade) {
  91. this._grade = data.id;
  92. this.initRankPeoples(this._grade);
  93. }
  94. async initGrades() {
  95. let s = this.FindAs("GradeItemScrollView", ScrollView);
  96. let p = await AB.ins.loadPrefab("prefab/item/GradeItem");
  97. let grades = ConfigM.ins.Grades();
  98. for (let i = 0; i < grades.length; i++) {
  99. let item = instantiate(p);
  100. item
  101. .getComponent(GradeItem)
  102. .init(grades[i], this.onGradeClick.bind(this));
  103. s.content.addChild(item);
  104. if (grades[i].id == this._grade) {
  105. item.getComponent(GradeItem).setSelected(true);
  106. }
  107. }
  108. }
  109. async init() {
  110. this.FindNode("pog_info").active = this._type == PageRank.RankTypeSeason;
  111. let data: RankDto = await RankM.ins.rankData(this._type);
  112. this.ui(data);
  113. }
  114. async ui(data: RankDto) {
  115. this.setText("lbl_total_pog", "" + Utils.formatNumber(data.seasonPog, 0));
  116. this.setText(
  117. "lbl_today_send",
  118. "" + Utils.formatNumber(data.dailyGrantPog, 0)
  119. );
  120. this.setText("lbl_remain_pog", "" + Utils.formatNumber(data.remainPog, 0));
  121. // let gradeAddValue = ConfigM.ins.getGradeAddValue(data.rankInfo.rank);
  122. let grade = data.rankInfo.badgeId;
  123. let gradeConfig = ConfigM.ins.getGrade(grade);
  124. if (gradeConfig != null) {
  125. this.setText(
  126. "lbl_rank_my",
  127. gradeConfig.name +
  128. " #" +
  129. data.rankInfo.rank +
  130. " +" +
  131. gradeConfig.addition +
  132. "%"
  133. );
  134. } else {
  135. this.setText("lbl_rank_my", "ROOKIE #" + data.rankInfo.rank);
  136. }
  137. this.setText("lbl_online_time", Utils.getTimeStrByS(data.onlineTime));
  138. this.setText("lbl_season_time", UserM.ins.getSeasonEndTimeText());
  139. }
  140. public onTabClick(index: number) {
  141. // this._type = index;
  142. // this.init();
  143. Tips.show("ComingSoon");
  144. this.tabs.setSelect(this._type);
  145. }
  146. protected simpleOnBtnClick(name: string): void {
  147. switch (name) {
  148. case "btn_rank_tips":
  149. HelpRank.show();
  150. break;
  151. case "btn_utility":
  152. let data = new TipsData();
  153. data.title = "";
  154. data.content = `Check out POG Economy & Leaderboard Mechanics from Litepaper: `;
  155. data.forceConfirm = true;
  156. data.link = `https://telgather.gitbook.io/telgather-litepaper/telgather-economy/pog-economy-and-leaderboard-mechanics`;
  157. TipsLayer.show(data);
  158. break;
  159. }
  160. }
  161. }