UILevelRank.ts 2.95 KB
// Learn TypeScript:
//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html

import { SaveDataManager } from "../../component/SaveDataManager";
import { tMgr, WindowName } from "../../Global";

import { GamePlayTable, TableName } from "../../kernel/table/TableDefine";
import LevelRankItem from "../../prefabs/LeveRankItem";
import { UIBase } from "../UIBase";
import { UIManager } from "../UIManager";

const { ccclass, property } = cc._decorator;

@ccclass
export default class UILevelRank extends UIBase {

    @property(cc.Prefab)
    itemPrefab: cc.Prefab = null;

    private _inited: boolean = false;

    constructor() {
        super();
        this._usePopUpEffect = false;
        this._useCloseEffect = false;
    }

    //#region lifecycle 

    protected start(): void {
        let levelNum = (tMgr.getConfig(TableName.GAME_PLAY, 22) as GamePlayTable).Value;
        let container = cc.find('scrollView/view/content/grid', this.node);

        for (let i = 0; i < levelNum; ++i) {

            let row = Math.floor(i / 5);
            let col = i % 5;
            let reverse: boolean = false;
            if (row % 2 == 1) {
                reverse = true;
            }

            let item = cc.instantiate(this.itemPrefab);
            container.addChild(item);
            item.getComponent(LevelRankItem).setLineLayer(cc.find('scrollView/view/content/line', this.node));
            if (reverse) {
                item.getComponent(LevelRankItem).setLevelId(i + 5 + col * -2); //傻逼非要做些无意义又不好做的排序
            }
            else {
                item.getComponent(LevelRankItem).setLevelId(i + 1);
            }

        }

        this._inited = true;
    }

    protected onDestroy(): void {
        UIManager.ins.cache.delete(WindowName.LEVEL_RANK); // 此界面添加在场景中,会随场景一起销毁,将UIManager中的缓存也删除,避免后续取到被销毁的缓存
    }

    protected onEnable(): void {

        if (this._inited) {
            this.scrollToCur();
        }
        else {
            this.scheduleOnce(this.scrollToCur.bind(this), 0);
        }
    }

    //#endregion

    //#region public method

    //#endregion

    //#region event

    onBtnCloseClick() {
        // UIManager.ins.closeWindow(WindowName.LEVEL_RANK);
        this.node.removeFromParent();

    }

    //#endregion

    //#region private method

    private scrollToCur() {
        let totalRow = Math.ceil((tMgr.getConfig(TableName.GAME_PLAY, 22) as GamePlayTable).Value / 5);
        let curRow = Math.ceil((SaveDataManager.ins.runtimeData.curLevel + 1) / 5) - 1;
        this.node.getChildByName('scrollView').getComponent(cc.ScrollView).scrollTo(cc.v2(0, 1 - curRow / totalRow), 0.5, true);
    }

    //#endregion
}