import { _decorator, Component, Node, Prefab } from 'cc'; import { DataSystem } from '../../core/data/DataSystem'; import { Http, HttpResponseCode } from '../../core/net/Http'; import List from '../../core/ui/virtualList/List'; import { UserHero, UserHeroData } from '../../hero/UserHeroData'; import { HeroRewardItem } from './HeroRewardItem'; const { ccclass, property } = _decorator; @ccclass('HeroRewardUI') export class HeroRewardUI extends Component { @property({ tooltip: "Http组件", type: Http }) public http: Http; @property({ tooltip: "武将列表", type: List }) public list: List; @property({ type: Node, displayName: "Content", tooltip: "Content" }) content: Node = null; @property({ type: Prefab, displayName: "武将奖励Item预制体", tooltip: "武将奖励Item预制体" }) heroItemPrefab: Prefab = null; private heroList: UserHero[]; private heroData: any = {}; async start() { await new Promise(resolve => { setTimeout(() => resolve(), 300) }); let result = await this.http.send("/api/hero/getReward"); console.log("getReward: ", result); if (result && result.code == HttpResponseCode.Success) { console.log("success"); this.heroData = result.data; } else { console.log("fail"); } this.heroList = []; let userHeroData = DataSystem.getData(UserHeroData); //await userHeroData.pull(this.getComponent(Http)); let tempHeroList = userHeroData.haveHeros; for (let i = 0; i < tempHeroList.length; i++) { this.heroList.push(userHeroData.get(tempHeroList[i])); } let self = this; this.heroList = this.heroList.sort(function (a, b) { let dataA = self.heroData[a.client.id] ? self.heroData[a.client.id] : null; let dataB = self.heroData[b.client.id] ? self.heroData[b.client.id] : null; let aGeted = dataA ? dataA.rewardReceived && dataA.videoRewardReceived : false; let bGeted = dataB ? dataB.rewardReceived && dataB.videoRewardReceived : false; if (aGeted == bGeted) { if (a.client.color == b.client.color) { if (a.server.star == b.server.star) { if (a.client.camp == b.client.camp) { return b.client.id - a.client.id; } else { return a.client.camp - b.client.camp; } } else { return b.server.star - a.server.star; } } else { return b.client.color - a.client.color; } } else { if (!bGeted) return 1; else return -1; } }); this.list.numItems = this.heroList.length; } /** * 当列表项渲染 * @param item 项节点 * @param index 项索引 */ public onListRender(item: Node, index: number) { let getData = this.heroData[this.heroList[index].client.id] || null; let isHasRedpoint = this.heroData[this.heroList[index].client.id] && this.heroData[this.heroList[index].client.id].rewardReceived ? false : true; item.getComponent(HeroRewardItem).updateInfo(this.heroList[index], getData, isHasRedpoint, index); } }