import { _decorator, Component, Node, Toggle, PageView } from 'cc'; import { DataSystem } from '../../core/data/DataSystem'; import { Http } from '../../core/net/Http'; import List from '../../core/ui/virtualList/List'; import { ConfigData } from '../../data/ConfigData'; import { UserData } from '../../data/UserData'; import { BookHeroItem } from './BookHeroItem'; import { UserHero, UserHeroData } from '../UserHeroData'; import { WindowSystem } from '../../core/ui/window/WindowSystem'; import { Window } from '../../core/ui/window/Window'; import { Page } from '../../core/page/Page'; import { FormationData } from '../formation/FormationData'; const { ccclass, property, requireComponent } = _decorator; /** * 图鉴 * @author 袁浩 */ @ccclass('Book') @requireComponent(Http) export class Book extends Component { @property({ tooltip: "武将列表", type: List }) public list: List; private heroList: UserHero[]; start() { this.loadHeros(0); } update() { //为了修复list的bug if (WindowSystem.currentWindow != this.pageview.getComponent(Window)) { this.list.numItems = this.heroList.length; } } private pageview: PageView; /** * 当图鉴页面显示 */ public onShow(page: Page, pageview: PageView) { this.pageview = pageview; this.loadHeros(0); } onDestroy() { this.pageview = null; } /** * 当点击阵营项 * @param toggle */ public onCamp(toggle: Toggle) { this.loadHeros(toggle._toggleContainer.toggleItems.indexOf(toggle)); } /** * 根据阵营加载英雄数据并展示到UI * @param camp 阵营 */ public async loadHeros(camp: number) { let userHeroData = DataSystem.getData(UserHeroData); // await userHeroData.pull(this.getComponent(Http)); this.heroList = []; //是否解锁计算 let userData = DataSystem.getData(UserData); let barrack = DataSystem.getData(ConfigData).get("barrack"); let preUnlockHeros: number[] = []; let preCampLv = userData.campLv; //已经解锁的武将 while (true) { if (!barrack[preCampLv]) { break; } if (barrack[preCampLv].unlockHero) { let unlockHeros = barrack[preCampLv].unlockHero.split(","); for (let i = 0; i < unlockHeros.length; i++) { unlockHeros[i] = parseInt(unlockHeros[i]); } preUnlockHeros = preUnlockHeros.concat(unlockHeros); } preCampLv--; } //下一级解锁的武将列表 let nextUnlockHeros: number[] = []; let nextCampLv = userData.campLv + 1; if (barrack[nextCampLv]) { while (true) { if (barrack[nextCampLv] && barrack[nextCampLv].unlockHero) { let nextUnlockHeroStrs = barrack[nextCampLv].unlockHero.split(","); for (let i = 0; i < nextUnlockHeroStrs.length; i++) { nextUnlockHeros.push(parseInt(nextUnlockHeroStrs[i])); } } if (nextUnlockHeros.length || !barrack[nextCampLv]) { break; } nextCampLv++; } } let heroList = userHeroData.haveHeros.concat(userHeroData.notHavetHeros); this.heroList = userHeroData.sort(heroList, camp, preUnlockHeros, nextUnlockHeros, nextCampLv); this.list.numItems = this.heroList.length; } /** * 当列表项渲染 * @param item 项节点 * @param index 项索引 */ public onListRender(item: Node, index: number) { item.getComponent(BookHeroItem).onDataChange(this.heroList, index); } }