@urso/core 0.7.13 → 0.7.15
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/build/js/index.js +1 -1
- package/package.json +1 -1
- package/src/js/lib/loader.js +4 -3
- package/src/js/modules/assets/controller.js +4 -4
- package/src/js/modules/assets/models/_info.js +3 -2
- package/src/js/modules/assets/models/html.js +9 -0
- package/src/js/modules/assets/service.js +170 -41
- package/src/js/modules/template/types.js +2 -1
package/package.json
CHANGED
package/src/js/lib/loader.js
CHANGED
|
@@ -56,12 +56,13 @@ class LibLoader {
|
|
|
56
56
|
case Urso.types.assets.BITMAPFONT:
|
|
57
57
|
Urso.cache.addBitmapFont(asset.key, resource);
|
|
58
58
|
break;
|
|
59
|
-
case Urso.types.assets.FONT:
|
|
60
|
-
Urso.cache.addFile(asset.key, resource);
|
|
61
|
-
break;
|
|
62
59
|
case Urso.types.assets.CONTAINER:
|
|
63
60
|
Urso.cache.addContainer(asset.key, resource);
|
|
64
61
|
break;
|
|
62
|
+
case Urso.types.assets.FONT:
|
|
63
|
+
case Urso.types.assets.HTML:
|
|
64
|
+
Urso.cache.addFile(asset.key, resource);
|
|
65
|
+
break;
|
|
65
66
|
case Urso.types.assets.IMAGE:
|
|
66
67
|
Urso.cache.addImage(asset.key, resource);
|
|
67
68
|
break;
|
|
@@ -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
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Urso.Core.Modules.Assets.Models = {
|
|
2
|
-
Audiosprite: require('./audiosprite.js'),
|
|
3
2
|
Atlas: require('./atlas.js'),
|
|
3
|
+
Audiosprite: require('./audiosprite.js'),
|
|
4
4
|
BitmapFont: require('./bitmapFont.js'),
|
|
5
5
|
Container: require('./container.js'),
|
|
6
|
+
Font: require('./font.js'),
|
|
7
|
+
Html: require('./html.js'),
|
|
6
8
|
Image: require('./image.js'),
|
|
7
9
|
Json: require('./json.js'),
|
|
8
10
|
Sound: require('./sound.js'),
|
|
9
|
-
Font: require('./font.js'),
|
|
10
11
|
Spine: require('./spine.js')
|
|
11
12
|
};
|
|
@@ -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}`;
|
|
@@ -219,33 +315,36 @@ class ModulesAssetsService {
|
|
|
219
315
|
let model;
|
|
220
316
|
|
|
221
317
|
switch (asset.type) {
|
|
222
|
-
case Urso.types.assets.IMAGE:
|
|
223
|
-
model = this.getInstance('Models.Image', asset)
|
|
224
|
-
break;
|
|
225
|
-
case Urso.types.assets.CONTAINER:
|
|
226
|
-
model = this.getInstance('Models.Container', asset)
|
|
227
|
-
break;
|
|
228
318
|
case Urso.types.assets.ATLAS:
|
|
229
319
|
model = this.getInstance('Models.Atlas', asset)
|
|
230
320
|
break;
|
|
231
321
|
case Urso.types.assets.AUDIOSPRITE:
|
|
232
322
|
model = this.getInstance('Models.Audiosprite', asset)
|
|
233
323
|
break;
|
|
234
|
-
case Urso.types.assets.JSON:
|
|
235
|
-
model = this.getInstance('Models.Json', asset)
|
|
236
|
-
break;
|
|
237
|
-
case Urso.types.assets.SPINE:
|
|
238
|
-
model = this.getInstance('Models.Spine', asset)
|
|
239
|
-
break;
|
|
240
324
|
case Urso.types.assets.BITMAPFONT:
|
|
241
325
|
model = this.getInstance('Models.BitmapFont', asset)
|
|
242
326
|
break;
|
|
327
|
+
case Urso.types.assets.CONTAINER:
|
|
328
|
+
model = this.getInstance('Models.Container', asset)
|
|
329
|
+
break;
|
|
243
330
|
case Urso.types.assets.FONT:
|
|
244
331
|
model = this.getInstance('Models.Font', asset)
|
|
245
332
|
break;
|
|
333
|
+
case Urso.types.assets.HTML:
|
|
334
|
+
model = this.getInstance('Models.Html', asset)
|
|
335
|
+
break;
|
|
336
|
+
case Urso.types.assets.IMAGE:
|
|
337
|
+
model = this.getInstance('Models.Image', asset)
|
|
338
|
+
break;
|
|
339
|
+
case Urso.types.assets.JSON:
|
|
340
|
+
model = this.getInstance('Models.Json', asset)
|
|
341
|
+
break;
|
|
246
342
|
case Urso.types.assets.SOUND:
|
|
247
343
|
model = this.getInstance('Models.Sound', asset)
|
|
248
344
|
break;
|
|
345
|
+
case Urso.types.assets.SPINE:
|
|
346
|
+
model = this.getInstance('Models.Spine', asset)
|
|
347
|
+
break;
|
|
249
348
|
default:
|
|
250
349
|
Urso.logger.error('ModulesAssetsService asset type error', asset);
|
|
251
350
|
break;
|
|
@@ -257,19 +356,26 @@ class ModulesAssetsService {
|
|
|
257
356
|
//check if container
|
|
258
357
|
if (model.contents) {
|
|
259
358
|
for (let content of model.contents) {
|
|
260
|
-
this._addAsset(content, model.loadingGroup);
|
|
359
|
+
this._addAsset(assetsSpace, content, model.loadingGroup);
|
|
261
360
|
}
|
|
262
361
|
|
|
263
362
|
return;
|
|
264
363
|
}
|
|
265
364
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
365
|
+
if (model.loadingGroup === this.getInstance('Config').loadingGroups.initial) {
|
|
366
|
+
assetsSpace[model.loadingGroup].push(model);
|
|
367
|
+
} else {
|
|
368
|
+
//add single asset to loading group
|
|
369
|
+
if (!this.assets[model.loadingGroup])
|
|
370
|
+
this.assets[model.loadingGroup] = [];
|
|
269
371
|
|
|
270
|
-
|
|
372
|
+
this.assets[model.loadingGroup].push(model);
|
|
373
|
+
}
|
|
271
374
|
}
|
|
272
375
|
|
|
376
|
+
/**
|
|
377
|
+
* start lazy load process
|
|
378
|
+
*/
|
|
273
379
|
_startLazyLoad() {
|
|
274
380
|
if (this.lazyLoadProcessStarted)
|
|
275
381
|
return;
|
|
@@ -278,6 +384,10 @@ class ModulesAssetsService {
|
|
|
278
384
|
this._continueLazyLoad();
|
|
279
385
|
}
|
|
280
386
|
|
|
387
|
+
/**
|
|
388
|
+
* continue lazy load process (with current step)
|
|
389
|
+
* @param {Number} step
|
|
390
|
+
*/
|
|
281
391
|
_continueLazyLoad(step) {
|
|
282
392
|
if (!step)
|
|
283
393
|
step = 0;
|
|
@@ -297,6 +407,12 @@ class ModulesAssetsService {
|
|
|
297
407
|
this.loadGroup(groupName, () => { this._continueLazyLoad(step + 1); })
|
|
298
408
|
}
|
|
299
409
|
|
|
410
|
+
/**
|
|
411
|
+
* quality reducer
|
|
412
|
+
* @param {Object} qualityFactors
|
|
413
|
+
* @param {Number} widthFactor
|
|
414
|
+
* @returns
|
|
415
|
+
*/
|
|
300
416
|
_qualityReducer(qualityFactors, widthFactor) {
|
|
301
417
|
return [(acc, val) => {
|
|
302
418
|
if (acc === null) {
|
|
@@ -315,6 +431,10 @@ class ModulesAssetsService {
|
|
|
315
431
|
}, null]
|
|
316
432
|
}
|
|
317
433
|
|
|
434
|
+
/**
|
|
435
|
+
* detect assets quality
|
|
436
|
+
* @returns {Number}
|
|
437
|
+
*/
|
|
318
438
|
_detectQuality() {
|
|
319
439
|
const { qualityFactors } = this.getInstance('Config');
|
|
320
440
|
const userQuality = Urso.helper.parseGetParams()['quality'];
|
|
@@ -326,6 +446,10 @@ class ModulesAssetsService {
|
|
|
326
446
|
return this._calculateQuality(qualityFactors);
|
|
327
447
|
}
|
|
328
448
|
|
|
449
|
+
/**
|
|
450
|
+
* calculate quality
|
|
451
|
+
* @param {Object} qualityFactors
|
|
452
|
+
*/
|
|
329
453
|
_calculateQuality(qualityFactors) {
|
|
330
454
|
const { android, iOS, iPad, macOS } = Urso.device;
|
|
331
455
|
const isMobile = android || iOS || iPad;
|
|
@@ -358,6 +482,11 @@ class ModulesAssetsService {
|
|
|
358
482
|
.reduce(...this._qualityReducer(qualityFactors, widthFactor));
|
|
359
483
|
}
|
|
360
484
|
|
|
485
|
+
/**
|
|
486
|
+
* add asset to loader instance
|
|
487
|
+
* @param {Object} assetModel
|
|
488
|
+
* @param {Object} loader
|
|
489
|
+
*/
|
|
361
490
|
_addAssetToLoader(assetModel, loader) {
|
|
362
491
|
if (assetModel.path)
|
|
363
492
|
loader.addAsset(assetModel);
|