@ives_xxz/framework 2.1.34 → 2.1.36
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/manager/FWLayerManager.ts +129 -60
- package/package.json +4 -2
- package/types/FW.d.ts +4 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { FWManager } from
|
|
2
|
-
import { FWQueue } from
|
|
3
|
-
import { FrameworkBase } from
|
|
4
|
-
import { PerformanceMonitor } from
|
|
1
|
+
import { FWManager } from "./FWManager";
|
|
2
|
+
import { FWQueue } from "../utils/FWQueue";
|
|
3
|
+
import { FrameworkBase } from "../FrameworkBase";
|
|
4
|
+
import { PerformanceMonitor } from "../expand/FWDecorator";
|
|
5
5
|
|
|
6
|
-
const ADD_EXTERNAL_REFERENCE: string =
|
|
6
|
+
const ADD_EXTERNAL_REFERENCE: string = "addExternalReference";
|
|
7
7
|
|
|
8
8
|
export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
9
9
|
private resourceManager: FWLayerResourceManager;
|
|
@@ -22,7 +22,7 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
22
22
|
this.createManager = new FWLayerCreateManager();
|
|
23
23
|
this.stackManager = new FWLayerStackManager();
|
|
24
24
|
this.queueManager = new FWLayerQueueManager();
|
|
25
|
-
this.stateManager = new FWLayerStateManager(
|
|
25
|
+
this.stateManager = new FWLayerStateManager();
|
|
26
26
|
this.openManager = new FWLayerOpenManager(
|
|
27
27
|
this.dataManager,
|
|
28
28
|
this.resourceManager,
|
|
@@ -33,35 +33,49 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
33
33
|
);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
openDebug() {
|
|
37
37
|
this.debug = true;
|
|
38
38
|
}
|
|
39
|
+
|
|
40
|
+
isDebug() {
|
|
41
|
+
return this.debug;
|
|
42
|
+
}
|
|
39
43
|
/**
|
|
40
44
|
* 异步打开Layer
|
|
41
45
|
*/
|
|
42
|
-
@PerformanceMonitor(
|
|
46
|
+
@PerformanceMonitor("openAsync")
|
|
43
47
|
async openAsync<Ctr extends FW.LayerController = FW.LayerController>(
|
|
44
48
|
data: FW.LayerOpenArgs,
|
|
45
49
|
): Promise<Ctr> {
|
|
46
|
-
if (this.debug)
|
|
50
|
+
if (this.debug) {
|
|
51
|
+
FW.Log.error(`异步打开Layer ->`, cc.js.getClassName(data.type));
|
|
52
|
+
}
|
|
47
53
|
return this.openManager.openLayerAsync(data) as Promise<Ctr>;
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
/**
|
|
51
57
|
* 同步打开
|
|
52
58
|
*/
|
|
53
|
-
openSync<Ctr extends FW.LayerController = FW.LayerController>(
|
|
54
|
-
|
|
59
|
+
openSync<Ctr extends FW.LayerController = FW.LayerController>(
|
|
60
|
+
data: FW.LayerOpenArgs,
|
|
61
|
+
): Ctr {
|
|
62
|
+
if (this.debug) {
|
|
63
|
+
FW.Log.error(`同步打开Layer ->`, cc.js.getClassName(data.type));
|
|
64
|
+
}
|
|
55
65
|
return this.openManager.openLayerSync(data) as Ctr;
|
|
56
66
|
}
|
|
57
67
|
|
|
58
68
|
/**
|
|
59
69
|
* 显示layer并恢复所有节点事件
|
|
60
70
|
*/
|
|
61
|
-
displayLayer<Ctr extends FW.LayerController = FW.LayerController>(
|
|
71
|
+
displayLayer<Ctr extends FW.LayerController = FW.LayerController>(
|
|
72
|
+
ctr: Ctr,
|
|
73
|
+
): Ctr {
|
|
62
74
|
const layerData = ctr.layerData;
|
|
63
75
|
|
|
64
|
-
if (
|
|
76
|
+
if (
|
|
77
|
+
!this.dataManager.getLayerMap().has(ctr.layerData.controllerConstructor)
|
|
78
|
+
) {
|
|
65
79
|
FW.Log.warn(`display layer failed,layer name : ${layerData.layerName}`);
|
|
66
80
|
return;
|
|
67
81
|
}
|
|
@@ -81,9 +95,13 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
81
95
|
/**
|
|
82
96
|
* 隐藏layer并隐藏所有节点事件
|
|
83
97
|
*/
|
|
84
|
-
hideLayer<Ctr extends FW.LayerController = FW.LayerController>(
|
|
98
|
+
hideLayer<Ctr extends FW.LayerController = FW.LayerController>(
|
|
99
|
+
ctr: Ctr,
|
|
100
|
+
): Ctr {
|
|
85
101
|
const layerData = ctr.layerData;
|
|
86
|
-
if (
|
|
102
|
+
if (
|
|
103
|
+
!this.dataManager.getLayerMap().has(ctr.layerData.controllerConstructor)
|
|
104
|
+
) {
|
|
87
105
|
FW.Log.warn(`hide layer failed,layer name : ${layerData.layerName}`);
|
|
88
106
|
return;
|
|
89
107
|
}
|
|
@@ -127,7 +145,9 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
127
145
|
for (let i = 0; i < count; i++) {
|
|
128
146
|
let layerData = this.stackManager.pop();
|
|
129
147
|
let ctr = layerData.controller;
|
|
130
|
-
if (
|
|
148
|
+
if (
|
|
149
|
+
!this.dataManager.getLayerMap().has(layerData.controllerConstructor)
|
|
150
|
+
) {
|
|
131
151
|
return;
|
|
132
152
|
}
|
|
133
153
|
if (cc.isValid(ctr.layer?.node)) {
|
|
@@ -158,12 +178,20 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
158
178
|
/**
|
|
159
179
|
* 关闭layer
|
|
160
180
|
*/
|
|
161
|
-
async close<Ctr extends FW.LayerController = FW.LayerController>(
|
|
181
|
+
async close<Ctr extends FW.LayerController = FW.LayerController>(
|
|
182
|
+
ctr: Ctr,
|
|
183
|
+
): Promise<Ctr> {
|
|
162
184
|
if (!ctr) return;
|
|
163
185
|
|
|
164
186
|
return FW.Entry.promiseMgr.execute(async (resolve, reject) => {
|
|
165
187
|
let layerData = ctr.layerData;
|
|
166
188
|
|
|
189
|
+
if (this.debug) {
|
|
190
|
+
FW.Log.error(
|
|
191
|
+
`${cc.js.getClassName(layerData?.controllerConstructor)} 关闭Layer}`,
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
|
|
167
195
|
if (cc.isValid(ctr.layer?.node)) {
|
|
168
196
|
this.stateManager.setState(
|
|
169
197
|
ctr.layerData.controllerConstructor,
|
|
@@ -261,7 +289,8 @@ export class FWLayerData<T extends FW.LayerController = FW.LayerController>
|
|
|
261
289
|
class FWLayerDataManager {
|
|
262
290
|
private layerMap: Map<new () => FW.LayerController, FWLayerData> = new Map();
|
|
263
291
|
private layerRegistry: Set<new () => FW.LayerController> = new Set();
|
|
264
|
-
private layerControllerFactory: FWLayerControllerFactory =
|
|
292
|
+
private layerControllerFactory: FWLayerControllerFactory =
|
|
293
|
+
new FWLayerControllerFactory();
|
|
265
294
|
/**
|
|
266
295
|
* 获取已存在的Layer
|
|
267
296
|
*/
|
|
@@ -389,7 +418,7 @@ class FWLayerDataManager {
|
|
|
389
418
|
try {
|
|
390
419
|
cb?.(null);
|
|
391
420
|
} catch (e) {
|
|
392
|
-
FW.Log.error(
|
|
421
|
+
FW.Log.error("External ref update callback error:", e);
|
|
393
422
|
}
|
|
394
423
|
});
|
|
395
424
|
layerData.externalReference.clear();
|
|
@@ -414,7 +443,8 @@ class FWLayerDataManager {
|
|
|
414
443
|
}
|
|
415
444
|
|
|
416
445
|
class FWLayerCreateManager {
|
|
417
|
-
private lifecycleManager: FWLayerLifecycleManager =
|
|
446
|
+
private lifecycleManager: FWLayerLifecycleManager =
|
|
447
|
+
new FWLayerLifecycleManager();
|
|
418
448
|
|
|
419
449
|
/**
|
|
420
450
|
* 创建Layer节点
|
|
@@ -496,7 +526,12 @@ class FWLayerOpenManager {
|
|
|
496
526
|
return proxy as Ctr;
|
|
497
527
|
}
|
|
498
528
|
|
|
499
|
-
if (
|
|
529
|
+
if (
|
|
530
|
+
this.queueManager.handlePopupQueue(
|
|
531
|
+
layerData,
|
|
532
|
+
this.dataManager.getLayerMap(),
|
|
533
|
+
)
|
|
534
|
+
) {
|
|
500
535
|
return undefined;
|
|
501
536
|
}
|
|
502
537
|
|
|
@@ -505,7 +540,9 @@ class FWLayerOpenManager {
|
|
|
505
540
|
return this.asyncGenerationLayer(layerData, data);
|
|
506
541
|
}
|
|
507
542
|
|
|
508
|
-
openLayerSync<Ctr extends FW.LayerController = FW.LayerController>(
|
|
543
|
+
openLayerSync<Ctr extends FW.LayerController = FW.LayerController>(
|
|
544
|
+
data: FW.LayerOpenArgs,
|
|
545
|
+
): Ctr {
|
|
509
546
|
if (!this.validateOpenData(data)) {
|
|
510
547
|
return undefined;
|
|
511
548
|
}
|
|
@@ -526,7 +563,12 @@ class FWLayerOpenManager {
|
|
|
526
563
|
return proxy as Ctr;
|
|
527
564
|
}
|
|
528
565
|
|
|
529
|
-
if (
|
|
566
|
+
if (
|
|
567
|
+
this.queueManager.handlePopupQueue(
|
|
568
|
+
layerData,
|
|
569
|
+
this.dataManager.getLayerMap(),
|
|
570
|
+
)
|
|
571
|
+
) {
|
|
530
572
|
return undefined;
|
|
531
573
|
}
|
|
532
574
|
|
|
@@ -549,10 +591,9 @@ class FWLayerOpenManager {
|
|
|
549
591
|
/**
|
|
550
592
|
* 异步生成Layer
|
|
551
593
|
*/
|
|
552
|
-
private async asyncGenerationLayer<
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
): Promise<Ctr> {
|
|
594
|
+
private async asyncGenerationLayer<
|
|
595
|
+
Ctr extends FW.LayerController = FW.LayerController,
|
|
596
|
+
>(layerData: FWLayerData, data: FW.LayerOpenArgs): Promise<Ctr> {
|
|
556
597
|
try {
|
|
557
598
|
this.stateManager.setState(
|
|
558
599
|
layerData.controllerConstructor,
|
|
@@ -585,10 +626,9 @@ class FWLayerOpenManager {
|
|
|
585
626
|
/**
|
|
586
627
|
* 同步创建Layer
|
|
587
628
|
*/
|
|
588
|
-
private syncGenerationLayer<
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
): Ctr {
|
|
629
|
+
private syncGenerationLayer<
|
|
630
|
+
Ctr extends FW.LayerController = FW.LayerController,
|
|
631
|
+
>(layerData: FWLayerData, data: FW.LayerOpenArgs): Ctr {
|
|
592
632
|
try {
|
|
593
633
|
this.stateManager.setState(
|
|
594
634
|
layerData.controllerConstructor,
|
|
@@ -634,22 +674,29 @@ class FWLayerOpenManager {
|
|
|
634
674
|
|
|
635
675
|
this.createManager.setupLayerLifecycle(layer, layerData.controller);
|
|
636
676
|
|
|
637
|
-
if (
|
|
677
|
+
if (
|
|
678
|
+
layerData.controller.layerType !== FW.SystemDefine.FWLayerType.PERMANENT
|
|
679
|
+
) {
|
|
638
680
|
this.stackManager.push(layerData);
|
|
639
681
|
}
|
|
640
682
|
|
|
641
683
|
this.dataManager.removeFromRegistry(layerData.controllerConstructor);
|
|
642
684
|
|
|
643
|
-
layerData.controllerProxy =
|
|
685
|
+
layerData.controllerProxy =
|
|
686
|
+
this.dataManager.createControllerProxy(layerData);
|
|
644
687
|
|
|
645
688
|
return layerData.controllerProxy as Ctr;
|
|
646
689
|
}
|
|
647
690
|
}
|
|
648
691
|
|
|
649
692
|
class FWLayerResourceManager {
|
|
650
|
-
async loadLayerAsync(
|
|
693
|
+
async loadLayerAsync(
|
|
694
|
+
layerData: FWLayerData,
|
|
695
|
+
): Promise<{ asset: cc.Prefab; uuid: string }> {
|
|
651
696
|
try {
|
|
652
|
-
const res = await FW.Entry.resMgr.loadAssetData<cc.Prefab>(
|
|
697
|
+
const res = await FW.Entry.resMgr.loadAssetData<cc.Prefab>(
|
|
698
|
+
layerData.layerAssetProperty,
|
|
699
|
+
);
|
|
653
700
|
if (!res) return undefined;
|
|
654
701
|
res.user = layerData.layerName;
|
|
655
702
|
res.autoRelease = layerData.controller.autoRelease;
|
|
@@ -664,7 +711,9 @@ class FWLayerResourceManager {
|
|
|
664
711
|
loadLayerSync(layerData: FWLayerData): { asset: cc.Prefab; uuid: string } {
|
|
665
712
|
layerData.layerAssetProperty.bundle =
|
|
666
713
|
layerData.layerAssetProperty.bundle || FW.Entry.bundleName;
|
|
667
|
-
const res = FW.Entry.resMgr.getAssetData<cc.Prefab>(
|
|
714
|
+
const res = FW.Entry.resMgr.getAssetData<cc.Prefab>(
|
|
715
|
+
layerData.layerAssetProperty,
|
|
716
|
+
);
|
|
668
717
|
res.user = layerData.layerName;
|
|
669
718
|
res.autoRelease = layerData.controller.autoRelease;
|
|
670
719
|
res.dependentBundle = layerData.controller.layerAssetProperty.bundle;
|
|
@@ -676,7 +725,9 @@ class FWLayerStackManager {
|
|
|
676
725
|
private layerStack: FWLayerData[] = [];
|
|
677
726
|
|
|
678
727
|
push(layerData: FWLayerData): void {
|
|
679
|
-
if (
|
|
728
|
+
if (
|
|
729
|
+
layerData.controller.layerType !== FW.SystemDefine.FWLayerType.PERMANENT
|
|
730
|
+
) {
|
|
680
731
|
this.layerStack.push(layerData);
|
|
681
732
|
}
|
|
682
733
|
}
|
|
@@ -686,7 +737,9 @@ class FWLayerStackManager {
|
|
|
686
737
|
}
|
|
687
738
|
|
|
688
739
|
remove(layerData: FWLayerData): void {
|
|
689
|
-
const index = this.layerStack.findIndex(
|
|
740
|
+
const index = this.layerStack.findIndex(
|
|
741
|
+
(v) => v.controller === layerData.controller,
|
|
742
|
+
);
|
|
690
743
|
if (index > -1) {
|
|
691
744
|
this.layerStack.splice(index, 1);
|
|
692
745
|
}
|
|
@@ -702,14 +755,24 @@ class FWLayerStackManager {
|
|
|
702
755
|
}
|
|
703
756
|
|
|
704
757
|
class FWLayerStateManager {
|
|
705
|
-
private layerStates = new Map<
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
758
|
+
private layerStates = new Map<
|
|
759
|
+
new () => FW.LayerController,
|
|
760
|
+
FW.SystemDefine.FWLayerState
|
|
761
|
+
>();
|
|
762
|
+
constructor() {}
|
|
763
|
+
setState(
|
|
764
|
+
ctrType: new () => FW.LayerController,
|
|
765
|
+
state: FW.SystemDefine.FWLayerState,
|
|
766
|
+
): void {
|
|
767
|
+
if (FW.Entry.layerMgr.isDebug()) {
|
|
768
|
+
FW.Log.debug(`${cc.js.getClassName(ctrType)}->更新状态${state}`);
|
|
769
|
+
}
|
|
709
770
|
this.layerStates.set(ctrType, state);
|
|
710
771
|
}
|
|
711
772
|
|
|
712
|
-
getState(
|
|
773
|
+
getState(
|
|
774
|
+
ctrType: new () => FW.LayerController,
|
|
775
|
+
): FW.SystemDefine.FWLayerState {
|
|
713
776
|
return this.layerStates.get(ctrType) || FW.SystemDefine.FWLayerState.CLOSED;
|
|
714
777
|
}
|
|
715
778
|
|
|
@@ -726,7 +789,9 @@ class FWLayerStateManager {
|
|
|
726
789
|
}
|
|
727
790
|
|
|
728
791
|
removeState(ctrType: new () => FW.LayerController): void {
|
|
729
|
-
if (
|
|
792
|
+
if (FW.Entry.layerMgr.isDebug()) {
|
|
793
|
+
FW.Log.debug(`${cc.js.getClassName(ctrType)}-> 移除状态`);
|
|
794
|
+
}
|
|
730
795
|
this.layerStates.delete(ctrType);
|
|
731
796
|
}
|
|
732
797
|
|
|
@@ -742,7 +807,9 @@ class FWLayerQueueManager {
|
|
|
742
807
|
layerData: FWLayerData,
|
|
743
808
|
layerMap: Map<new () => FW.LayerController, FWLayerData>,
|
|
744
809
|
): boolean {
|
|
745
|
-
if (
|
|
810
|
+
if (
|
|
811
|
+
layerData.controller.layerType === FW.SystemDefine.FWLayerType.POPUP_QUEUE
|
|
812
|
+
) {
|
|
746
813
|
const hasNonPermanentLayers = Array.from(layerMap.values()).some(
|
|
747
814
|
(value) => value.layerType === FW.SystemDefine.FWLayerType.POPUP_QUEUE,
|
|
748
815
|
);
|
|
@@ -782,44 +849,44 @@ class FWLayerQueueManager {
|
|
|
782
849
|
|
|
783
850
|
class FWLayerLifecycleManager {
|
|
784
851
|
setupLifecycleHooks(layer: FW.Layer, ctr: FW.LayerController): void {
|
|
785
|
-
const originalOnLoad = layer[
|
|
786
|
-
layer[
|
|
852
|
+
const originalOnLoad = layer["onLoad"];
|
|
853
|
+
layer["onLoad"] = function () {
|
|
787
854
|
originalOnLoad?.call(this);
|
|
788
855
|
ctr.onLoad?.();
|
|
789
856
|
};
|
|
790
857
|
|
|
791
|
-
const originalStart = layer[
|
|
792
|
-
layer[
|
|
858
|
+
const originalStart = layer["start"];
|
|
859
|
+
layer["start"] = function () {
|
|
793
860
|
originalStart?.call(this);
|
|
794
861
|
ctr.onStart?.();
|
|
795
862
|
};
|
|
796
863
|
|
|
797
|
-
const originalOnEnable = layer[
|
|
798
|
-
layer[
|
|
864
|
+
const originalOnEnable = layer["onEnable"];
|
|
865
|
+
layer["onEnable"] = function () {
|
|
799
866
|
originalOnEnable?.call(this);
|
|
800
867
|
ctr.onEnable?.();
|
|
801
868
|
};
|
|
802
869
|
|
|
803
|
-
const originalOnDisable = layer[
|
|
804
|
-
layer[
|
|
870
|
+
const originalOnDisable = layer["onDisable"];
|
|
871
|
+
layer["onDisable"] = function () {
|
|
805
872
|
originalOnDisable?.call(this);
|
|
806
873
|
ctr.onDisable?.();
|
|
807
874
|
};
|
|
808
875
|
|
|
809
|
-
const originalOnDestroy = layer[
|
|
810
|
-
layer[
|
|
876
|
+
const originalOnDestroy = layer["onDestroy"];
|
|
877
|
+
layer["onDestroy"] = function () {
|
|
811
878
|
originalOnDestroy?.call(this);
|
|
812
879
|
ctr.onDestroy?.();
|
|
813
880
|
};
|
|
814
881
|
|
|
815
|
-
const originalUpdate = layer[
|
|
816
|
-
layer[
|
|
882
|
+
const originalUpdate = layer["update"];
|
|
883
|
+
layer["update"] = function (dt: number) {
|
|
817
884
|
originalUpdate?.call(this, dt);
|
|
818
885
|
ctr.onUpdate?.(dt);
|
|
819
886
|
};
|
|
820
887
|
|
|
821
|
-
const originalLateUpdate = layer[
|
|
822
|
-
layer[
|
|
888
|
+
const originalLateUpdate = layer["lateUpdate"];
|
|
889
|
+
layer["lateUpdate"] = function () {
|
|
823
890
|
originalLateUpdate?.call(this);
|
|
824
891
|
ctr.onLateUpdate?.();
|
|
825
892
|
};
|
|
@@ -830,7 +897,9 @@ class FWLayerControllerFactory {
|
|
|
830
897
|
/**
|
|
831
898
|
* 创建并初始化 LayerController
|
|
832
899
|
*/
|
|
833
|
-
createController<Ctr extends FW.LayerController = FW.LayerController>(
|
|
900
|
+
createController<Ctr extends FW.LayerController = FW.LayerController>(
|
|
901
|
+
type: new () => Ctr,
|
|
902
|
+
): Ctr {
|
|
834
903
|
const ctr = new type();
|
|
835
904
|
|
|
836
905
|
ctr.initializeDependencies?.();
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ives_xxz/framework",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.36",
|
|
4
4
|
"description": "cocoscreator 2.x mvc framework",
|
|
5
5
|
"main": "index.js",
|
|
6
|
-
"keywords": [
|
|
6
|
+
"keywords": [
|
|
7
|
+
"123456"
|
|
8
|
+
],
|
|
7
9
|
"author": "ives",
|
|
8
10
|
"license": "ISC"
|
|
9
11
|
}
|