dzkcc-mflow 0.0.1 → 0.0.2
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/App.d.ts +22 -22
- package/dist/App.js +27 -27
- package/dist/_virtual/_tslib.js +30 -30
- package/dist/core/Api.d.ts +53 -53
- package/dist/core/Core.d.ts +18 -18
- package/dist/core/Core.js +78 -78
- package/dist/core/Decorators.d.ts +7 -7
- package/dist/core/Decorators.js +99 -99
- package/dist/core/ICocosResManager.d.ts +11 -11
- package/dist/core/ServiceLocator.d.ts +7 -7
- package/dist/core/ServiceLocator.js +31 -31
- package/dist/core/index.d.ts +5 -5
- package/dist/libs/BaseView.d.ts +21 -21
- package/dist/libs/BaseView.js +78 -78
- package/dist/libs/Broadcaster.d.ts +101 -101
- package/dist/libs/Broadcaster.js +240 -240
- package/dist/libs/CocosCore.d.ts +5 -5
- package/dist/libs/CocosCore.js +16 -16
- package/dist/libs/ResLoader.d.ts +10 -10
- package/dist/libs/ResLoader.js +76 -74
- package/dist/libs/UIManager.d.ts +34 -34
- package/dist/libs/UIManager.js +251 -251
- package/dist/libs/UIRoot.d.ts +4 -4
- package/dist/libs/UIRoot.js +4 -4
- package/dist/libs/index.d.ts +6 -6
- package/dist/mflow-tools.zip +0 -0
- package/dist/utils/ArrayExt.d.ts +67 -67
- package/dist/utils/ArrayExt.js +298 -298
- package/dist/utils/ArrayUtil.d.ts +41 -41
- package/dist/utils/ArrayUtil.js +93 -93
- package/dist/utils/CameraUtil.d.ts +10 -10
- package/dist/utils/CameraUtil.js +23 -23
- package/dist/utils/ImageUtil.d.ts +33 -33
- package/dist/utils/ImageUtil.js +92 -92
- package/dist/utils/MathUtil.d.ts +213 -213
- package/dist/utils/MathUtil.js +435 -435
- package/dist/utils/ObjectUtil.d.ts +24 -24
- package/dist/utils/ObjectUtil.js +58 -58
- package/dist/utils/PlatformUtil.d.ts +9 -9
- package/dist/utils/PlatformUtil.js +27 -27
- package/dist/utils/RotateUtil.d.ts +30 -30
- package/dist/utils/RotateUtil.js +63 -63
- package/dist/utils/StringUtil.d.ts +107 -107
- package/dist/utils/StringUtil.js +249 -249
- package/dist/utils/TimeUtil.d.ts +31 -31
- package/dist/utils/TimeUtil.js +85 -85
- package/dist/utils/index.d.ts +9 -9
- package/package.json +1 -1
package/dist/core/Decorators.js
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
1
|
import { ServiceLocator } from './ServiceLocator.js';
|
|
2
2
|
import 'reflect-metadata';
|
|
3
3
|
|
|
4
|
-
// 通过symbol实现接口标识
|
|
5
|
-
const interfaceSymbols = new Map();
|
|
6
|
-
// 装饰器,方便自动注册manager和model
|
|
7
|
-
const modelRegistry = [];
|
|
8
|
-
const managerRegistry = [];
|
|
9
|
-
function getInterface(ctor) {
|
|
10
|
-
let sym = interfaceSymbols.get(ctor);
|
|
11
|
-
if (!sym)
|
|
12
|
-
throw new Error(`Manager ${ctor.name} not registered! Please use @manager() decorator to register it.`);
|
|
13
|
-
return sym;
|
|
14
|
-
}
|
|
15
|
-
function manager() {
|
|
16
|
-
return function (ctor) {
|
|
17
|
-
// 自动生成并注册Symbol
|
|
18
|
-
if (!interfaceSymbols.has(ctor)) {
|
|
19
|
-
interfaceSymbols.set(ctor, Symbol(ctor.name));
|
|
20
|
-
}
|
|
21
|
-
managerRegistry.push(ctor);
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function model() {
|
|
25
|
-
return function (ctor) {
|
|
26
|
-
modelRegistry.push(ctor);
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function autoRegister(core) {
|
|
30
|
-
modelRegistry.forEach(ctor => {
|
|
31
|
-
console.log(`${ctor.name} initialize`);
|
|
32
|
-
core.regModel(new ctor());
|
|
33
|
-
});
|
|
34
|
-
managerRegistry.forEach(ctor => {
|
|
35
|
-
console.log(`${ctor.name} initialize`);
|
|
36
|
-
core.regManager(new ctor());
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
// 依赖注入
|
|
40
|
-
// ------------------------------------------------------------------------------------
|
|
41
|
-
const INJECTED_PROPERTIES_KEY = 'injectedProperties';
|
|
42
|
-
// 因为明文定义的属性会覆盖injectManager(通过defineProperty定义)注入的属性,所以需要在编译时删除明文定义的属性
|
|
43
|
-
function CleanInjectedProperties(constructor) {
|
|
44
|
-
return class extends constructor {
|
|
45
|
-
constructor(...args) {
|
|
46
|
-
super(...args);
|
|
47
|
-
// 递归收集当前类及其所有父类的注入属性
|
|
48
|
-
const collectInjectedProperties = (klass) => {
|
|
49
|
-
if (klass === null || klass === Object)
|
|
50
|
-
return [];
|
|
51
|
-
const parentProperties = collectInjectedProperties(Object.getPrototypeOf(klass));
|
|
52
|
-
const currentProperties = Reflect.getMetadata(INJECTED_PROPERTIES_KEY, klass) || [];
|
|
53
|
-
// const currentProperties :any[] = []
|
|
54
|
-
return [...parentProperties, ...currentProperties];
|
|
55
|
-
};
|
|
56
|
-
// 合并并去重属性名
|
|
57
|
-
const injectedProperties = [
|
|
58
|
-
...new Set(collectInjectedProperties(constructor))
|
|
59
|
-
];
|
|
60
|
-
// 删除实例上的所有注入属性
|
|
61
|
-
injectedProperties.forEach(prop => {
|
|
62
|
-
if (this.hasOwnProperty(prop)) {
|
|
63
|
-
delete this[prop];
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
function managedWithClean() {
|
|
70
|
-
return function (ctor) {
|
|
71
|
-
// 先执行清理逻辑
|
|
72
|
-
const decoratedCtor = CleanInjectedProperties(ctor);
|
|
73
|
-
// 后执行注册逻辑
|
|
74
|
-
manager()(decoratedCtor);
|
|
75
|
-
return decoratedCtor;
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
// 懒加载依赖注入manager
|
|
79
|
-
function injectManager(sym) {
|
|
80
|
-
return function (target, prop) {
|
|
81
|
-
const injectionKey = Symbol.for(prop);
|
|
82
|
-
Object.defineProperty(target, prop, {
|
|
83
|
-
get: function () {
|
|
84
|
-
console.log(`[属性访问] 触发getter:${injectionKey.toString()}`);
|
|
85
|
-
if (!this[injectionKey]) {
|
|
86
|
-
this[injectionKey] = ServiceLocator.getService('core').getManager(sym);
|
|
87
|
-
}
|
|
88
|
-
return this[injectionKey];
|
|
89
|
-
},
|
|
90
|
-
set: function (val) {
|
|
91
|
-
throw new Error('InjectManager property is read-only');
|
|
92
|
-
},
|
|
93
|
-
enumerable: true,
|
|
94
|
-
configurable: false // 禁止修改属性描述符
|
|
95
|
-
});
|
|
96
|
-
// 2. 将属性名记录到元数据
|
|
97
|
-
const injectedProperties = Reflect.getMetadata(INJECTED_PROPERTIES_KEY, target.constructor) || [];
|
|
98
|
-
if (!injectedProperties.includes(prop)) {
|
|
99
|
-
injectedProperties.push(prop);
|
|
100
|
-
}
|
|
101
|
-
Reflect.defineMetadata(INJECTED_PROPERTIES_KEY, injectedProperties, target.constructor);
|
|
102
|
-
};
|
|
4
|
+
// 通过symbol实现接口标识
|
|
5
|
+
const interfaceSymbols = new Map();
|
|
6
|
+
// 装饰器,方便自动注册manager和model
|
|
7
|
+
const modelRegistry = [];
|
|
8
|
+
const managerRegistry = [];
|
|
9
|
+
function getInterface(ctor) {
|
|
10
|
+
let sym = interfaceSymbols.get(ctor);
|
|
11
|
+
if (!sym)
|
|
12
|
+
throw new Error(`Manager ${ctor.name} not registered! Please use @manager() decorator to register it.`);
|
|
13
|
+
return sym;
|
|
14
|
+
}
|
|
15
|
+
function manager() {
|
|
16
|
+
return function (ctor) {
|
|
17
|
+
// 自动生成并注册Symbol
|
|
18
|
+
if (!interfaceSymbols.has(ctor)) {
|
|
19
|
+
interfaceSymbols.set(ctor, Symbol(ctor.name));
|
|
20
|
+
}
|
|
21
|
+
managerRegistry.push(ctor);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function model() {
|
|
25
|
+
return function (ctor) {
|
|
26
|
+
modelRegistry.push(ctor);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function autoRegister(core) {
|
|
30
|
+
modelRegistry.forEach(ctor => {
|
|
31
|
+
console.log(`${ctor.name} initialize`);
|
|
32
|
+
core.regModel(new ctor());
|
|
33
|
+
});
|
|
34
|
+
managerRegistry.forEach(ctor => {
|
|
35
|
+
console.log(`${ctor.name} initialize`);
|
|
36
|
+
core.regManager(new ctor());
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// 依赖注入
|
|
40
|
+
// ------------------------------------------------------------------------------------
|
|
41
|
+
const INJECTED_PROPERTIES_KEY = 'injectedProperties';
|
|
42
|
+
// 因为明文定义的属性会覆盖injectManager(通过defineProperty定义)注入的属性,所以需要在编译时删除明文定义的属性
|
|
43
|
+
function CleanInjectedProperties(constructor) {
|
|
44
|
+
return class extends constructor {
|
|
45
|
+
constructor(...args) {
|
|
46
|
+
super(...args);
|
|
47
|
+
// 递归收集当前类及其所有父类的注入属性
|
|
48
|
+
const collectInjectedProperties = (klass) => {
|
|
49
|
+
if (klass === null || klass === Object)
|
|
50
|
+
return [];
|
|
51
|
+
const parentProperties = collectInjectedProperties(Object.getPrototypeOf(klass));
|
|
52
|
+
const currentProperties = Reflect.getMetadata(INJECTED_PROPERTIES_KEY, klass) || [];
|
|
53
|
+
// const currentProperties :any[] = []
|
|
54
|
+
return [...parentProperties, ...currentProperties];
|
|
55
|
+
};
|
|
56
|
+
// 合并并去重属性名
|
|
57
|
+
const injectedProperties = [
|
|
58
|
+
...new Set(collectInjectedProperties(constructor))
|
|
59
|
+
];
|
|
60
|
+
// 删除实例上的所有注入属性
|
|
61
|
+
injectedProperties.forEach(prop => {
|
|
62
|
+
if (this.hasOwnProperty(prop)) {
|
|
63
|
+
delete this[prop];
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function managedWithClean() {
|
|
70
|
+
return function (ctor) {
|
|
71
|
+
// 先执行清理逻辑
|
|
72
|
+
const decoratedCtor = CleanInjectedProperties(ctor);
|
|
73
|
+
// 后执行注册逻辑
|
|
74
|
+
manager()(decoratedCtor);
|
|
75
|
+
return decoratedCtor;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// 懒加载依赖注入manager
|
|
79
|
+
function injectManager(sym) {
|
|
80
|
+
return function (target, prop) {
|
|
81
|
+
const injectionKey = Symbol.for(prop);
|
|
82
|
+
Object.defineProperty(target, prop, {
|
|
83
|
+
get: function () {
|
|
84
|
+
console.log(`[属性访问] 触发getter:${injectionKey.toString()}`);
|
|
85
|
+
if (!this[injectionKey]) {
|
|
86
|
+
this[injectionKey] = ServiceLocator.getService('core').getManager(sym);
|
|
87
|
+
}
|
|
88
|
+
return this[injectionKey];
|
|
89
|
+
},
|
|
90
|
+
set: function (val) {
|
|
91
|
+
throw new Error('InjectManager property is read-only');
|
|
92
|
+
},
|
|
93
|
+
enumerable: true,
|
|
94
|
+
configurable: false // 禁止修改属性描述符
|
|
95
|
+
});
|
|
96
|
+
// 2. 将属性名记录到元数据
|
|
97
|
+
const injectedProperties = Reflect.getMetadata(INJECTED_PROPERTIES_KEY, target.constructor) || [];
|
|
98
|
+
if (!injectedProperties.includes(prop)) {
|
|
99
|
+
injectedProperties.push(prop);
|
|
100
|
+
}
|
|
101
|
+
Reflect.defineMetadata(INJECTED_PROPERTIES_KEY, injectedProperties, target.constructor);
|
|
102
|
+
};
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
export { autoRegister, getInterface, injectManager, managedWithClean, model };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IResManager } from "./Api";
|
|
2
|
-
import { Asset, Prefab, sp, Sprite, SpriteFrame } from "cc";
|
|
3
|
-
export type AssetType<T> = new (...args: any[]) => T;
|
|
4
|
-
export interface ICocosResManager extends IResManager {
|
|
5
|
-
loadAsset<T extends Asset>(path: string, type: AssetType<T>, nameOrUrl?: string): Promise<T>;
|
|
6
|
-
loadPrefab(path: string, nameOrUrl?: string): Promise<Prefab>;
|
|
7
|
-
loadSpriteFrame(ref: Sprite, path: string, nameOrUrl?: string): Promise<SpriteFrame>;
|
|
8
|
-
loadSpine(ref: sp.Skeleton, path: string, nameOrUrl?: string): Promise<sp.SkeletonData>;
|
|
9
|
-
release(asset: Asset): void;
|
|
10
|
-
release(path: string, type?: AssetType<Asset>, nameOrUrl?: string): void;
|
|
11
|
-
}
|
|
1
|
+
import { IResManager } from "./Api";
|
|
2
|
+
import { Asset, Prefab, sp, Sprite, SpriteFrame } from "cc";
|
|
3
|
+
export type AssetType<T> = new (...args: any[]) => T;
|
|
4
|
+
export interface ICocosResManager extends IResManager {
|
|
5
|
+
loadAsset<T extends Asset>(path: string, type: AssetType<T>, nameOrUrl?: string): Promise<T>;
|
|
6
|
+
loadPrefab(path: string, nameOrUrl?: string): Promise<Prefab>;
|
|
7
|
+
loadSpriteFrame(ref: Sprite, path: string, nameOrUrl?: string): Promise<SpriteFrame>;
|
|
8
|
+
loadSpine(ref: sp.Skeleton, path: string, nameOrUrl?: string): Promise<sp.SkeletonData>;
|
|
9
|
+
release(asset: Asset): void;
|
|
10
|
+
release(path: string, type?: AssetType<Asset>, nameOrUrl?: string): void;
|
|
11
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare class ServiceLocator {
|
|
2
|
-
private static services;
|
|
3
|
-
static regService<T>(key: string, provider: T): void;
|
|
4
|
-
static getService<T>(key: string): T;
|
|
5
|
-
static remove(key: string): void;
|
|
6
|
-
static clear(): void;
|
|
7
|
-
}
|
|
1
|
+
export declare class ServiceLocator {
|
|
2
|
+
private static services;
|
|
3
|
+
static regService<T>(key: string, provider: T): void;
|
|
4
|
+
static getService<T>(key: string): T;
|
|
5
|
+
static remove(key: string): void;
|
|
6
|
+
static clear(): void;
|
|
7
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
//ServiceLocator:管理跨领域基础服务
|
|
2
|
-
class ServiceLocator {
|
|
3
|
-
static regService(key, provider) {
|
|
4
|
-
if (typeof provider === 'function') {
|
|
5
|
-
// 注册工厂函数(延迟执行)
|
|
6
|
-
this.services.set(key, { factory: provider });
|
|
7
|
-
}
|
|
8
|
-
else {
|
|
9
|
-
// 直接注册实例
|
|
10
|
-
this.services.set(key, { factory: () => provider, instance: provider });
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
static getService(key) {
|
|
14
|
-
const entry = this.services.get(key);
|
|
15
|
-
if (!entry)
|
|
16
|
-
throw new Error(`Service ${key} not registered!`);
|
|
17
|
-
// 单例模式:若已有实例,直接返回
|
|
18
|
-
if (entry.instance)
|
|
19
|
-
return entry.instance;
|
|
20
|
-
// 执行工厂函数,创建实例并缓存
|
|
21
|
-
const instance = entry.factory();
|
|
22
|
-
entry.instance = instance; // 缓存实例(单例)
|
|
23
|
-
return instance;
|
|
24
|
-
}
|
|
25
|
-
static remove(key) {
|
|
26
|
-
this.services.delete(key);
|
|
27
|
-
}
|
|
28
|
-
static clear() {
|
|
29
|
-
this.services.clear();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
//ServiceLocator:管理跨领域基础服务
|
|
2
|
+
class ServiceLocator {
|
|
3
|
+
static regService(key, provider) {
|
|
4
|
+
if (typeof provider === 'function') {
|
|
5
|
+
// 注册工厂函数(延迟执行)
|
|
6
|
+
this.services.set(key, { factory: provider });
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
// 直接注册实例
|
|
10
|
+
this.services.set(key, { factory: () => provider, instance: provider });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
static getService(key) {
|
|
14
|
+
const entry = this.services.get(key);
|
|
15
|
+
if (!entry)
|
|
16
|
+
throw new Error(`Service ${key} not registered!`);
|
|
17
|
+
// 单例模式:若已有实例,直接返回
|
|
18
|
+
if (entry.instance)
|
|
19
|
+
return entry.instance;
|
|
20
|
+
// 执行工厂函数,创建实例并缓存
|
|
21
|
+
const instance = entry.factory();
|
|
22
|
+
entry.instance = instance; // 缓存实例(单例)
|
|
23
|
+
return instance;
|
|
24
|
+
}
|
|
25
|
+
static remove(key) {
|
|
26
|
+
this.services.delete(key);
|
|
27
|
+
}
|
|
28
|
+
static clear() {
|
|
29
|
+
this.services.clear();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
32
|
ServiceLocator.services = new Map();
|
|
33
33
|
|
|
34
34
|
export { ServiceLocator };
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './Core';
|
|
2
|
-
export * from './Api';
|
|
3
|
-
export * from './Decorators';
|
|
4
|
-
export * from './ServiceLocator';
|
|
5
|
-
export * from './ICocosResManager';
|
|
1
|
+
export * from './Core';
|
|
2
|
+
export * from './Api';
|
|
3
|
+
export * from './Decorators';
|
|
4
|
+
export * from './ServiceLocator';
|
|
5
|
+
export * from './ICocosResManager';
|
package/dist/libs/BaseView.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { Component } from 'cc';
|
|
2
|
-
import { IView, IManager, IModel, IEventManager, ICocosResManager } from '../core';
|
|
3
|
-
export declare abstract class BaseView extends Component implements IView {
|
|
4
|
-
/** @internal */
|
|
5
|
-
private readonly __isIView__;
|
|
6
|
-
/** @internal */
|
|
7
|
-
private __group__;
|
|
8
|
-
private _eventProxy?;
|
|
9
|
-
private _eventHandlers;
|
|
10
|
-
protected get event(): IEventManager;
|
|
11
|
-
private _loaderProxy?;
|
|
12
|
-
private _loaderHandlers;
|
|
13
|
-
protected get res(): ICocosResManager;
|
|
14
|
-
abstract onPause(): void;
|
|
15
|
-
abstract onResume(): void;
|
|
16
|
-
abstract onEnter(args?: any): void;
|
|
17
|
-
onExit(): void;
|
|
18
|
-
protected onDestroy(): void;
|
|
19
|
-
protected getManager<T extends IManager>(ctor: new () => T): T;
|
|
20
|
-
protected getModel<T extends IModel>(ctor: new () => T): T;
|
|
21
|
-
}
|
|
1
|
+
import { Component } from 'cc';
|
|
2
|
+
import { IView, IManager, IModel, IEventManager, ICocosResManager } from '../core';
|
|
3
|
+
export declare abstract class BaseView extends Component implements IView {
|
|
4
|
+
/** @internal */
|
|
5
|
+
private readonly __isIView__;
|
|
6
|
+
/** @internal */
|
|
7
|
+
private __group__;
|
|
8
|
+
private _eventProxy?;
|
|
9
|
+
private _eventHandlers;
|
|
10
|
+
protected get event(): IEventManager;
|
|
11
|
+
private _loaderProxy?;
|
|
12
|
+
private _loaderHandlers;
|
|
13
|
+
protected get res(): ICocosResManager;
|
|
14
|
+
abstract onPause(): void;
|
|
15
|
+
abstract onResume(): void;
|
|
16
|
+
abstract onEnter(args?: any): void;
|
|
17
|
+
onExit(): void;
|
|
18
|
+
protected onDestroy(): void;
|
|
19
|
+
protected getManager<T extends IManager>(ctor: new () => T): T;
|
|
20
|
+
protected getModel<T extends IModel>(ctor: new () => T): T;
|
|
21
|
+
}
|
package/dist/libs/BaseView.js
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
1
|
import { _decorator, Component } from 'cc';
|
|
2
2
|
|
|
3
|
-
const { ccclass, property } = _decorator;
|
|
4
|
-
class BaseView extends Component {
|
|
5
|
-
constructor() {
|
|
6
|
-
super(...arguments);
|
|
7
|
-
/** @internal */
|
|
8
|
-
this.__isIView__ = true;
|
|
9
|
-
/** @internal */
|
|
10
|
-
this.__group__ = undefined;
|
|
11
|
-
this._eventHandlers = [];
|
|
12
|
-
this._loaderHandlers = [];
|
|
13
|
-
}
|
|
14
|
-
get event() {
|
|
15
|
-
if (!this._eventProxy) {
|
|
16
|
-
this._eventProxy = new Proxy(mf.event, {
|
|
17
|
-
get: (target, prop) => {
|
|
18
|
-
if (prop === 'on' || prop === 'once') {
|
|
19
|
-
return (keyOrHandler, listener, context, args) => {
|
|
20
|
-
const handlers = Array.isArray(keyOrHandler) ? keyOrHandler : [keyOrHandler];
|
|
21
|
-
handlers.forEach(handler => {
|
|
22
|
-
if (typeof handler === 'object') {
|
|
23
|
-
this._eventHandlers.push({ key: handler.key, listener: handler.listener });
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
this._eventHandlers.push({ key: keyOrHandler, listener: listener });
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
return Reflect.get(target, prop).apply(target, [keyOrHandler, listener, context, args]);
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return Reflect.get(target, prop);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
return this._eventProxy;
|
|
37
|
-
}
|
|
38
|
-
get res() {
|
|
39
|
-
if (!this._loaderProxy) {
|
|
40
|
-
this._loaderProxy = new Proxy(mf.res, {
|
|
41
|
-
get: (target, prop) => {
|
|
42
|
-
//劫持所有load相关方法
|
|
43
|
-
if (prop.startsWith('load')) {
|
|
44
|
-
return (path, type, nameOrUrl) => {
|
|
45
|
-
return Reflect.get(target, prop).apply(target, [path, type, nameOrUrl]).then((asset) => {
|
|
46
|
-
this._loaderHandlers.push({ path, asset });
|
|
47
|
-
return asset;
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return Reflect.get(target, prop);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
return this._loaderProxy;
|
|
56
|
-
}
|
|
57
|
-
onExit() {
|
|
58
|
-
// 自动清理所有事件监听
|
|
59
|
-
this._eventHandlers.forEach(({ key, listener }) => {
|
|
60
|
-
//@ts-ignore
|
|
61
|
-
mf.event.off(key, listener);
|
|
62
|
-
});
|
|
63
|
-
this._eventHandlers = [];
|
|
64
|
-
}
|
|
65
|
-
onDestroy() {
|
|
66
|
-
// 自动清理加载的资源
|
|
67
|
-
this._loaderHandlers.forEach(({ path, asset }) => {
|
|
68
|
-
mf.res.release(path, asset.constructor);
|
|
69
|
-
// mf.res.release(asset);
|
|
70
|
-
});
|
|
71
|
-
this._loaderHandlers = [];
|
|
72
|
-
}
|
|
73
|
-
getManager(ctor) {
|
|
74
|
-
// 业务组件避免直接依赖底层服务定位器,所以使用app.core统一对外接口,方便后续架构演进
|
|
75
|
-
return mf.core.getManager(ctor);
|
|
76
|
-
}
|
|
77
|
-
getModel(ctor) {
|
|
78
|
-
// 业务组件避免直接依赖底层服务定位器,所以使用app.core统一对外接口,方便后续架构演进
|
|
79
|
-
return mf.core.getModel(ctor);
|
|
80
|
-
}
|
|
3
|
+
const { ccclass, property } = _decorator;
|
|
4
|
+
class BaseView extends Component {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
/** @internal */
|
|
8
|
+
this.__isIView__ = true;
|
|
9
|
+
/** @internal */
|
|
10
|
+
this.__group__ = undefined;
|
|
11
|
+
this._eventHandlers = [];
|
|
12
|
+
this._loaderHandlers = [];
|
|
13
|
+
}
|
|
14
|
+
get event() {
|
|
15
|
+
if (!this._eventProxy) {
|
|
16
|
+
this._eventProxy = new Proxy(mf.event, {
|
|
17
|
+
get: (target, prop) => {
|
|
18
|
+
if (prop === 'on' || prop === 'once') {
|
|
19
|
+
return (keyOrHandler, listener, context, args) => {
|
|
20
|
+
const handlers = Array.isArray(keyOrHandler) ? keyOrHandler : [keyOrHandler];
|
|
21
|
+
handlers.forEach(handler => {
|
|
22
|
+
if (typeof handler === 'object') {
|
|
23
|
+
this._eventHandlers.push({ key: handler.key, listener: handler.listener });
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this._eventHandlers.push({ key: keyOrHandler, listener: listener });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return Reflect.get(target, prop).apply(target, [keyOrHandler, listener, context, args]);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return Reflect.get(target, prop);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return this._eventProxy;
|
|
37
|
+
}
|
|
38
|
+
get res() {
|
|
39
|
+
if (!this._loaderProxy) {
|
|
40
|
+
this._loaderProxy = new Proxy(mf.res, {
|
|
41
|
+
get: (target, prop) => {
|
|
42
|
+
//劫持所有load相关方法
|
|
43
|
+
if (prop.startsWith('load')) {
|
|
44
|
+
return (path, type, nameOrUrl) => {
|
|
45
|
+
return Reflect.get(target, prop).apply(target, [path, type, nameOrUrl]).then((asset) => {
|
|
46
|
+
this._loaderHandlers.push({ path, asset });
|
|
47
|
+
return asset;
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return Reflect.get(target, prop);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return this._loaderProxy;
|
|
56
|
+
}
|
|
57
|
+
onExit() {
|
|
58
|
+
// 自动清理所有事件监听
|
|
59
|
+
this._eventHandlers.forEach(({ key, listener }) => {
|
|
60
|
+
//@ts-ignore
|
|
61
|
+
mf.event.off(key, listener);
|
|
62
|
+
});
|
|
63
|
+
this._eventHandlers = [];
|
|
64
|
+
}
|
|
65
|
+
onDestroy() {
|
|
66
|
+
// 自动清理加载的资源
|
|
67
|
+
this._loaderHandlers.forEach(({ path, asset }) => {
|
|
68
|
+
mf.res.release(path, asset.constructor);
|
|
69
|
+
// mf.res.release(asset);
|
|
70
|
+
});
|
|
71
|
+
this._loaderHandlers = [];
|
|
72
|
+
}
|
|
73
|
+
getManager(ctor) {
|
|
74
|
+
// 业务组件避免直接依赖底层服务定位器,所以使用app.core统一对外接口,方便后续架构演进
|
|
75
|
+
return mf.core.getManager(ctor);
|
|
76
|
+
}
|
|
77
|
+
getModel(ctor) {
|
|
78
|
+
// 业务组件避免直接依赖底层服务定位器,所以使用app.core统一对外接口,方便后续架构演进
|
|
79
|
+
return mf.core.getModel(ctor);
|
|
80
|
+
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
export { BaseView };
|