@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.
@@ -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: FWLayerController;
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
- let ctr = new data.type();
125
-
126
- /** 如果不是重复打开的Layer,不是需要添加进队列末尾的,并且已经存在于注册表中的 不进行重复打开 */
127
- if (this.layerRegistry.has(data.type) && !ctr.isRepeatOpen) {
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
- this.layerRegistry.add(data.type);
131
+ const ctr = new data.type();
132
+ const ctrName = cc.js.getClassName(ctr);
133
+ const layerData = this.createLayerData(ctr);
132
134
 
133
- if (ctr.layerType == FWSystemDefine.FWLayerType.POPUP_QUEUE && !this.layerQueue.isEmpty()) {
134
- this.layerQueue.add(ctr.layerData);
135
- this.layerRegistry.delete(data.type);
136
- return;
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
- if (ctr.layerType != FWSystemDefine.FWLayerType.REPEAT && !ctr.isRepeatOpen) {
140
- for (const [key, value] of this.layerMap) {
141
- if (value.layerAssetProperty.path == ctr.layerAssetProperty.path) {
142
- return this.layerMap.get(value.uuid).controller as Ctr;
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
- /** 如果不是重复打开的Layer,不是需要添加进队列末尾的,并且已经存在于注册表中的 不进行重复打开 */
209
- if (this.layerRegistry.has(data.type) && !ctr.isRepeatOpen) {
210
- return;
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
- this.layerRegistry.add(data.type);
222
+ const ctr = new data.type();
223
+ const ctrName = cc.js.getClassName(ctr);
224
+ const layerData = this.createLayerData(ctr);
214
225
 
215
- if (ctr.layerType == FWSystemDefine.FWLayerType.POPUP_QUEUE && !this.layerQueue.isEmpty()) {
216
- this.layerQueue.add(ctr.layerData);
217
- this.layerRegistry.delete(data.type);
218
- return;
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
- if (ctr.layerType != FWSystemDefine.FWLayerType.REPEAT && !ctr.isRepeatOpen) {
222
- for (const [key, value] of this.layerMap) {
223
- if (value.layerAssetProperty.path == ctr.layerAssetProperty.path) {
224
- return this.layerMap.get(value.uuid).controller as Ctr;
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
- const layerData = this.createLayerData(ctr);
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
- if (
234
- layerData.layerType == FWSystemDefine.FWLayerType.POPUP_QUEUE &&
235
- !this.layerQueue.isEmpty()
236
- ) {
237
- this.layerQueue.add(layerData);
238
- } else {
239
- const res = this.openLayerSync(layerData);
240
- const layer = this.createLayer(
241
- res.asset,
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.uuid)) {
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.uuid)) {
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.uuid)) {
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.uuid);
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 FWLayerController = FWLayerController>(
384
+ async close<Ctr extends FW.LayerController = FW.LayerController>(
372
385
  ctr: Ctr,
373
- ): Promise<FWLayerController> {
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.uuid);
391
- this.layerStack.pop();
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ives_xxz/framework",
3
- "version": "1.2.8",
3
+ "version": "1.2.10",
4
4
  "description": "cocoscreator 2.x mvc framework",
5
5
  "main": "index.js",
6
6
  "keywords": [
@@ -149,6 +149,7 @@ export default class FWSocket implements FW.Socket {
149
149
  * 关闭连接
150
150
  */
151
151
  public close() {
152
+ this.protocolContainer.clear();
152
153
  FW.Entry.socketMgr.closeSocket(this);
153
154
  }
154
155