import { Widget, _decorator, Node, Label, ProgressBar } from 'cc'; import { UIBase } from '../scriptBase/UIBase'; import { GameMgr } from '../manager/GameMgr'; import { CoinItem } from '../uiItem/CoinItem'; import { CoinMgr } from '../manager/CoinMgr'; import { StorageUtil } from '../util/StorageUtil'; import { EventMgr } from '../manager/EventMgr'; import { EventType } from '../enum/EventType'; import { CfgPassReward } from '../config/cfg_passReward'; import { MathUtil } from '../util/MathUtil'; import { UI } from '../enum/UI'; import { DtoReward } from '../dto/DtoReward'; const { ccclass, property, requireComponent } = _decorator; @ccclass('UI/UIPassReward') @requireComponent(Widget) export class UIPassReward extends UIBase { private btnGet: Node = null private btnContinue: Node = null private coinItem: CoinItem = null private curPassLevel: number = 0 private targetPassLevel: number = 0 private passRewardLevel: number = 0 protected onLoad(): void { this.btnGet = this.findNode('BtnGet') this.btnContinue = this.findNode('BtnContinue') this.coinItem = this.findComp('CoinItem', CoinItem) } public onOpen(data?: any): void { this.updateState() } public onClose(data?: any): void { } private updateState(): void { this.coinItem.init(CoinMgr.CurCoin) this.passRewardLevel = StorageUtil.getItem('passRewardLevel', 0) this.curPassLevel = GameMgr.CurPassedLevel this.targetPassLevel = Math.ceil(this.curPassLevel / 5) * 5 if (this.passRewardLevel === this.targetPassLevel) this.targetPassLevel += 5 const canGet: boolean = this.curPassLevel >= this.targetPassLevel this.btnGet.active = canGet this.btnContinue.active = !canGet } protected onBtnCloseClick(): void { this.close() } protected onBtnGetClick(): void { this.getReward() StorageUtil.setItem('passRewardLevel', this.targetPassLevel) this.updateState() EventMgr.emit(EventType.GetPassReward) } protected getReward(): void { const weights: number[] = [] for (let i = 0; i < CfgPassReward.length; i++) { const passReward = CfgPassReward[i] weights.push(passReward.weight) } const idx: number = MathUtil.randWeight(weights) const passReward = CfgPassReward[idx] const reward: DtoReward = passReward this.open(UI.GetReward, [reward]) } }