feat: UiController.holdOn

This commit is contained in:
unanmed 2023-10-21 22:36:47 +08:00
parent 7a235b2349
commit f79cd57f75

View File

@ -158,6 +158,8 @@ export class UiController extends Focus<IndexedGameUi> {
list: Record<string, GameUi> = {};
num: number = 0;
private hold: boolean = false;
constructor(equal?: boolean) {
super(true, equal);
UiController.list.push(this);
@ -165,7 +167,8 @@ export class UiController extends Focus<IndexedGameUi> {
spliced.forEach(v => {
v.ui.emit('close');
if (this.stack.length === 0) {
this.emit('end');
if (!this.hold) this.emit('end');
this.hold = false;
}
});
});
@ -194,6 +197,17 @@ export class UiController extends Focus<IndexedGameUi> {
return this.list[id];
}
/**
* 暂时保持下一次删除ui不会导致ui整体被关闭,引起ui背景闪烁。
* 例如可以用于道具栏,打开道具时就应当 holdOn,然后通过道具使用钩子来判断接下来是否要隐藏 app:
* ```txt
* hold on -> close -> use item -> hook -> stack.length === 0 ? hide app : no action
* ```
*/
holdOn() {
this.hold = true;
}
/**
* 关闭一个ui,注意如果不是平等模式,在其之后的ui都会同时关闭掉
* @param num 要关闭的ui的唯一标识符