mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-18 17:48:52 +08:00
6.2 KiB
6.2 KiB
UIController API 文档
本文档由 DeepSeek R1
模型生成并微调。
graph LR
UIController --> EventEmitter
click EventEmitter "https://nodejs.org/api/events.html#class-eventemitter"
类描述
UIController
是 UI 控制系统的核心类,负责管理 UI 实例的显示栈、背景控制以及多种显示模式。继承自 EventEmitter
,支持事件监听。想要编写 UI 请参考深度指南。
属性说明
属性名 | 类型 | 描述 |
---|---|---|
stack |
IUIInstance[] (响应式数组) |
当前管理的 UI 实例栈 |
mode |
UIMode |
UI 显示模式,默认为 LastOnlyStack |
background |
IGameUI |
背景 UI 的配置实例 |
backIns |
ShallowRef<IUIInstance> |
背景 UI 实例的响应式引用 |
showBack |
ComputedRef<boolean> |
当前是否显示背景(用户设置与系统状态共同决定) |
active (只读) |
boolean |
系统是否显示背景 UI(等价于 sysShowBack.value ) |
controllers (静态) |
Map<string, UIController> |
静态属性,存储所有已创建的控制器实例,键为 id ,值为控制器实例 |
构造方法
constructor
function constructor(id: string): UIController;
- 参数
id
: 控制器的唯一标识符(若重复会触发警告日志)
示例
const mainController = new UIController('main');
方法说明
render
function render(): VNode;
渲染 UI 容器组件(用于 Vue 挂载)。
示例
import { defineComponent } from 'vue';
import { UIController } from '@motajs/system-ui';
export const myController = new UIController('my-controller');
export const MyCom = defineComponent(() => {
return () => <container>{myController.render()}</container>;
});
setBackground
function setBackground<T extends UIComponent>(
back: IGameUI<T>,
vBind: UIProps<T>
): void;
设置背景 UI 并初始化其实例。
- 参数
back
: 背景 UI 配置实例vBind
: 传递给背景组件的 Props 对象
示例
import { BackgroundUI } from './background';
// 显示背景组件,并传入参数 theme='dark'
mainController.setBackground(BackgroundUI, { theme: 'dark' });
hideBackground
function hideBackground(): void;
隐藏背景 UI (不影响系统状态)。
showBackground
function showBackground(): void;
显示背景 UI(不影响系统状态)。
keep
function keep(): IKeepController;
维持背景显示(防闪烁),返回控制器对象:
interface IKeepController {
safelyUnload(): void; // 安全卸载(仅在栈为空时关闭)
unload(): void; // 强制立即卸载
}
示例
const keeper = mainController.keep();
// 执行某些操作后...
keeper.safelyUnload();
open
function open<T extends UIComponent>(
ui: IGameUI<T>,
vBind: UIProps<T>,
alwaysShow?: boolean
): IUIInstance<T>;
打开一个新 UI 实例并加入栈中。
- 参数
ui
: UI 配置实例vBind
: 组件 PropsalwaysShow
: 是否强制显示(默认false
)
- 返回值 打开的 UI 实例,可以用于关闭等操作
示例
import { MyUI } from './myUI';
const instance = mainController.open(MyUI, { param: 80 });
close
function close(ui: IUIInstance): void;
关闭指定 UI 实例(根据当前模式可能影响其他实例)。
closeAll
function closeAll(ui?: IGameUI): void;
关闭所有或指定类型的所有 UI 实例。
- 参数
ui
(可选): 指定要关闭的 UI 类型,不填时表示关闭所有 UI
lastOnly
function lastOnly(stack?: boolean): void;
切换显示模式:仅显示最后一个 UI(可设置为栈模式)
showAll
function showAll(stack?: boolean): void;
切换显示模式:显示所有非隐藏 UI(可设置为栈模式)
showCustom
function showCustom(config: IUICustomConfig): void;
切换显示模式:使用自定义模式(需实现 IUICustomConfig
),参考指南
UIController.getController
function getController(id: string): UIController | null;
静态方法:根据 ID 获取控制器实例。
示例
const ctrl = UIController.getController('main');
事件说明
事件名 | 参数类型 | 触发时机 |
---|---|---|
open |
ui: IGameUI, ins: IUIInstance |
新 UI 实例被打开时 |
close |
ins: IUIInstance |
UI 实例被关闭时 |
事件监听示例
mainController.on('open', (ui, ins) => {
console.log(`Opened UI: ${ui.name}`);
});
总使用示例
import { BackgroundUI, DialogUI } from './myUI';
import { mainController } from '@user/client-modules';
// 事件监听
mainController.on('close', ins => {
console.log('UI closed:', ins.ui.name);
});
// 设置背景
mainController.setBackground(BackgroundUI, { color: '#333' });
// 打开 UI
const dialogIns = mainController.open(DialogUI, { title: '提示' });
// 切换显示模式,仅显示最后一个,启用栈模式
mainController.lastOnly(true);
// 关闭 UI
mainController.close(dialogIns);