消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
4.1 KiB

1 week ago
//*********************
// 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);
}
}