HeroRewardUI.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { _decorator, Component, Node, Prefab } from 'cc';
  2. import { DataSystem } from '../../core/data/DataSystem';
  3. import { Http, HttpResponseCode } from '../../core/net/Http';
  4. import List from '../../core/ui/virtualList/List';
  5. import { UserHero, UserHeroData } from '../../hero/UserHeroData';
  6. import { HeroRewardItem } from './HeroRewardItem';
  7. const { ccclass, property } = _decorator;
  8. @ccclass('HeroRewardUI')
  9. export class HeroRewardUI extends Component {
  10. @property({ tooltip: "Http组件", type: Http })
  11. public http: Http;
  12. @property({ tooltip: "武将列表", type: List })
  13. public list: List;
  14. @property({ type: Node, displayName: "Content", tooltip: "Content" })
  15. content: Node = null;
  16. @property({ type: Prefab, displayName: "武将奖励Item预制体", tooltip: "武将奖励Item预制体" })
  17. heroItemPrefab: Prefab = null;
  18. private heroList: UserHero[];
  19. private heroData: any = {};
  20. async start() {
  21. await new Promise<void>(resolve => { setTimeout(() => resolve(), 300) });
  22. let result = await this.http.send("/api/hero/getReward");
  23. console.log("getReward: ", result);
  24. if (result && result.code == HttpResponseCode.Success) {
  25. console.log("success");
  26. this.heroData = result.data;
  27. } else {
  28. console.log("fail");
  29. }
  30. this.heroList = [];
  31. let userHeroData = DataSystem.getData(UserHeroData);
  32. //await userHeroData.pull(this.getComponent(Http));
  33. let tempHeroList = userHeroData.haveHeros;
  34. for (let i = 0; i < tempHeroList.length; i++) {
  35. this.heroList.push(userHeroData.get(tempHeroList[i]));
  36. }
  37. let self = this;
  38. this.heroList = this.heroList.sort(function (a, b) {
  39. let dataA = self.heroData[a.client.id] ? self.heroData[a.client.id] : null;
  40. let dataB = self.heroData[b.client.id] ? self.heroData[b.client.id] : null;
  41. let aGeted = dataA ? dataA.rewardReceived && dataA.videoRewardReceived : false;
  42. let bGeted = dataB ? dataB.rewardReceived && dataB.videoRewardReceived : false;
  43. if (aGeted == bGeted) {
  44. if (a.client.color == b.client.color) {
  45. if (a.server.star == b.server.star) {
  46. if (a.client.camp == b.client.camp) {
  47. return b.client.id - a.client.id;
  48. } else {
  49. return a.client.camp - b.client.camp;
  50. }
  51. } else {
  52. return b.server.star - a.server.star;
  53. }
  54. } else {
  55. return b.client.color - a.client.color;
  56. }
  57. } else {
  58. if (!bGeted) return 1;
  59. else return -1;
  60. }
  61. });
  62. this.list.numItems = this.heroList.length;
  63. }
  64. /**
  65. * 当列表项渲染
  66. * @param item 项节点
  67. * @param index 项索引
  68. */
  69. public onListRender(item: Node, index: number) {
  70. let getData = this.heroData[this.heroList[index].client.id] || null;
  71. let isHasRedpoint = this.heroData[this.heroList[index].client.id] && this.heroData[this.heroList[index].client.id].rewardReceived ? false : true;
  72. item.getComponent(HeroRewardItem).updateInfo(this.heroList[index], getData, isHasRedpoint, index);
  73. }
  74. }