dzkcc-mflow 0.0.43 → 0.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/Api.d.ts +12 -1
- package/dist/libs/BaseView.d.ts +19 -4
- package/dist/libs/BaseView.js +23 -2
- package/dist/libs/UIManager.d.ts +18 -26
- package/dist/libs/UIManager.js +48 -38
- package/dist/mflow-tools.zip +0 -0
- package/package.json +1 -1
package/dist/core/Api.d.ts
CHANGED
|
@@ -53,12 +53,23 @@ export interface IManager {
|
|
|
53
53
|
/** 销毁 */
|
|
54
54
|
dispose(): void;
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* UI打开选项
|
|
58
|
+
*/
|
|
59
|
+
export interface UIOpenConfig {
|
|
60
|
+
/** 是否显示等待视图 */
|
|
61
|
+
showLoading?: boolean;
|
|
62
|
+
/** 是否可点击遮罩关闭 */
|
|
63
|
+
clickToCloseMask?: boolean;
|
|
64
|
+
/** 自定义参数 */
|
|
65
|
+
args?: any;
|
|
66
|
+
}
|
|
56
67
|
/**
|
|
57
68
|
* View 基接口 - 视图生命周期
|
|
58
69
|
*/
|
|
59
70
|
export interface IView {
|
|
60
71
|
/** 进入视图 */
|
|
61
|
-
onEnter(args?:
|
|
72
|
+
onEnter(args?: UIOpenConfig): void;
|
|
62
73
|
/** 退出视图 */
|
|
63
74
|
onExit(): void;
|
|
64
75
|
/** 暂停视图(被其他视图覆盖) */
|
package/dist/libs/BaseView.d.ts
CHANGED
|
@@ -1,19 +1,34 @@
|
|
|
1
1
|
import { Component } from 'cc';
|
|
2
|
-
import { IView, IEventManager, ICocosResManager } from '../core';
|
|
2
|
+
import { IView, IEventManager, ICocosResManager, UIOpenConfig } from '../core';
|
|
3
3
|
export declare abstract class BaseView extends Component implements IView {
|
|
4
4
|
/** @internal */
|
|
5
5
|
private readonly __isIView__;
|
|
6
|
-
/** @internal */
|
|
7
|
-
private __group__;
|
|
8
6
|
private _eventProxy?;
|
|
9
7
|
private _eventHandlers;
|
|
10
8
|
protected get event(): IEventManager;
|
|
11
9
|
private _loaderProxy?;
|
|
12
10
|
private _loaderHandlers;
|
|
13
11
|
protected get res(): ICocosResManager;
|
|
12
|
+
private _openConfig;
|
|
13
|
+
/**
|
|
14
|
+
* 打开时传入的配置数据
|
|
15
|
+
* 仅供框架内部使用,业务使用 this.args代替
|
|
16
|
+
*/
|
|
17
|
+
/** @internal */
|
|
18
|
+
get __config__(): UIOpenConfig | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* 打开时传入的配置数据
|
|
21
|
+
* 仅供框架内部使用,业务使用 this.args代替
|
|
22
|
+
*/
|
|
23
|
+
/** @internal */
|
|
24
|
+
set __config__(config: UIOpenConfig | undefined);
|
|
25
|
+
/**
|
|
26
|
+
* UIOpenConfig.args
|
|
27
|
+
*/
|
|
28
|
+
protected get args(): any;
|
|
14
29
|
abstract onPause(): void;
|
|
15
30
|
abstract onResume(): void;
|
|
16
|
-
abstract onEnter(args?:
|
|
31
|
+
abstract onEnter(args?: UIOpenConfig): void;
|
|
17
32
|
onExit(): void;
|
|
18
33
|
protected onDestroy(): void;
|
|
19
34
|
/**
|
package/dist/libs/BaseView.js
CHANGED
|
@@ -7,8 +7,6 @@ class BaseView extends Component {
|
|
|
7
7
|
super(...arguments);
|
|
8
8
|
/** @internal */
|
|
9
9
|
this.__isIView__ = true;
|
|
10
|
-
/** @internal */
|
|
11
|
-
this.__group__ = undefined;
|
|
12
10
|
this._eventHandlers = [];
|
|
13
11
|
this._loaderHandlers = [];
|
|
14
12
|
}
|
|
@@ -55,6 +53,29 @@ class BaseView extends Component {
|
|
|
55
53
|
}
|
|
56
54
|
return this._loaderProxy;
|
|
57
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* 打开时传入的配置数据
|
|
58
|
+
* 仅供框架内部使用,业务使用 this.args代替
|
|
59
|
+
*/
|
|
60
|
+
/** @internal */
|
|
61
|
+
get __config__() {
|
|
62
|
+
return this._openConfig;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 打开时传入的配置数据
|
|
66
|
+
* 仅供框架内部使用,业务使用 this.args代替
|
|
67
|
+
*/
|
|
68
|
+
/** @internal */
|
|
69
|
+
set __config__(config) {
|
|
70
|
+
this._openConfig = config;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* UIOpenConfig.args
|
|
74
|
+
*/
|
|
75
|
+
get args() {
|
|
76
|
+
var _a;
|
|
77
|
+
return (_a = this._openConfig) === null || _a === void 0 ? void 0 : _a.args;
|
|
78
|
+
}
|
|
58
79
|
onExit() {
|
|
59
80
|
// 自动清理所有事件监听
|
|
60
81
|
this._eventHandlers.forEach(({ key, listener }) => {
|
package/dist/libs/UIManager.d.ts
CHANGED
|
@@ -1,24 +1,11 @@
|
|
|
1
1
|
import { Component, Node, Color } from "cc";
|
|
2
|
-
import { IUIManager, IView } from "../core";
|
|
2
|
+
import { IUIManager, IView, UIOpenConfig } from "../core";
|
|
3
3
|
/**
|
|
4
4
|
* UI遮罩配置选项
|
|
5
5
|
*/
|
|
6
|
-
export interface
|
|
6
|
+
export interface UIMaskConfig {
|
|
7
7
|
/** 遮罩颜色 */
|
|
8
8
|
color?: Color;
|
|
9
|
-
/** 是否可点击关闭顶层UI */
|
|
10
|
-
clickToClose?: boolean;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* UI打开选项
|
|
14
|
-
*/
|
|
15
|
-
export interface UIOpenOptions {
|
|
16
|
-
/** 是否显示等待视图 */
|
|
17
|
-
showLoading?: boolean;
|
|
18
|
-
/** 是否可点击遮罩关闭 */
|
|
19
|
-
clickToClose?: boolean;
|
|
20
|
-
/** 自定义参数 */
|
|
21
|
-
args?: any;
|
|
22
9
|
}
|
|
23
10
|
/**
|
|
24
11
|
* 等待视图配置
|
|
@@ -53,21 +40,20 @@ export interface UIPreloadConfig {
|
|
|
53
40
|
/** 预加载延迟(毫秒) */
|
|
54
41
|
delay?: number;
|
|
55
42
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
type ICocosView = IInternalView & Component;
|
|
43
|
+
type ICocosView = IView & Component & {
|
|
44
|
+
__config__: UIOpenConfig | undefined;
|
|
45
|
+
};
|
|
60
46
|
declare abstract class CcocosUIManager implements IUIManager {
|
|
61
47
|
getTopView(): IView | undefined;
|
|
62
|
-
open<T extends keyof UIRegistry>(viewClass: T, args?:
|
|
48
|
+
open<T extends keyof UIRegistry>(viewClass: T, args?: UIOpenConfig): Promise<InstanceType<UIRegistry[T]>>;
|
|
63
49
|
close<T extends keyof UIRegistry>(viewClass: T): Promise<void>;
|
|
64
|
-
openAndPush<T extends keyof UIRegistry>(viewClass: T, group: string, args?:
|
|
50
|
+
openAndPush<T extends keyof UIRegistry>(viewClass: T, group: string, args?: UIOpenConfig): Promise<InstanceType<UIRegistry[T]>>;
|
|
65
51
|
closeAndPop(group: string, destroy?: boolean): Promise<void>;
|
|
66
52
|
clearStack(group: string, destroy?: boolean): void;
|
|
67
53
|
closeAll(destroy?: boolean): void;
|
|
68
|
-
protected abstract _internalOpen(viewKey: string, args?:
|
|
54
|
+
protected abstract _internalOpen(viewKey: string, args?: UIOpenConfig): Promise<ICocosView>;
|
|
69
55
|
protected abstract _internalClose(viewKey: string | IView, destory?: boolean): Promise<void>;
|
|
70
|
-
protected abstract _internalOpenAndPush(viewKey: string, group: string, args?:
|
|
56
|
+
protected abstract _internalOpenAndPush(viewKey: string, group: string, args?: UIOpenConfig): Promise<ICocosView>;
|
|
71
57
|
protected abstract _internalCloseAndPop(group: string, destroy?: boolean): Promise<void>;
|
|
72
58
|
protected abstract _internalClearStack(group: string, destroy?: boolean): void;
|
|
73
59
|
protected abstract _internalGetTopView(): ICocosView | undefined;
|
|
@@ -91,7 +77,7 @@ export declare class UIManager extends CcocosUIManager {
|
|
|
91
77
|
/**
|
|
92
78
|
* 设置遮罩配置
|
|
93
79
|
*/
|
|
94
|
-
setMaskConfig(options:
|
|
80
|
+
setMaskConfig(options: UIMaskConfig): void;
|
|
95
81
|
/**
|
|
96
82
|
* 设置等待视图配置
|
|
97
83
|
*/
|
|
@@ -121,6 +107,12 @@ export declare class UIManager extends CcocosUIManager {
|
|
|
121
107
|
* 获取所有活跃的视图节点(排除遮罩节点)
|
|
122
108
|
*/
|
|
123
109
|
private _getActiveViews;
|
|
110
|
+
/**
|
|
111
|
+
* 从给定的Node对象上获得IView类型的脚本
|
|
112
|
+
* @param target
|
|
113
|
+
* @returns
|
|
114
|
+
*/
|
|
115
|
+
private _getIViewFromNode;
|
|
124
116
|
/**
|
|
125
117
|
* 通过prefab创建Node对象
|
|
126
118
|
* @param args
|
|
@@ -165,9 +157,9 @@ export declare class UIManager extends CcocosUIManager {
|
|
|
165
157
|
protected _internalGetTopView(): ICocosView | undefined;
|
|
166
158
|
private _load;
|
|
167
159
|
private _loadInternal;
|
|
168
|
-
protected _internalOpen(viewKey: string, options?:
|
|
160
|
+
protected _internalOpen(viewKey: string, options?: UIOpenConfig): Promise<ICocosView>;
|
|
169
161
|
protected _internalClose(viewKeyOrInstance: string | IView, destroy?: boolean): Promise<void>;
|
|
170
|
-
protected _internalOpenAndPush(viewKey: string, group: string, options?:
|
|
162
|
+
protected _internalOpenAndPush(viewKey: string, group: string, options?: UIOpenConfig): Promise<ICocosView>;
|
|
171
163
|
protected _internalCloseAndPop(group: string, destroy?: boolean): Promise<void>;
|
|
172
164
|
/**
|
|
173
165
|
* 移除视图
|
package/dist/libs/UIManager.js
CHANGED
|
@@ -98,11 +98,11 @@ class UIManager extends CcocosUIManager {
|
|
|
98
98
|
this._loadingPromises = new Map();
|
|
99
99
|
this._lruOrder = [];
|
|
100
100
|
this._preloadedViews = new Set();
|
|
101
|
-
this._maskOptions = {
|
|
101
|
+
this._maskOptions = {};
|
|
102
102
|
this._loadingConfig = { enabled: true, delay: 200, minShowTime: 500 };
|
|
103
103
|
this._cacheConfig = { maxSize: 10, enableLRU: true };
|
|
104
104
|
this._preloadConfig = { views: [], delay: 1000 };
|
|
105
|
-
this._openOptions = { showLoading: true,
|
|
105
|
+
this._openOptions = { showLoading: true, clickToCloseMask: true };
|
|
106
106
|
this._setupMaskClickHandler();
|
|
107
107
|
this._startPreload();
|
|
108
108
|
}
|
|
@@ -184,6 +184,31 @@ class UIManager extends CcocosUIManager {
|
|
|
184
184
|
_getActiveViews() {
|
|
185
185
|
return UIRoot.children.filter(child => child !== _uiMask && child.name !== '__UIMask__');
|
|
186
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* 从给定的Node对象上获得IView类型的脚本
|
|
189
|
+
* @param target
|
|
190
|
+
* @returns
|
|
191
|
+
*/
|
|
192
|
+
_getIViewFromNode(target) {
|
|
193
|
+
const comps = target.components;
|
|
194
|
+
for (let i = 0; i < comps.length; i++) {
|
|
195
|
+
const comp = comps[i];
|
|
196
|
+
if ("__isIView__" in comp && comp.__isIView__) {
|
|
197
|
+
/**
|
|
198
|
+
* 这里需要注意:
|
|
199
|
+
* 1、_view2group中存储的是通过getComponent获取的。
|
|
200
|
+
* 2、这里是通过所node.components获取的。
|
|
201
|
+
* 3、这俩种方式获得的引用可能是不同的(_view2group.get(comp) == undefined)
|
|
202
|
+
* 4、所以这里需要通过comp.constructor来获取视图类型,然后通过getComponent获取引用,确保一致。
|
|
203
|
+
* 5、但我选择了_view2group使用node当作key,这样更稳定。
|
|
204
|
+
*/
|
|
205
|
+
// const viewType = comp.constructor as new () => ICocosView;
|
|
206
|
+
// return target.getComponent(viewType) as ICocosView;
|
|
207
|
+
return comp;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
console.warn(`No view found in ${target.name}`);
|
|
211
|
+
}
|
|
187
212
|
/**
|
|
188
213
|
* 通过prefab创建Node对象
|
|
189
214
|
* @param args
|
|
@@ -275,13 +300,14 @@ class UIManager extends CcocosUIManager {
|
|
|
275
300
|
*/
|
|
276
301
|
_setupMaskClickHandler() {
|
|
277
302
|
UIMask.on(Node.EventType.TOUCH_END, (event) => {
|
|
278
|
-
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
303
|
+
var _a;
|
|
281
304
|
const view = this._internalGetTopView();
|
|
282
305
|
if (!view) {
|
|
283
306
|
return;
|
|
284
307
|
}
|
|
308
|
+
if (!((_a = view.__config__) === null || _a === void 0 ? void 0 : _a.clickToCloseMask)) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
285
311
|
const group = this._view2group.get(view.node);
|
|
286
312
|
if (group && group.trim() != "") {
|
|
287
313
|
// 栈式UI:调用 _internalCloseAndPop 来处理返回逻辑
|
|
@@ -387,25 +413,7 @@ class UIManager extends CcocosUIManager {
|
|
|
387
413
|
}
|
|
388
414
|
// 获取最后一个视图节点(最顶层)
|
|
389
415
|
const target = activeViews[activeViews.length - 1];
|
|
390
|
-
|
|
391
|
-
for (let i = 0; i < comps.length; i++) {
|
|
392
|
-
const comp = comps[i];
|
|
393
|
-
if ("__isIView__" in comp && comp.__isIView__) {
|
|
394
|
-
/**
|
|
395
|
-
* 这里需要注意:
|
|
396
|
-
* 1、_view2group中存储的是通过getComponent获取的。
|
|
397
|
-
* 2、这里是通过所node.components获取的。
|
|
398
|
-
* 3、这俩种方式获得的引用可能是不同的(_view2group.get(comp) == undefined)
|
|
399
|
-
* 4、所以这里需要通过comp.constructor来获取视图类型,然后通过getComponent获取引用,确保一致。
|
|
400
|
-
* 5、但我选择了_view2group使用node当作key,这样更稳定。
|
|
401
|
-
*/
|
|
402
|
-
// const viewType = comp.constructor as new () => ICocosView;
|
|
403
|
-
// return target.getComponent(viewType) as ICocosView;
|
|
404
|
-
return comp;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
console.warn(`No view found in ${target.name}`);
|
|
408
|
-
return undefined;
|
|
416
|
+
return this._getIViewFromNode(target);
|
|
409
417
|
}
|
|
410
418
|
//----------------------------------------------------------
|
|
411
419
|
_load(viewKey) {
|
|
@@ -455,6 +463,7 @@ class UIManager extends CcocosUIManager {
|
|
|
455
463
|
const view = yield this._load(viewKey);
|
|
456
464
|
addChild(view.node);
|
|
457
465
|
this._adjustMaskLayer();
|
|
466
|
+
view.__config__ = op;
|
|
458
467
|
// 先执行onEnter初始化,再播放动画
|
|
459
468
|
view.onEnter(op.args);
|
|
460
469
|
// 播放打开动画
|
|
@@ -513,6 +522,7 @@ class UIManager extends CcocosUIManager {
|
|
|
513
522
|
stack.push(view);
|
|
514
523
|
addChild(view.node);
|
|
515
524
|
this._adjustMaskLayer();
|
|
525
|
+
view.__config__ = op;
|
|
516
526
|
// 先执行onEnter初始化,再播放动画
|
|
517
527
|
view.onEnter(op.args);
|
|
518
528
|
// 播放打开动画
|
|
@@ -622,6 +632,13 @@ class UIManager extends CcocosUIManager {
|
|
|
622
632
|
console.warn(`No stack found for group ${group}`);
|
|
623
633
|
return;
|
|
624
634
|
}
|
|
635
|
+
// forEach 方法会按插入顺序遍历所有 初始存在的元素,即使元素在遍历过程中被删除,也不会影响剩余元素的遍历(已删除的元素不会被重复遍历,但未遍历的元素仍会被处理)。
|
|
636
|
+
// 因此可直接在回调中判断并删除目标元素。
|
|
637
|
+
this._view2group.forEach((value, key, map) => {
|
|
638
|
+
if (value === group) {
|
|
639
|
+
map.delete(key);
|
|
640
|
+
}
|
|
641
|
+
});
|
|
625
642
|
// 清空栈中所有视图,不播放动画
|
|
626
643
|
while (stack.length > 0) {
|
|
627
644
|
const view = stack.pop();
|
|
@@ -629,9 +646,6 @@ class UIManager extends CcocosUIManager {
|
|
|
629
646
|
this._remove(view, destroy, true);
|
|
630
647
|
}
|
|
631
648
|
}
|
|
632
|
-
for (const view of this._view2group.keys()) {
|
|
633
|
-
this._view2group.delete(view);
|
|
634
|
-
}
|
|
635
649
|
// 调整遮罩层级
|
|
636
650
|
this._adjustMaskLayer();
|
|
637
651
|
}
|
|
@@ -640,19 +654,15 @@ class UIManager extends CcocosUIManager {
|
|
|
640
654
|
*/
|
|
641
655
|
_internalCloseAll(destroy) {
|
|
642
656
|
const activeViews = this._getActiveViews();
|
|
643
|
-
for (const
|
|
644
|
-
const
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
this._remove(comp, destroy, true);
|
|
649
|
-
break;
|
|
650
|
-
}
|
|
657
|
+
for (const target of activeViews) {
|
|
658
|
+
const comp = this._getIViewFromNode(target);
|
|
659
|
+
if (comp) {
|
|
660
|
+
this._remove(comp, destroy, true);
|
|
661
|
+
break;
|
|
651
662
|
}
|
|
652
663
|
}
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
}
|
|
664
|
+
// 情况所有UI组引用
|
|
665
|
+
this._view2group.clear();
|
|
656
666
|
// 清空所有栈
|
|
657
667
|
this._groupStacks.clear();
|
|
658
668
|
// 调整遮罩
|
package/dist/mflow-tools.zip
CHANGED
|
Binary file
|
package/package.json
CHANGED