@urso/core 0.7.13 → 0.7.14
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/package.json
CHANGED
|
@@ -31,15 +31,15 @@ class ModulesAssetsController {
|
|
|
31
31
|
/**
|
|
32
32
|
* instantly load initial assets and start lazy loading process, if needed
|
|
33
33
|
* @param {Mixed} assets - asset or array of assets
|
|
34
|
-
* @param {Function} callback
|
|
34
|
+
* @param {Function} callback
|
|
35
35
|
*/
|
|
36
36
|
preload(assets, callback) {
|
|
37
|
-
this.getInstance('Service').sortAssets(assets);
|
|
38
|
-
this.getInstance('Service').startLoad(callback);
|
|
37
|
+
const assetsSpace = this.getInstance('Service').sortAssets(assets);
|
|
38
|
+
this.getInstance('Service').startLoad(assetsSpace, callback);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
loadGroup(name, callback) {
|
|
42
|
-
this.getInstance('Service').loadGroup(name, callback);
|
|
42
|
+
this.getInstance('Service').loadGroup(null, name, callback);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -4,52 +4,104 @@ class ModulesAssetsService {
|
|
|
4
4
|
this.singleton = true;
|
|
5
5
|
|
|
6
6
|
this.assets = {};
|
|
7
|
+
this._loadCounter = 0;
|
|
7
8
|
|
|
8
9
|
this._currentQuality = 'auto';
|
|
9
10
|
this._addedAssetsCache = [];
|
|
10
11
|
this.lazyLoadProcessStarted = false;
|
|
11
12
|
};
|
|
12
13
|
|
|
14
|
+
/**
|
|
15
|
+
* get current quality
|
|
16
|
+
* @returns {String}
|
|
17
|
+
*/
|
|
13
18
|
getQuality() {
|
|
14
19
|
return this._currentQuality;
|
|
15
20
|
}
|
|
16
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Update quality
|
|
24
|
+
*/
|
|
17
25
|
updateQuality() {
|
|
18
26
|
this._currentQuality = this._detectQuality();
|
|
19
27
|
Urso.addInstancesMode(this._currentQuality + 'Quality');
|
|
20
28
|
}
|
|
21
29
|
|
|
30
|
+
/**
|
|
31
|
+
* sort assets and store to assets space
|
|
32
|
+
* @param {Mixed} assets - asset or array of assets
|
|
33
|
+
* @returns {Object}
|
|
34
|
+
*/
|
|
22
35
|
sortAssets(assets) {
|
|
23
|
-
this.
|
|
36
|
+
const assetsSpace = this._createNewAssetsSpace();
|
|
37
|
+
assetsSpace[this.getInstance('Config').loadingGroups.initial] = [];
|
|
24
38
|
|
|
25
39
|
if (Array.isArray(assets))
|
|
26
40
|
for (let asset of assets)
|
|
27
|
-
this._addAsset(asset);
|
|
41
|
+
this._addAsset(assetsSpace, asset);
|
|
28
42
|
else
|
|
29
|
-
this._addAsset(assets);
|
|
43
|
+
this._addAsset(assetsSpace, assets);
|
|
44
|
+
|
|
45
|
+
return assetsSpace;
|
|
30
46
|
}
|
|
31
47
|
|
|
32
|
-
|
|
48
|
+
/**
|
|
49
|
+
* start load assetsSpace
|
|
50
|
+
* @param {Object} assetsSpace
|
|
51
|
+
* @param {Function} callback
|
|
52
|
+
*/
|
|
53
|
+
startLoad(assetsSpace, callback) {
|
|
33
54
|
this.loadGroup(
|
|
55
|
+
assetsSpace,
|
|
34
56
|
this.getInstance('Config').loadingGroups.initial,
|
|
35
57
|
(() => { callback(); this._startLazyLoad(); }).bind(this)
|
|
36
58
|
)
|
|
37
59
|
}
|
|
38
60
|
|
|
61
|
+
/**
|
|
62
|
+
* load update handler. Setup to pixi loader
|
|
63
|
+
* @param {Number} param
|
|
64
|
+
*/
|
|
39
65
|
loadUpdate(param) {
|
|
40
66
|
Urso.scenes.loadUpdate(Math.floor(param.progress));
|
|
41
67
|
}
|
|
42
68
|
|
|
43
|
-
|
|
44
|
-
|
|
69
|
+
/**
|
|
70
|
+
* load assets group by name
|
|
71
|
+
* @param {Object} assetsSpace
|
|
72
|
+
* @param {String} group
|
|
73
|
+
* @param {Function} callback
|
|
74
|
+
* @returns
|
|
75
|
+
*/
|
|
76
|
+
loadGroup(assetsSpace, group, callback = () => { }) {
|
|
77
|
+
if (!assetsSpace) //global space
|
|
78
|
+
assetsSpace = this.assets;
|
|
79
|
+
|
|
80
|
+
if (!assetsSpace[group])
|
|
45
81
|
return Urso.logger.error('ModulesAssetsService group error, no assets:' + group + ' Check ModulesAssetsConfig please');
|
|
46
82
|
|
|
47
83
|
//we need load and parse atlases at first (!)
|
|
48
|
-
this._loadGroupAtlases(group, () => { this._loadGroupRestAssets(group, callback) });
|
|
84
|
+
this._loadGroupAtlases(assetsSpace, group, () => { this._loadGroupRestAssets(assetsSpace, group, callback) });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* create new assets space for loading
|
|
89
|
+
* @returns {Object}
|
|
90
|
+
*/
|
|
91
|
+
_createNewAssetsSpace() {
|
|
92
|
+
this._loadCounter++;
|
|
93
|
+
this.assets[this._loadCounter] = {};
|
|
94
|
+
return this.assets[this._loadCounter];
|
|
49
95
|
}
|
|
50
96
|
|
|
51
|
-
|
|
52
|
-
|
|
97
|
+
/**
|
|
98
|
+
* load atlases from assets group
|
|
99
|
+
* @param {Object} assetsSpace
|
|
100
|
+
* @param {String} group
|
|
101
|
+
* @param {Function} callback
|
|
102
|
+
*/
|
|
103
|
+
_loadGroupAtlases(assetsSpace, group, callback) {
|
|
104
|
+
const atlases = assetsSpace[group].filter(assetModel => assetModel.type === Urso.types.assets.ATLAS);
|
|
53
105
|
|
|
54
106
|
if (!atlases.length)
|
|
55
107
|
return callback();
|
|
@@ -59,15 +111,21 @@ class ModulesAssetsService {
|
|
|
59
111
|
for (let assetModel of atlases)
|
|
60
112
|
this._addAssetToLoader(assetModel, loader);
|
|
61
113
|
|
|
62
|
-
loader.start(() => { this._processLoadedAtlases(group); callback(); });
|
|
114
|
+
loader.start(() => { this._processLoadedAtlases(assetsSpace, group); callback(); });
|
|
63
115
|
}
|
|
64
116
|
|
|
65
|
-
|
|
117
|
+
/**
|
|
118
|
+
* load rest assets (atkases is loaded)
|
|
119
|
+
* @param {Object} assetsSpace
|
|
120
|
+
* @param {String} group
|
|
121
|
+
* @param {Function} callback
|
|
122
|
+
*/
|
|
123
|
+
_loadGroupRestAssets(assetsSpace, group, callback) {
|
|
66
124
|
let loader = Urso.getInstance('Lib.Loader');
|
|
67
125
|
loader.setOnLoadUpdate(this.loadUpdate.bind(this));
|
|
68
126
|
const noAtlasSpines = [];
|
|
69
127
|
|
|
70
|
-
for (let assetModel of
|
|
128
|
+
for (let assetModel of assetsSpace[group])
|
|
71
129
|
if (assetModel.type !== Urso.types.assets.ATLAS)
|
|
72
130
|
if (!Urso.cache.getFile(assetModel.path)) {
|
|
73
131
|
//filter noAtlas Spine files
|
|
@@ -79,7 +137,7 @@ class ModulesAssetsService {
|
|
|
79
137
|
|
|
80
138
|
loader.start(
|
|
81
139
|
() => {
|
|
82
|
-
this._processLoadedAssets(group);
|
|
140
|
+
this._processLoadedAssets(assetsSpace, group);
|
|
83
141
|
this._loadNoAtlasSpines(noAtlasSpines, () => {
|
|
84
142
|
this.emit(Urso.events.MODULES_ASSETS_GROUP_LOADED, group);
|
|
85
143
|
callback();
|
|
@@ -88,6 +146,12 @@ class ModulesAssetsService {
|
|
|
88
146
|
);
|
|
89
147
|
}
|
|
90
148
|
|
|
149
|
+
/**
|
|
150
|
+
* load spines without .atlas files
|
|
151
|
+
* @param {Array} noAtlasSpines
|
|
152
|
+
* @param {Function} callback
|
|
153
|
+
* @returns
|
|
154
|
+
*/
|
|
91
155
|
_loadNoAtlasSpines(noAtlasSpines, callback) {
|
|
92
156
|
if (!noAtlasSpines.length)
|
|
93
157
|
return callback();
|
|
@@ -100,8 +164,13 @@ class ModulesAssetsService {
|
|
|
100
164
|
loader.start(callback);
|
|
101
165
|
}
|
|
102
166
|
|
|
103
|
-
|
|
104
|
-
|
|
167
|
+
/**
|
|
168
|
+
* process loaded atlases
|
|
169
|
+
* @param {Object} assetsSpace
|
|
170
|
+
* @param {String} group
|
|
171
|
+
*/
|
|
172
|
+
_processLoadedAtlases(assetsSpace, group) {
|
|
173
|
+
const atlases = assetsSpace[group].filter(assetModel => assetModel.type === Urso.types.assets.ATLAS);
|
|
105
174
|
|
|
106
175
|
for (let assetModel of atlases) {
|
|
107
176
|
const assetKey = assetModel.key;
|
|
@@ -117,17 +186,17 @@ class ModulesAssetsService {
|
|
|
117
186
|
newFilename = folderPath + '/' + frame.filename;
|
|
118
187
|
|
|
119
188
|
Urso.cache.addFile(newFilename, texture);
|
|
120
|
-
|
|
121
|
-
if(assetModel.cacheTextures) {
|
|
122
|
-
const textureKey = newFilename.split('/').pop().split('.')[0];
|
|
123
|
-
Urso.cache.addTexture(textureKey, texture);
|
|
124
|
-
}
|
|
125
189
|
}
|
|
126
190
|
}
|
|
127
191
|
}
|
|
128
192
|
|
|
129
|
-
|
|
130
|
-
|
|
193
|
+
/**
|
|
194
|
+
* process loaded assets
|
|
195
|
+
* @param {Object} assetsSpace
|
|
196
|
+
* @param {String} group
|
|
197
|
+
*/
|
|
198
|
+
_processLoadedAssets(assetsSpace, group) {
|
|
199
|
+
for (let assetModel of assetsSpace[group]) {
|
|
131
200
|
if (assetModel.type === Urso.types.assets.IMAGE)
|
|
132
201
|
this._processLoadedImage(assetModel);
|
|
133
202
|
|
|
@@ -138,9 +207,13 @@ class ModulesAssetsService {
|
|
|
138
207
|
this._processLoadedFont(assetModel);
|
|
139
208
|
}
|
|
140
209
|
|
|
141
|
-
delete
|
|
210
|
+
delete assetsSpace[group];
|
|
142
211
|
}
|
|
143
212
|
|
|
213
|
+
/**
|
|
214
|
+
* process loaded font
|
|
215
|
+
* @param {Object} source
|
|
216
|
+
*/
|
|
144
217
|
_processLoadedFont(source) {
|
|
145
218
|
const data = Urso.cache.getFile(source.key);
|
|
146
219
|
const font = new FontFace(source.key, data.data);
|
|
@@ -149,10 +222,19 @@ class ModulesAssetsService {
|
|
|
149
222
|
});
|
|
150
223
|
}
|
|
151
224
|
|
|
225
|
+
/**
|
|
226
|
+
* process loaded bitmap font
|
|
227
|
+
* @param {Object} source
|
|
228
|
+
*/
|
|
152
229
|
_processLoadedBitmapFont(assetModel) {
|
|
153
230
|
this._updateFontKey(assetModel.key)
|
|
154
231
|
}
|
|
155
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Update font key if cannot use original
|
|
235
|
+
* @param {String} fontName
|
|
236
|
+
* @returns
|
|
237
|
+
*/
|
|
156
238
|
_updateFontKey(fontName) {
|
|
157
239
|
const fontData = Urso.cache.getBitmapFont(fontName);
|
|
158
240
|
|
|
@@ -167,11 +249,19 @@ class ModulesAssetsService {
|
|
|
167
249
|
}
|
|
168
250
|
}
|
|
169
251
|
|
|
252
|
+
/**
|
|
253
|
+
* get current assets resolution
|
|
254
|
+
* @returns {Number}
|
|
255
|
+
*/
|
|
170
256
|
getCurrentResolution() {
|
|
171
257
|
const { qualityFactors, defaultQualityFactor } = this.getInstance('Config');
|
|
172
258
|
return qualityFactors[this._currentQuality] || defaultQualityFactor || 1;
|
|
173
259
|
}
|
|
174
260
|
|
|
261
|
+
/**
|
|
262
|
+
* process loaded image
|
|
263
|
+
* @param {Object} assetModel
|
|
264
|
+
*/
|
|
175
265
|
_processLoadedImage(assetModel) {
|
|
176
266
|
const resolution = this.getCurrentResolution();
|
|
177
267
|
|
|
@@ -205,7 +295,13 @@ class ModulesAssetsService {
|
|
|
205
295
|
}
|
|
206
296
|
}
|
|
207
297
|
|
|
208
|
-
|
|
298
|
+
/**
|
|
299
|
+
* add asset
|
|
300
|
+
* @param {Object} assetsSpace
|
|
301
|
+
* @param {Object} asset
|
|
302
|
+
* @param {String} loadingGroup
|
|
303
|
+
*/
|
|
304
|
+
_addAsset(assetsSpace, asset, loadingGroup) {
|
|
209
305
|
//cache for all assets. We do not need to load same assets twice or more
|
|
210
306
|
if (asset.type !== Urso.types.assets.CONTAINER) {
|
|
211
307
|
let addedAssetKey = `${asset.type}_${asset.key}`;
|
|
@@ -257,19 +353,26 @@ class ModulesAssetsService {
|
|
|
257
353
|
//check if container
|
|
258
354
|
if (model.contents) {
|
|
259
355
|
for (let content of model.contents) {
|
|
260
|
-
this._addAsset(content, model.loadingGroup);
|
|
356
|
+
this._addAsset(assetsSpace, content, model.loadingGroup);
|
|
261
357
|
}
|
|
262
358
|
|
|
263
359
|
return;
|
|
264
360
|
}
|
|
265
361
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
362
|
+
if (model.loadingGroup === this.getInstance('Config').loadingGroups.initial) {
|
|
363
|
+
assetsSpace[model.loadingGroup].push(model);
|
|
364
|
+
} else {
|
|
365
|
+
//add single asset to loading group
|
|
366
|
+
if (!this.assets[model.loadingGroup])
|
|
367
|
+
this.assets[model.loadingGroup] = [];
|
|
269
368
|
|
|
270
|
-
|
|
369
|
+
this.assets[model.loadingGroup].push(model);
|
|
370
|
+
}
|
|
271
371
|
}
|
|
272
372
|
|
|
373
|
+
/**
|
|
374
|
+
* start lazy load process
|
|
375
|
+
*/
|
|
273
376
|
_startLazyLoad() {
|
|
274
377
|
if (this.lazyLoadProcessStarted)
|
|
275
378
|
return;
|
|
@@ -278,6 +381,10 @@ class ModulesAssetsService {
|
|
|
278
381
|
this._continueLazyLoad();
|
|
279
382
|
}
|
|
280
383
|
|
|
384
|
+
/**
|
|
385
|
+
* continue lazy load process (with current step)
|
|
386
|
+
* @param {Number} step
|
|
387
|
+
*/
|
|
281
388
|
_continueLazyLoad(step) {
|
|
282
389
|
if (!step)
|
|
283
390
|
step = 0;
|
|
@@ -297,6 +404,12 @@ class ModulesAssetsService {
|
|
|
297
404
|
this.loadGroup(groupName, () => { this._continueLazyLoad(step + 1); })
|
|
298
405
|
}
|
|
299
406
|
|
|
407
|
+
/**
|
|
408
|
+
* quality reducer
|
|
409
|
+
* @param {Object} qualityFactors
|
|
410
|
+
* @param {Number} widthFactor
|
|
411
|
+
* @returns
|
|
412
|
+
*/
|
|
300
413
|
_qualityReducer(qualityFactors, widthFactor) {
|
|
301
414
|
return [(acc, val) => {
|
|
302
415
|
if (acc === null) {
|
|
@@ -315,6 +428,10 @@ class ModulesAssetsService {
|
|
|
315
428
|
}, null]
|
|
316
429
|
}
|
|
317
430
|
|
|
431
|
+
/**
|
|
432
|
+
* detect assets quality
|
|
433
|
+
* @returns {Number}
|
|
434
|
+
*/
|
|
318
435
|
_detectQuality() {
|
|
319
436
|
const { qualityFactors } = this.getInstance('Config');
|
|
320
437
|
const userQuality = Urso.helper.parseGetParams()['quality'];
|
|
@@ -326,6 +443,10 @@ class ModulesAssetsService {
|
|
|
326
443
|
return this._calculateQuality(qualityFactors);
|
|
327
444
|
}
|
|
328
445
|
|
|
446
|
+
/**
|
|
447
|
+
* calculate quality
|
|
448
|
+
* @param {Object} qualityFactors
|
|
449
|
+
*/
|
|
329
450
|
_calculateQuality(qualityFactors) {
|
|
330
451
|
const { android, iOS, iPad, macOS } = Urso.device;
|
|
331
452
|
const isMobile = android || iOS || iPad;
|
|
@@ -358,6 +479,11 @@ class ModulesAssetsService {
|
|
|
358
479
|
.reduce(...this._qualityReducer(qualityFactors, widthFactor));
|
|
359
480
|
}
|
|
360
481
|
|
|
482
|
+
/**
|
|
483
|
+
* add asset to loader instance
|
|
484
|
+
* @param {Object} assetModel
|
|
485
|
+
* @param {Object} loader
|
|
486
|
+
*/
|
|
361
487
|
_addAssetToLoader(assetModel, loader) {
|
|
362
488
|
if (assetModel.path)
|
|
363
489
|
loader.addAsset(assetModel);
|