mirror of
https://github.com/Gongxh0901/kunpolibrary
synced 2025-07-30 03:48:42 +00:00
支持信息动态注册(用来兼容代码在bundle中的情况)
This commit is contained in:
parent
5d48c7d913
commit
366e5fbfb0
@ -8,6 +8,7 @@ import { _decorator } from "cc";
|
||||
import { GRoot } from "fairygui-cc";
|
||||
import { ModuleBase } from "../module/ModuleBase";
|
||||
import { debug } from "../tool/log";
|
||||
import { _uidecorator } from "../ui/UIDecorator";
|
||||
import { WindowManager } from "../ui/WindowManager";
|
||||
import { WindowResPool } from "../ui/WindowResPool";
|
||||
import { CocosWindowContainer } from "./CocosWindowContainer";
|
||||
@ -35,6 +36,7 @@ export class CocosUIModule extends ModuleBase {
|
||||
this.node.destroyAllChildren();
|
||||
/** 注册窗口信息 */
|
||||
WindowManager.registerUI();
|
||||
_uidecorator.setRegisterFinish();
|
||||
this.onInit();
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,23 @@ export class ComponentExtendHelper {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 动态注册自定义组件
|
||||
* @param ctor 组件构造函数
|
||||
* @param pkg 包名
|
||||
* @param name 组件名
|
||||
*/
|
||||
public static dynamicRegister(ctor: any, pkg: string, name: string): void {
|
||||
const componentKey = `${pkg}/${name}`;
|
||||
if (this._registeredComponents.has(componentKey)) {
|
||||
debug(`自定义组件已注册,跳过 组件名:${name} 包名:${pkg}`);
|
||||
return;
|
||||
}
|
||||
debug(`自定义组件注册 组件名:${name} 包名:${pkg}`);
|
||||
this.registerComponent(ctor, pkg, name);
|
||||
this._registeredComponents.add(componentKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册自定义组件信息
|
||||
* @param info
|
||||
|
@ -5,6 +5,8 @@
|
||||
*/
|
||||
|
||||
import { ObjectHelper } from "../tool/helper/ObjectHelper";
|
||||
import { ComponentExtendHelper } from "./ComponentExtendHelper";
|
||||
import { WindowManager } from "./WindowManager";
|
||||
export namespace _uidecorator {
|
||||
/** @internal */
|
||||
const UIPropMeta = "__uipropmeta__"
|
||||
@ -76,6 +78,8 @@ export namespace _uidecorator {
|
||||
bundle: bundle || "",
|
||||
},
|
||||
});
|
||||
// 首次引擎注册完成后 动态注册窗口
|
||||
_registerFinish && WindowManager.dynamicRegisterWindow(ctor, groupName, pkgName, name, bundle || "");
|
||||
};
|
||||
}
|
||||
|
||||
@ -119,6 +123,8 @@ export namespace _uidecorator {
|
||||
name: name,
|
||||
}
|
||||
});
|
||||
// 首次引擎注册完成后 动态注册自定义组件
|
||||
_registerFinish && ComponentExtendHelper.dynamicRegister(ctor, pkg, name);
|
||||
};
|
||||
}
|
||||
|
||||
@ -162,6 +168,8 @@ export namespace _uidecorator {
|
||||
bundle: bundle || "",
|
||||
}
|
||||
});
|
||||
// 首次引擎注册完成后 动态注册窗口header
|
||||
_registerFinish && WindowManager.dynamicRegisterHeader(ctor, pkg, name, bundle || "");
|
||||
};
|
||||
}
|
||||
|
||||
@ -210,6 +218,13 @@ export namespace _uidecorator {
|
||||
// debug("方法装饰器:", target.constructor, name, descriptor);
|
||||
ObjectHelper.getObjectProp(target.constructor, UICBMeta)[name] = descriptor.value;
|
||||
}
|
||||
|
||||
let _registerFinish: boolean = false;
|
||||
|
||||
/** 首次UI注册完成 */
|
||||
export function setRegisterFinish(): void {
|
||||
_registerFinish = true;
|
||||
}
|
||||
}
|
||||
|
||||
let _global = globalThis || window || global;
|
||||
|
@ -208,6 +208,7 @@ export class WindowManager {
|
||||
* 注册所有UI窗口类到资源池中。 (框架内部使用)
|
||||
* 该方法遍历所有通过_uidecorator.getWindowMaps()获取的窗口映射,
|
||||
* 并将每个窗口的资源名称、构造函数、分组和包信息添加到资源池中。
|
||||
* @internal
|
||||
*/
|
||||
public static registerUI(): void {
|
||||
// 窗口注册
|
||||
@ -225,6 +226,18 @@ export class WindowManager {
|
||||
ComponentExtendHelper.register();
|
||||
}
|
||||
|
||||
/** 动态注册窗口到资源池中 */
|
||||
public static dynamicRegisterWindow(ctor: any, group: string, pkg: string, name: string, bundle: string): void {
|
||||
debug(`窗口注册 窗口名:${name} 包名:${pkg} 组名:${group}`);
|
||||
this._resPool.add(ctor, group, pkg, name, bundle);
|
||||
}
|
||||
|
||||
/** 动态注册窗口header到资源池中 */
|
||||
public static dynamicRegisterHeader(ctor: any, pkg: string, name: string, bundle: string): void {
|
||||
debug(`header注册 header名:${name} 包名:${pkg}`);
|
||||
this._resPool.addHeader(ctor, pkg, name, bundle);
|
||||
}
|
||||
|
||||
/**
|
||||
* 向窗口管理器添加一个窗口组 如果窗口组名称已存在,则抛出错误. (内部方法)
|
||||
* @param group 要添加的窗口组
|
||||
|
Loading…
x
Reference in New Issue
Block a user