mirror of
https://gitee.com/dgflash/oops-plugin-framework.git
synced 2026-05-15 18:19:45 +08:00
2、修复Dialog窗口连续弹出时,且带关闭动画情况下,有几率后续窗口关闭不了的问题 3、扩展GUI框架可配置是否触摸非窗口区域关闭 4、扩展GUI框架可配置是否打开窗口后显示背景遮罩 5、扩展GUI框架可配置是否缓存打开的界面,使下次打开立即显示 6、重构GUI框架,代码更简洁,源API使用体验不变
81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
/*
|
|
* @Author: dgflash
|
|
* @Date: 2021-07-03 16:13:17
|
|
* @LastEditors: dgflash
|
|
* @LastEditTime: 2023-07-24 17:14:57
|
|
*/
|
|
|
|
import { Node } from "cc";
|
|
import { UICallbacks, ViewParams } from "./Defines";
|
|
import { UIConfig } from "./LayerManager";
|
|
import { LayerPopUp } from "./LayerPopup";
|
|
|
|
/** 模式弹窗数据 */
|
|
type DialogParam = {
|
|
config: UIConfig;
|
|
params?: any;
|
|
callbacks?: UICallbacks;
|
|
}
|
|
|
|
/*
|
|
* 模式弹窗层,该层的窗口同时只能显示一个,删除以后会自动从队列当中取一个弹窗,直到队列为空
|
|
*/
|
|
export class LayerDialog extends LayerPopUp {
|
|
/** 窗口调用参数队列 */
|
|
private params: Array<DialogParam> = [];
|
|
|
|
add(config: UIConfig, params?: any, callbacks?: UICallbacks) {
|
|
// 控制同一时间只能显示一个模式窗口
|
|
if (this.ui_nodes.size > 0) {
|
|
this.params.push({
|
|
config: config,
|
|
params: params,
|
|
callbacks: callbacks,
|
|
});
|
|
return;
|
|
}
|
|
|
|
this.black.enabled = true;
|
|
this.show(config, params, callbacks);
|
|
}
|
|
|
|
/** 显示模式弹窗 */
|
|
private show(config: UIConfig, params?: any, callbacks?: UICallbacks): string {
|
|
var vp = this.ui_cache.get(config.prefab);
|
|
if (vp == null) {
|
|
vp = new ViewParams();
|
|
vp.config = config
|
|
vp.valid = true;
|
|
}
|
|
this.ui_nodes.set(vp.config.prefab, vp);
|
|
|
|
vp.callbacks = callbacks ?? {};
|
|
var onRemove_Source = vp.callbacks.onRemoved;
|
|
vp.callbacks.onRemoved = (node: Node | null, params: any) => {
|
|
if (onRemove_Source) {
|
|
onRemove_Source(node, params);
|
|
}
|
|
setTimeout(this.next.bind(this), 0);
|
|
};
|
|
|
|
vp.params = params || {};
|
|
this.load(vp, config.bundle);
|
|
|
|
return config.prefab;
|
|
}
|
|
|
|
protected setBlackDisable() {
|
|
if (this.params.length == 0) {
|
|
this.black.enabled = false;
|
|
this.closeVacancyRemove();
|
|
this.closeMask()
|
|
}
|
|
}
|
|
|
|
private next() {
|
|
if (this.params.length > 0) {
|
|
let param = this.params.shift()!;
|
|
this.show(param.config, param.params, param.callbacks);
|
|
}
|
|
}
|
|
} |