Files
oops-plugin-framework/assets/core/gui/layer/LayerNotify.ts
dgflash 28f016ad3c 1. 优化框架中公共预知路径提取到GuiEnum.ts中统一管理
2. 优化在界面预制资源地图输入错误时,框架不在报错,直接触发错误事件提示
2025-03-17 11:21:59 +08:00

93 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* @Author: dgflash
* @Date: 2022-08-15 10:06:47
* @LastEditors: dgflash
* @LastEditTime: 2022-09-02 13:44:12
*/
import { BlockInputEvents, Layers, Node, Widget, instantiate } from "cc";
import { ViewUtil } from "../../utils/ViewUtil";
import { PromptResType } from "../GuiEnum";
import { Notify } from "../prompt/Notify";
/*
* 滚动消息提示层
*/
export class LayerNotify extends Node {
private black!: BlockInputEvents;
/** 等待提示资源 */
private wait: Node = null!;
/** 自定义弹出提示资源 */
private notify: Node = null!;
/** 自定义弹出提示内容资源 */
private notifyItem: Node = null!;
constructor(name: string) {
super(name);
const widget: Widget = this.addComponent(Widget);
widget.isAlignLeft = widget.isAlignRight = widget.isAlignTop = widget.isAlignBottom = true;
widget.left = widget.right = widget.top = widget.bottom = 0;
widget.alignMode = 2;
widget.enabled = true;
this.init();
}
private init() {
this.layer = Layers.Enum.UI_2D;
this.black = this.addComponent(BlockInputEvents);
this.black.enabled = false;
}
/** 打开等待提示 */
async waitOpen() {
if (this.wait == null) {
this.wait = ViewUtil.createPrefabNode(PromptResType.Wait);
// 兼容编辑器预览模式
if (this.wait == null) this.wait = await ViewUtil.createPrefabNodeAsync(PromptResType.Wait);
}
if (this.wait.parent == null) {
this.wait.parent = this;
this.black.enabled = true;
}
}
/** 关闭等待提示 */
waitClose() {
if (this.wait && this.wait.parent) {
this.wait.parent = null;
this.black.enabled = false;
}
}
/**
* 渐隐飘过提示
* @param content 文本表示
* @param useI18n 是否使用多语言
*/
toast(content: string, useI18n: boolean) {
if (this.notify == null) {
this.notify = ViewUtil.createPrefabNode(PromptResType.Toast);
this.notifyItem = this.notify.children[0];
this.notifyItem.parent = null;
}
this.notify.parent = this;
let childNode = instantiate(this.notifyItem);
let prompt = childNode.getChildByName("prompt")!;
let toastCom = prompt.getComponent(Notify)!;
childNode.parent = this.notify;
toastCom.onComplete = () => {
if (this.notify.children.length == 0) {
this.notify.parent = null;
}
};
toastCom.toast(content, useI18n);
// 超过3个提示就施放第一个提示
if (this.notify.children.length > 3) {
this.notify.children[0].destroy();
}
}
}