//********************* // create by 流云 // time: Sat Apr 25 2026 // desc: //********************* import { _decorator, Component, Node, find, RichText, sp, Tween } from 'cc'; import { Auto_PopTetriDoc } from './Auto_PopTetriDoc'; const { ccclass, property } = _decorator; @ccclass('UIPopTetriDoc') export class UIPopTetriDoc extends Auto_PopTetriDoc { private _curentPage: number = 0; private _isClosing = false; /** 本实例是否已计入 pauseForTetriDoc */ private _pausedByDoc = false; onLoad(): void { super.onLoad(); } onEnable(): void { super.onEnable(); this._isClosing = false; this._pausedByDoc = false; const battle = gg.game?.CurentBattle; if (battle) { battle.pauseForTetriDoc(); this._pausedByDoc = true; } this.ui_bgMask.on(Node.EventType.TOUCH_END, this.onClickClose, this); } onDisable(): void { super.onDisable(); this.ui_bgMask?.off(Node.EventType.TOUCH_END, this.onClickClose, this); } protected onDestroy(): void { this._releaseDocPause(); super.onDestroy?.(); } onInit(): void { this._isClosing = false; this._curentPage = 0; if (this.prema && !Number.isNaN(this.prema)) this._curentPage = this.prema; if (this.ui_center?.isValid) { Tween.stopAllByTarget(this.ui_center); } if (this.ui_bgMask?.isValid) { Tween.stopAllByTarget(this.ui_bgMask); } this.showOpenCenterEff(); this.showOpenMaskEff(2); this.updateUI(); } updateUI(): void { this.btnLeft.active = this._curentPage > 0; this.btnRight.active = this._curentPage < 4; this.ui_anim.active = this._curentPage <= 3; this.ui_page4.active = this._curentPage == 4; this.rt_title.string = gg.lang.get(`玩法说明第${this._curentPage + 1}页标题`); this.rt_desc.string = gg.lang.get(`玩法说明第${this._curentPage + 1}页描述`); if (this.ui_page4.active) { for (let i = 0; i < this.ui_page4.children.length; i++) { let n = this.ui_page4.children[i].getComponent(RichText); n.string = gg.lang.get(`玩法说明页面5描述${i + 1}`); } } if (this.ui_anim.active) { let name = `1放置`; if (this._curentPage == 1) name = `2移动`; if (this._curentPage == 2) name = `3合成`; if (this._curentPage == 3) name = `1放置无重力墙`; this.ui_anim.getComponent(sp.Skeleton).setAnimation(0, name, true); } } click_btnLeft(): void { this._curentPage--; if (this._curentPage < 0) this._curentPage = 0; this.updateUI(); } click_btnRight(): void { this._curentPage++; if (this._curentPage > 4) this._curentPage = 4; this.updateUI(); } onClickClose(): void { this.requestClose(); } click_btnClose(): void { this.requestClose(); } private _releaseDocPause(): void { if (!this._pausedByDoc) return; gg.game?.CurentBattle?.resumeForTetriDoc(); this._pausedByDoc = false; } /** 连点关闭/重开时避免 Sliced Sprite 在缩放到 0 时 updateUVs 空引用 */ private requestClose(): void { if (this._isClosing) { return; } this._isClosing = true; if (this.ui_anim?.isValid) { this.ui_anim.active = false; } if (this.ui_center?.isValid) { Tween.stopAllByTarget(this.ui_center); } if (this.ui_bgMask?.isValid) { Tween.stopAllByTarget(this.ui_bgMask); } // destroy 前释放 pause(不可依赖 panelIsShow,关闭当帧仍为 true) this._releaseDocPause(); this.close(1); } }