All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 42s
151 lines
5.8 KiB
TypeScript
151 lines
5.8 KiB
TypeScript
import { _decorator, BlockInputEvents, Component, Label, Node, Prefab, tween, v3 } from 'cc';
|
|
import { NodePoolManager } from '../../../Loading/scripts/manager/NodePoolManager';
|
|
import { AudioManager } from '../../../Loading/scripts/manager/AudioManager';
|
|
|
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
@ccclass('TipPanel')
|
|
export class TipPanel extends Component {
|
|
|
|
@property(Prefab)
|
|
tipPrefab: Prefab = null;
|
|
|
|
private isAnimating: boolean = false;
|
|
|
|
tipNode: Node = null;
|
|
messageNode: Node = null;
|
|
|
|
hasTip: boolean = false;
|
|
|
|
|
|
/**
|
|
* 显示提示框
|
|
* @param title 标题
|
|
* @param msg 消息
|
|
* @param callback 确认回调
|
|
* @param cancelCallback 取消回调
|
|
* @param confirmStr 确认按钮文本
|
|
* @param cancelStr 取消按钮文本
|
|
* @param hasCancel 是否显示取消按钮
|
|
*/
|
|
showTip(title: string, msg: string, callback?: Function, cancelCallback?: Function, confirmStr?: string, cancelStr?: string, hasCancel: boolean = true) {
|
|
// 从对象池获取提示框节点
|
|
this.tipNode = NodePoolManager.instance.getNodeFromPoolStatic('TipMessagePanel', this.tipPrefab);
|
|
// 设置标题和消息
|
|
let message = this.tipNode.getChildByName('message');
|
|
this.messageNode = message;
|
|
let titleLabel = message.getChildByName('title').getComponent(Label);
|
|
let msgLabel = message.getChildByName('msg').getComponent(Label);
|
|
titleLabel.string = title;
|
|
msgLabel.string = msg;
|
|
|
|
message.scale = v3(0, 0, 0);
|
|
this.isAnimating = true;
|
|
this.tipNode.getComponent(BlockInputEvents).enabled = true;
|
|
// 添加到场景
|
|
this.node.addChild(this.tipNode);
|
|
this.hasTip = true;
|
|
|
|
tween(message)
|
|
.to(0.5, { scale: v3(1, 1, 1) }, { easing: 'backOut' })
|
|
.call(() => {
|
|
this.isAnimating = false;
|
|
this.tipNode.getComponent(BlockInputEvents).enabled = false;
|
|
})
|
|
.start();
|
|
|
|
|
|
|
|
if (hasCancel) {
|
|
message.getChildByName('Btn_Confirm').active = true;
|
|
message.getChildByName('confirm').active = true;
|
|
message.getChildByName('Btn_Cancel').active = true;
|
|
message.getChildByName('cancel').active = true;
|
|
message.getChildByName('Btn_Confirm_1').active = false;
|
|
message.getChildByName('confirm_1').active = false;
|
|
// 添加确认按钮点击事件
|
|
let confirmBtn = message.getChildByName('Btn_Confirm');
|
|
if (confirmStr) {
|
|
message.getChildByName('confirm').getComponent(Label).string = confirmStr;
|
|
}
|
|
confirmBtn.on(Node.EventType.TOUCH_END, () => {
|
|
if (this.isAnimating) return;
|
|
AudioManager.instance.playSFX('Common_Button_Click');
|
|
this.isAnimating = true;
|
|
this.tipNode.getComponent(BlockInputEvents).enabled = true;
|
|
tween(this.messageNode)
|
|
.to(0.5, { scale: v3(0, 0, 0) }, { easing: 'backIn' })
|
|
.call(() => {
|
|
// 回收节点到对象池
|
|
this.closeTip();
|
|
// 执行回调
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
})
|
|
.start();
|
|
});
|
|
// 添加取消按钮点击事件
|
|
let cancelBtn = message.getChildByName('Btn_Cancel');
|
|
if (cancelStr) {
|
|
message.getChildByName('cancel').getComponent(Label).string = cancelStr;
|
|
}
|
|
cancelBtn.on(Node.EventType.TOUCH_END, () => {
|
|
if (this.isAnimating) return;
|
|
AudioManager.instance.playSFX('Common_Button_Click');
|
|
this.closeTip();
|
|
if (cancelCallback) {
|
|
cancelCallback();
|
|
}
|
|
});
|
|
} else {
|
|
message.getChildByName('Btn_Confirm').active = false;
|
|
message.getChildByName('confirm').active = false;
|
|
message.getChildByName('Btn_Cancel').active = false;
|
|
message.getChildByName('cancel').active = false;
|
|
message.getChildByName('Btn_Confirm_1').active = true;
|
|
message.getChildByName('confirm_1').active = true;
|
|
|
|
// 添加确认按钮点击事件
|
|
let confirmBtn = message.getChildByName('Btn_Confirm_1');
|
|
if (confirmStr) {
|
|
message.getChildByName('confirm_1').getComponent(Label).string = confirmStr;
|
|
}
|
|
confirmBtn.on(Node.EventType.TOUCH_END, () => {
|
|
if (this.isAnimating) return;
|
|
AudioManager.instance.playSFX('Common_Button_Click');
|
|
this.isAnimating = true;
|
|
this.tipNode.getComponent(BlockInputEvents).enabled = true;
|
|
tween(this.messageNode)
|
|
.to(0.5, { scale: v3(0, 0, 0) }, { easing: 'backIn' })
|
|
.call(() => {
|
|
this.closeTip();
|
|
// 执行回调
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
})
|
|
.start();
|
|
});
|
|
}
|
|
}
|
|
|
|
// 回收节点
|
|
closeTip() {
|
|
this.hasTip = false;
|
|
// 取消所有按钮的监听事件
|
|
this.messageNode.getChildByName('Btn_Confirm').off(Node.EventType.TOUCH_END);
|
|
this.messageNode.getChildByName('Btn_Cancel').off(Node.EventType.TOUCH_END);
|
|
this.messageNode.getChildByName('Btn_Confirm_1').off(Node.EventType.TOUCH_END);
|
|
// 回收节点
|
|
NodePoolManager.instance.putNodeToPool('TipMessagePanel', this.tipNode);
|
|
}
|
|
|
|
getHasTip() {
|
|
return this.hasTip;
|
|
}
|
|
}
|
|
|
|
|