@ives_xxz/framework 1.2.8 → 1.2.10
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 +91 -79
- package/package.json +1 -1
- package/service/socket/FWSocket.ts +1 -0
|
@@ -20,7 +20,7 @@ export class FWLayerData<T extends FWLayerController = FWLayerController>
|
|
|
20
20
|
layerParent?: cc.Node;
|
|
21
21
|
layerPosition?: cc.Vec3;
|
|
22
22
|
controllerName: string;
|
|
23
|
-
controller:
|
|
23
|
+
controller: FW.LayerController;
|
|
24
24
|
loaded: boolean;
|
|
25
25
|
externalReference?: Set<(ref: FW.LayerController | null) => void>;
|
|
26
26
|
}
|
|
@@ -34,6 +34,7 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
34
34
|
* 当前已经打开的layer缓存容器
|
|
35
35
|
*/
|
|
36
36
|
private layerMap: Map<string, FWLayerData>;
|
|
37
|
+
|
|
37
38
|
/**
|
|
38
39
|
* 当前所有打开Layer注册表
|
|
39
40
|
*/
|
|
@@ -121,35 +122,46 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
121
122
|
return undefined;
|
|
122
123
|
}
|
|
123
124
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return;
|
|
125
|
+
for (const [key, value] of this.layerMap) {
|
|
126
|
+
if (value.layerConstructor == data.type) {
|
|
127
|
+
return value.controller as Ctr;
|
|
128
|
+
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
const ctr = new data.type();
|
|
132
|
+
const ctrName = cc.js.getClassName(ctr);
|
|
133
|
+
const layerData = this.createLayerData(ctr);
|
|
132
134
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
layerData.layerConstructor = data.type;
|
|
136
|
+
layerData.controller = ctr;
|
|
137
|
+
layerData.controllerName = ctrName;
|
|
138
|
+
|
|
139
|
+
this.layerMap.set(ctrName, layerData);
|
|
140
|
+
|
|
141
|
+
if (this.layerRegistry.has(data.type)) {
|
|
142
|
+
return this.layerMap.get(ctrName).controller as Ctr;
|
|
137
143
|
}
|
|
138
144
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
145
|
+
this.layerRegistry.add(data.type);
|
|
146
|
+
|
|
147
|
+
if (ctr.layerType == FWSystemDefine.FWLayerType.POPUP_QUEUE) {
|
|
148
|
+
if (this.layerRegistry.size == 0) {
|
|
149
|
+
let unclose = true;
|
|
150
|
+
for (const [key, value] of this.layerMap) {
|
|
151
|
+
if (value.layerType != FWSystemDefine.FWLayerType.PERMANENT) {
|
|
152
|
+
unclose = false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!unclose) {
|
|
156
|
+
this.layerQueue.add(ctr.layerData);
|
|
157
|
+
return;
|
|
143
158
|
}
|
|
144
159
|
}
|
|
145
160
|
}
|
|
146
161
|
|
|
147
162
|
ctr.initialize();
|
|
148
163
|
|
|
149
|
-
const layerData = this.createLayerData(ctr);
|
|
150
|
-
|
|
151
164
|
const res = await this.openLayerAsync(layerData);
|
|
152
|
-
|
|
153
165
|
const layer = await this.createLayer(
|
|
154
166
|
res.asset,
|
|
155
167
|
res.asset.name,
|
|
@@ -159,21 +171,17 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
159
171
|
);
|
|
160
172
|
|
|
161
173
|
const layerName = cc.js.getClassName(layer);
|
|
162
|
-
const ctrName = cc.js.getClassName(ctr);
|
|
163
174
|
|
|
164
175
|
ctr.layerData = layerData;
|
|
165
176
|
ctr.layerData.loaded = true;
|
|
166
177
|
ctr.layer = layer;
|
|
167
178
|
ctr.layerData.layerName = layerName;
|
|
168
|
-
ctr.layerData.controllerName = ctrName;
|
|
169
179
|
ctr.layerData.uuid = res.uuid;
|
|
170
180
|
ctr.uuid = res.uuid;
|
|
171
181
|
ctr.onInit?.(data.args);
|
|
172
182
|
|
|
173
183
|
this.lifecycleProcessing(ctr);
|
|
174
184
|
|
|
175
|
-
this.layerMap.set(res.uuid, layerData);
|
|
176
|
-
|
|
177
185
|
if (ctr.layerType !== FWSystemDefine.FWLayerType.PERMANENT) {
|
|
178
186
|
this.layerStack.push(layerData);
|
|
179
187
|
}
|
|
@@ -190,6 +198,7 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
190
198
|
return target[prop];
|
|
191
199
|
},
|
|
192
200
|
});
|
|
201
|
+
|
|
193
202
|
return proxy;
|
|
194
203
|
}
|
|
195
204
|
|
|
@@ -203,62 +212,66 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
203
212
|
FWLog.error(`open layer failed:${data},please check param!`);
|
|
204
213
|
return undefined;
|
|
205
214
|
}
|
|
206
|
-
let ctr = new data.type();
|
|
207
215
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
216
|
+
for (const [key, value] of this.layerMap) {
|
|
217
|
+
if (value.layerConstructor == data.type) {
|
|
218
|
+
return value.controller as Ctr;
|
|
219
|
+
}
|
|
211
220
|
}
|
|
212
221
|
|
|
213
|
-
|
|
222
|
+
const ctr = new data.type();
|
|
223
|
+
const ctrName = cc.js.getClassName(ctr);
|
|
224
|
+
const layerData = this.createLayerData(ctr);
|
|
214
225
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
226
|
+
layerData.layerConstructor = data.type;
|
|
227
|
+
layerData.controller = ctr;
|
|
228
|
+
layerData.controllerName = ctrName;
|
|
229
|
+
|
|
230
|
+
this.layerMap.set(ctrName, layerData);
|
|
231
|
+
|
|
232
|
+
if (this.layerRegistry.has(data.type)) {
|
|
233
|
+
return this.layerMap.get(ctrName).controller as Ctr;
|
|
219
234
|
}
|
|
220
235
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
236
|
+
this.layerRegistry.add(data.type);
|
|
237
|
+
|
|
238
|
+
if (ctr.layerType == FWSystemDefine.FWLayerType.POPUP_QUEUE) {
|
|
239
|
+
if (this.layerRegistry.size == 0) {
|
|
240
|
+
let unclose = true;
|
|
241
|
+
for (const [key, value] of this.layerMap) {
|
|
242
|
+
if (value.layerType != FWSystemDefine.FWLayerType.PERMANENT) {
|
|
243
|
+
unclose = false;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (!unclose) {
|
|
247
|
+
this.layerQueue.add(ctr.layerData);
|
|
248
|
+
return;
|
|
225
249
|
}
|
|
226
250
|
}
|
|
227
251
|
}
|
|
228
252
|
|
|
229
253
|
ctr.initialize();
|
|
230
254
|
|
|
231
|
-
|
|
255
|
+
this.layerQueue.add(layerData);
|
|
256
|
+
const res = this.openLayerSync(layerData);
|
|
257
|
+
const layer = this.createLayer(
|
|
258
|
+
res.asset,
|
|
259
|
+
res.asset.name,
|
|
260
|
+
layerData.layerRenderOrder,
|
|
261
|
+
layerData.layerParent,
|
|
262
|
+
layerData.layerPosition,
|
|
263
|
+
);
|
|
264
|
+
const layerName = cc.js.getClassName(layer);
|
|
232
265
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
res.asset.name,
|
|
243
|
-
layerData.layerRenderOrder,
|
|
244
|
-
layerData.layerParent,
|
|
245
|
-
layerData.layerPosition,
|
|
246
|
-
);
|
|
247
|
-
this.layerMap.set(res.uuid, layerData);
|
|
248
|
-
const layerName = cc.js.getClassName(layer);
|
|
249
|
-
const ctrName = cc.js.getClassName(ctr);
|
|
250
|
-
|
|
251
|
-
ctr.layerData = layerData;
|
|
252
|
-
ctr.layerData.loaded = true;
|
|
253
|
-
ctr.layer = layer;
|
|
254
|
-
ctr.layerData.layerName = layerName;
|
|
255
|
-
ctr.layerData.controllerName = ctrName;
|
|
256
|
-
ctr.layerData.uuid = res.uuid;
|
|
257
|
-
ctr.uuid = res.uuid;
|
|
258
|
-
ctr.onInit?.(data.args);
|
|
259
|
-
|
|
260
|
-
this.lifecycleProcessing(ctr);
|
|
261
|
-
}
|
|
266
|
+
ctr.layerData = layerData;
|
|
267
|
+
ctr.layerData.loaded = true;
|
|
268
|
+
ctr.layer = layer;
|
|
269
|
+
ctr.layerData.layerName = layerName;
|
|
270
|
+
ctr.layerData.uuid = res.uuid;
|
|
271
|
+
ctr.uuid = res.uuid;
|
|
272
|
+
ctr.onInit?.(data.args);
|
|
273
|
+
|
|
274
|
+
this.lifecycleProcessing(ctr);
|
|
262
275
|
|
|
263
276
|
if (ctr.layerType !== FWSystemDefine.FWLayerType.PERMANENT) {
|
|
264
277
|
this.layerStack.push(layerData);
|
|
@@ -286,7 +299,7 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
286
299
|
*/
|
|
287
300
|
displayLayer<Ctr extends FWLayerController = FWLayerController>(ctr: Ctr): Ctr {
|
|
288
301
|
const layerData = ctr.layerData;
|
|
289
|
-
if (!this.layerMap.has(layerData.
|
|
302
|
+
if (!this.layerMap.has(layerData.controllerName)) {
|
|
290
303
|
FWLog.warn(`display layer failed,layer name : ${layerData.layerName}`);
|
|
291
304
|
return;
|
|
292
305
|
}
|
|
@@ -308,7 +321,7 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
308
321
|
*/
|
|
309
322
|
hideLayer<Ctr extends FWLayerController = FWLayerController>(ctr: Ctr): Ctr {
|
|
310
323
|
const layerData = ctr.layerData;
|
|
311
|
-
if (!this.layerMap.has(layerData.
|
|
324
|
+
if (!this.layerMap.has(layerData.controllerName)) {
|
|
312
325
|
FWLog.warn(`hide layer failed,layer name : ${layerData.layerName}`);
|
|
313
326
|
return;
|
|
314
327
|
}
|
|
@@ -350,17 +363,17 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
350
363
|
for (let i = 0; i < count; i++) {
|
|
351
364
|
let layerData = this.layerStack.pop();
|
|
352
365
|
let ctr = layerData.controller;
|
|
353
|
-
if (!this.layerMap.has(layerData.
|
|
366
|
+
if (!this.layerMap.has(layerData.controllerName)) {
|
|
354
367
|
return;
|
|
355
368
|
}
|
|
356
369
|
if (cc.isValid(ctr.layer?.node)) {
|
|
357
|
-
ctr.destroy?.();
|
|
370
|
+
ctr.layer.destroy?.();
|
|
358
371
|
if (ctr.autoRelease) {
|
|
359
372
|
FW.Entry.resMgr.releaseAsset(ctr.layerData.layerAssetProperty);
|
|
360
373
|
}
|
|
361
374
|
this.notifyExternalRefUpdates(ctr.layerData);
|
|
362
375
|
}
|
|
363
|
-
this.layerMap.delete(layerData.
|
|
376
|
+
this.layerMap.delete(layerData.controllerName);
|
|
364
377
|
}
|
|
365
378
|
}
|
|
366
379
|
|
|
@@ -368,27 +381,23 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
368
381
|
* 关闭layer
|
|
369
382
|
* @param ctr
|
|
370
383
|
*/
|
|
371
|
-
async close<Ctr extends
|
|
384
|
+
async close<Ctr extends FW.LayerController = FW.LayerController>(
|
|
372
385
|
ctr: Ctr,
|
|
373
|
-
): Promise<
|
|
386
|
+
): Promise<FW.LayerController> {
|
|
374
387
|
if (!ctr) return;
|
|
375
388
|
|
|
376
389
|
let layerData = ctr.layerData;
|
|
377
390
|
|
|
378
|
-
if (!this.layerMap.has(layerData.uuid)) {
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
391
|
if (cc.isValid(ctr.layer?.node)) {
|
|
383
|
-
ctr.destroy?.();
|
|
392
|
+
ctr.layer.node.destroy?.();
|
|
384
393
|
if (ctr.autoRelease) {
|
|
385
394
|
FW.Entry.resMgr.releaseAsset(ctr.layerData.layerAssetProperty);
|
|
386
395
|
}
|
|
387
396
|
this.notifyExternalRefUpdates(ctr.layerData);
|
|
388
397
|
}
|
|
389
398
|
|
|
390
|
-
this.layerMap.delete(layerData.
|
|
391
|
-
this.
|
|
399
|
+
this.layerMap.delete(layerData.controllerName);
|
|
400
|
+
this.layerRegistry.delete(ctr.layerData.layerConstructor);
|
|
392
401
|
|
|
393
402
|
const index = this.layerStack.findIndex((v) => {
|
|
394
403
|
v.controller == ctr;
|
|
@@ -504,6 +513,9 @@ export class FWLayerManager extends FWManager implements FW.LayerManager {
|
|
|
504
513
|
}
|
|
505
514
|
|
|
506
515
|
public clear() {
|
|
516
|
+
this.layerQueue = new FWQueue();
|
|
517
|
+
this.layerStack = [];
|
|
518
|
+
this.layerRegistry = new Set<new () => FW.LayerController>();
|
|
507
519
|
this.layerMap.forEach((v) => this.close(v.controller));
|
|
508
520
|
this.layerMap.clear();
|
|
509
521
|
}
|
package/package.json
CHANGED