@urso/core 0.1.91 → 0.2.0-dev

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.
Files changed (143) hide show
  1. package/.babelrc +11 -11
  2. package/README.md +10 -10
  3. package/build/js/index.js +1 -1
  4. package/package.json +49 -49
  5. package/src/js/app.js +76 -75
  6. package/src/js/components/_info.js +8 -8
  7. package/src/js/components/base/_info.js +3 -3
  8. package/src/js/components/base/controller.js +78 -78
  9. package/src/js/components/debug/_info.js +6 -6
  10. package/src/js/components/debug/controller.js +38 -38
  11. package/src/js/components/debug/coords.js +23 -23
  12. package/src/js/components/debug/fps.js +34 -34
  13. package/src/js/components/debug/template.js +33 -33
  14. package/src/js/components/deviceRotate/_info.js +3 -3
  15. package/src/js/components/deviceRotate/controller.js +86 -86
  16. package/src/js/components/fullscreen/_info.js +6 -6
  17. package/src/js/components/fullscreen/android.js +104 -104
  18. package/src/js/components/fullscreen/controller.js +64 -64
  19. package/src/js/components/fullscreen/desktop.js +49 -49
  20. package/src/js/components/fullscreen/ios.js +111 -111
  21. package/src/js/components/loader/_info.js +4 -4
  22. package/src/js/components/loader/controller.js +66 -66
  23. package/src/js/components/loader/template.js +70 -70
  24. package/src/js/components/soundInitialPopup/_info.js +3 -3
  25. package/src/js/components/soundInitialPopup/controller.js +42 -42
  26. package/src/js/components/soundInitialPopup/template.js +109 -109
  27. package/src/js/components/stateDriven/_info.js +4 -3
  28. package/src/js/components/stateDriven/actionConfig.js +7 -0
  29. package/src/js/components/stateDriven/controller.js +61 -52
  30. package/src/js/config/load.js +5 -5
  31. package/src/js/config/main.js +9 -8
  32. package/src/js/extra/_info.js +22 -22
  33. package/src/js/extra/browserEvents.js +32 -32
  34. package/src/js/index.js +8 -8
  35. package/src/js/lib/_info.js +13 -13
  36. package/src/js/lib/cache.js +98 -98
  37. package/src/js/lib/composition.js +89 -89
  38. package/src/js/lib/device.js +1276 -1276
  39. package/src/js/lib/helper.js +513 -513
  40. package/src/js/lib/loader.js +121 -100
  41. package/src/js/lib/localData.js +15 -15
  42. package/src/js/lib/logger.js +22 -22
  43. package/src/js/lib/math.js +20 -20
  44. package/src/js/lib/objectPool.js +54 -54
  45. package/src/js/lib/time.js +18 -18
  46. package/src/js/lib/tween.js +147 -147
  47. package/src/js/modules/_info.js +11 -11
  48. package/src/js/modules/assets/_info.js +7 -7
  49. package/src/js/modules/assets/baseModel.js +18 -18
  50. package/src/js/modules/assets/config.js +35 -25
  51. package/src/js/modules/assets/controller.js +37 -21
  52. package/src/js/modules/assets/models/_info.js +12 -12
  53. package/src/js/modules/assets/models/atlas.js +8 -8
  54. package/src/js/modules/assets/models/audiosprite.js +27 -27
  55. package/src/js/modules/assets/models/bitmapFont.js +8 -8
  56. package/src/js/modules/assets/models/container.js +16 -16
  57. package/src/js/modules/assets/models/dragonBones.js +26 -26
  58. package/src/js/modules/assets/models/font.js +8 -8
  59. package/src/js/modules/assets/models/image.js +14 -14
  60. package/src/js/modules/assets/models/json.js +8 -8
  61. package/src/js/modules/assets/models/sound.js +14 -14
  62. package/src/js/modules/assets/models/spine.js +8 -8
  63. package/src/js/modules/assets/service.js +330 -303
  64. package/src/js/modules/instances/_info.js +3 -3
  65. package/src/js/modules/instances/controller.js +218 -218
  66. package/src/js/modules/logic/_info.js +5 -5
  67. package/src/js/modules/logic/buttons.js +120 -120
  68. package/src/js/modules/logic/config/_info.js +3 -3
  69. package/src/js/modules/logic/config/buttons.js +63 -63
  70. package/src/js/modules/logic/config/sounds.js +23 -23
  71. package/src/js/modules/logic/controller.js +48 -48
  72. package/src/js/modules/logic/sounds.js +96 -96
  73. package/src/js/modules/objects/_info.js +11 -11
  74. package/src/js/modules/objects/baseModel.js +161 -161
  75. package/src/js/modules/objects/cache.js +99 -99
  76. package/src/js/modules/objects/controller.js +115 -115
  77. package/src/js/modules/objects/create.js +231 -231
  78. package/src/js/modules/objects/find.js +140 -140
  79. package/src/js/modules/objects/models/_info.js +20 -20
  80. package/src/js/modules/objects/models/atlasImage.js +50 -50
  81. package/src/js/modules/objects/models/bitmapText.js +23 -23
  82. package/src/js/modules/objects/models/button.js +184 -184
  83. package/src/js/modules/objects/models/buttonComposite.js +35 -35
  84. package/src/js/modules/objects/models/collection.js +54 -54
  85. package/src/js/modules/objects/models/component.js +44 -44
  86. package/src/js/modules/objects/models/container.js +19 -19
  87. package/src/js/modules/objects/models/dragonBones.js +250 -250
  88. package/src/js/modules/objects/models/emitter.js +54 -54
  89. package/src/js/modules/objects/models/graphics.js +38 -38
  90. package/src/js/modules/objects/models/group.js +19 -19
  91. package/src/js/modules/objects/models/hitArea.js +104 -104
  92. package/src/js/modules/objects/models/image.js +34 -34
  93. package/src/js/modules/objects/models/imagesAnimation.js +113 -113
  94. package/src/js/modules/objects/models/mask.js +38 -38
  95. package/src/js/modules/objects/models/spine.js +83 -83
  96. package/src/js/modules/objects/models/text.js +38 -38
  97. package/src/js/modules/objects/models/world.js +19 -19
  98. package/src/js/modules/objects/propertyAdapter.js +416 -416
  99. package/src/js/modules/objects/proxy.js +179 -179
  100. package/src/js/modules/objects/styles.js +116 -116
  101. package/src/js/modules/observer/_info.js +4 -4
  102. package/src/js/modules/observer/controller.js +99 -99
  103. package/src/js/modules/observer/events.js +28 -28
  104. package/src/js/modules/scenes/_info.js +8 -8
  105. package/src/js/modules/scenes/controller.js +34 -34
  106. package/src/js/modules/scenes/model.js +35 -35
  107. package/src/js/modules/scenes/pixiWrapper.js +194 -194
  108. package/src/js/modules/scenes/resolutions.js +161 -161
  109. package/src/js/modules/scenes/resolutionsConfig.js +73 -73
  110. package/src/js/modules/scenes/service.js +84 -84
  111. package/src/js/modules/soundManager/_info.js +3 -3
  112. package/src/js/modules/soundManager/controller.js +99 -99
  113. package/src/js/modules/soundManager/soundSprite.js +202 -202
  114. package/src/js/modules/statesManager/_info.js +12 -12
  115. package/src/js/modules/statesManager/action.js +55 -113
  116. package/src/js/modules/statesManager/actions/_info.js +3 -3
  117. package/src/js/modules/statesManager/all.js +23 -23
  118. package/src/js/modules/statesManager/configStates.js +71 -86
  119. package/src/js/modules/statesManager/controller.js +132 -91
  120. package/src/js/modules/statesManager/functionsStorage.js +83 -0
  121. package/src/js/modules/statesManager/helper.js +27 -37
  122. package/src/js/modules/statesManager/race.js +75 -80
  123. package/src/js/modules/statesManager/sequence.js +47 -47
  124. package/src/js/modules/template/_info.js +6 -6
  125. package/src/js/modules/template/controller.js +28 -28
  126. package/src/js/modules/template/model.js +11 -11
  127. package/src/js/modules/template/service.js +125 -122
  128. package/src/js/modules/template/types.js +41 -41
  129. package/src/js/modules/transport/_info.js +8 -8
  130. package/src/js/modules/transport/baseConnectionType.js +24 -24
  131. package/src/js/modules/transport/config.js +22 -22
  132. package/src/js/modules/transport/connectionTypes/_info.js +3 -3
  133. package/src/js/modules/transport/connectionTypes/websocket.js +74 -74
  134. package/src/js/modules/transport/connectionTypes/xhr.js +41 -41
  135. package/src/js/modules/transport/controller.js +48 -48
  136. package/src/js/modules/transport/decorator.js +16 -16
  137. package/src/js/modules/transport/service.js +138 -138
  138. package/src/js/templates/_info.js +4 -4
  139. package/src/js/templates/groups/_info.js +1 -1
  140. package/src/js/templates/scenes/_info.js +1 -1
  141. package/webpack.config.js +47 -47
  142. package/src/js/modules/statesManager/actionModel.js +0 -48
  143. package/src/js/modules/statesManager/configActions.js +0 -54
@@ -1,303 +1,330 @@
1
- class ModulesAssetsService {
2
- constructor() {
3
- this.singleton = true;
4
-
5
- this.assets = {};
6
-
7
- this._addedAssetsCache = [];
8
- };
9
-
10
- sortAssets(assets) {
11
- this.assets[this.getInstance('Config').loadingGroups.initial] = [];
12
-
13
- if (Array.isArray(assets))
14
- for (let asset of assets)
15
- this._addAsset(asset);
16
- else
17
- this._addAsset(assets);
18
- }
19
-
20
- startLoad(callback) {
21
- this.loadGroup(
22
- this.getInstance('Config').loadingGroups.initial,
23
- (() => { callback(); this._continueLazyLoad(); }).bind(this)
24
- )
25
- }
26
-
27
- loadUpdate(param) {
28
- Urso.scenes.loadUpdate(Math.floor(param.progress));
29
- }
30
-
31
- loadGroup(group, callback) {
32
- if (!this.assets[group])
33
- return Urso.logger.error('ModulesAssetsService group error, no assets:' + group + ' Check ModulesAssetsConfig please');
34
-
35
- //we need load and parse atlases at first (!)
36
- this._loadGroupAtlases(group, () => { this._loadGroupRestAssets(group, callback) });
37
- }
38
-
39
- _loadGroupAtlases(group, callback) {
40
- const atlases = this.assets[group].filter(assetModel => assetModel.type === Urso.types.assets.ATLAS);
41
-
42
- if (!atlases.length)
43
- return callback();
44
-
45
- let loader = Urso.getInstance('Lib.Loader');
46
-
47
- for (let assetModel of atlases)
48
- this._addAssetToLoader(assetModel, loader);
49
-
50
- loader.start(() => { this._processLoadedAtlases(group); callback(); });
51
- }
52
-
53
- _loadGroupRestAssets(group, callback) {
54
- let loader = Urso.getInstance('Lib.Loader');
55
- loader.setOnLoadUpdate(this.loadUpdate.bind(this));
56
-
57
- for (let assetModel of this.assets[group])
58
- if (assetModel.type !== Urso.types.assets.ATLAS)
59
- if (!Urso.cache.getFile(assetModel.path))
60
- this._addAssetToLoader(assetModel, loader);
61
-
62
- loader.start(() => { this._processLoadedAssets(group); this.emit(Urso.events.MODULES_ASSETS_GROUP_LOADED, group); callback(); });
63
- }
64
-
65
- _processLoadedAtlases(group) {
66
- const atlases = this.assets[group].filter(assetModel => assetModel.type === Urso.types.assets.ATLAS);
67
-
68
- for (let assetModel of atlases) {
69
- const assetKey = assetModel.key;
70
- let imageData = Urso.cache.getAtlas(assetKey);
71
- const folderPath = imageData.url.split('/').slice(0, -1).join('/');
72
-
73
- for (let i = 0; i < imageData.spritesheet._frames.length; i++) {
74
- let frame = imageData.spritesheet._frames[i];
75
- let texture = imageData.textures[i];
76
- let newFilename = frame.filename;
77
-
78
- if(frame.filename.indexOf('/') === -1)
79
- newFilename = folderPath + '/' + frame.filename;
80
-
81
- Urso.cache.addFile(newFilename, texture);
82
- }
83
- }
84
- }
85
-
86
- _processLoadedAssets(group) {
87
- for (let assetModel of this.assets[group]) {
88
- if (assetModel.type === Urso.types.assets.IMAGE)
89
- this._processLoadedImage(assetModel);
90
-
91
- if (assetModel.type === Urso.types.assets.BITMAPFONT)
92
- this._processLoadedBitmapFont(assetModel);
93
-
94
- if (assetModel.type === Urso.types.assets.FONT)
95
- this._processLoadedFont(assetModel);
96
- }
97
-
98
- delete this.assets[group];
99
- }
100
-
101
- _processLoadedFont(source) {
102
- const data = Urso.cache.getFile(source.key);
103
- const font = new FontFace(source.key, data.data);
104
- font.load().then(() => {
105
- document.fonts.add(font);
106
- });
107
- }
108
-
109
- _processLoadedBitmapFont(assetModel) {
110
- this._updateFontKey(assetModel.key)
111
- }
112
-
113
- _updateFontKey(fontName) {
114
- const fontData = Urso.cache.getBitmapFont(fontName);
115
-
116
- if (PIXI.BitmapFont.available[fontName] || !fontData)
117
- return;
118
-
119
- const savedFont = PIXI.BitmapFont.available[fontData.bitmapFont.font];
120
-
121
- if (savedFont) {
122
- PIXI.BitmapFont.available[fontName] = savedFont;
123
- delete PIXI.BitmapFont.available[fontData.bitmapFont.font];
124
- }
125
- }
126
-
127
- _processLoadedImage(assetModel) {
128
- const { params, current } = this._getQualityParams();
129
- let imageQualityKey = assetModel.useBinPath;
130
-
131
- if (imageQualityKey === true)
132
- imageQualityKey = current;
133
-
134
- let qualityTextureResolution = params[imageQualityKey] || 1;
135
-
136
- const assetKey = assetModel.key;
137
- //textures cache
138
- let imageData = Urso.cache.getImage(assetKey);
139
-
140
- if (!imageData) {
141
- //from atlas ?!
142
- let texture = Urso.cache.getFile(assetModel.path);
143
-
144
- if (!texture)
145
- return Urso.logger.error('ModulesAssetsService process Loaded Image error: no image ', assetModel);
146
-
147
- Urso.cache.addTexture(assetKey, texture); //TODO change resolution of base texture
148
- } else {
149
- //regular image
150
- const baseTexture = new PIXI.BaseTexture(imageData.data, { resolution: qualityTextureResolution });
151
- const texture = new PIXI.Texture(baseTexture);
152
- Urso.cache.addTexture(assetKey, texture);
153
- }
154
-
155
- if (assetModel.preloadGPU) {
156
- let tempOblect = Urso.objects.create({
157
- type: Urso.types.objects.IMAGE,
158
- assetKey: assetKey,
159
- x: -10000, y: -10000
160
- }, false, true);
161
-
162
- setTimeout(() => { tempOblect.destroy() }, 1)
163
- }
164
- }
165
-
166
- _addAsset(asset, loadingGroup) {
167
- //cache for all assets. We do not need to load same assets twice or more
168
- if (asset.type !== Urso.types.assets.CONTAINER) {
169
- let addedAssetKey = `${asset.type}_${asset.key}`;
170
-
171
- if (this._addedAssetsCache.includes(addedAssetKey))
172
- return;
173
-
174
- this._addedAssetsCache.push(addedAssetKey);
175
- }
176
-
177
- let model;
178
-
179
- switch (asset.type) {
180
- case Urso.types.assets.IMAGE:
181
- model = this.getInstance('Models.Image', asset)
182
- break;
183
- case Urso.types.assets.CONTAINER:
184
- model = this.getInstance('Models.Container', asset)
185
- break;
186
- case Urso.types.assets.DRAGONBONES:
187
- model = this.getInstance('Models.DragonBones', asset)
188
- break;
189
- case Urso.types.assets.ATLAS:
190
- model = this.getInstance('Models.Atlas', asset)
191
- break;
192
- case Urso.types.assets.AUDIOSPRITE:
193
- model = this.getInstance('Models.Audiosprite', asset)
194
- break;
195
- case Urso.types.assets.JSON:
196
- model = this.getInstance('Models.Json', asset)
197
- break;
198
- case Urso.types.assets.SPINE:
199
- model = this.getInstance('Models.Spine', asset)
200
- break;
201
- case Urso.types.assets.BITMAPFONT:
202
- model = this.getInstance('Models.BitmapFont', asset)
203
- break;
204
- case Urso.types.assets.FONT:
205
- model = this.getInstance('Models.Font', asset)
206
- break;
207
- case Urso.types.assets.SOUND:
208
- model = this.getInstance('Models.Sound', asset)
209
- break;
210
- default:
211
- Urso.logger.error('ModulesAssetsService asset type error', asset);
212
- break;
213
- };
214
-
215
- //set loadingGroup
216
- model.loadingGroup = loadingGroup || model.loadingGroup || this.getInstance('Config').loadingGroups.initial;
217
-
218
- //setup path if its need
219
- this._setQualityPath(model); //TODO adapt for dragonbones
220
-
221
- //check if container or dragonbones
222
- if (model.contents) {
223
- for (let content of model.contents) {
224
- this._addAsset(content, model.loadingGroup);
225
- }
226
-
227
- return;
228
- }
229
-
230
- //add single asset to loading group
231
- if (!this.assets[model.loadingGroup])
232
- this.assets[model.loadingGroup] = [];
233
-
234
- this.assets[model.loadingGroup].push(model);
235
- }
236
-
237
- _continueLazyLoad(step) {
238
- if (!step)
239
- step = 0;
240
-
241
- const lazyLoadGroups = this.getInstance('Config').lazyLoadGroups;
242
-
243
- if (step >= lazyLoadGroups.length) {
244
- this.emit(Urso.events.MODULES_ASSETS_LAZYLOAD_FINISHED);
245
- return;
246
- }
247
-
248
- let groupName = lazyLoadGroups[step];
249
-
250
- if (!groupName)
251
- Urso.logger.error('ModulesAssetsService lazy loading groupName error');
252
-
253
- this.loadGroup(groupName, () => { this._continueLazyLoad(step + 1); })
254
- }
255
-
256
- // TODO: MOVE TO CFG OR HELPER?
257
- _getQualityParams() {
258
- const params = {
259
- high: 1,
260
- hd: 0.75,
261
- medium: 0.5,
262
- low: 0.25
263
- }
264
- const current = 'hd';
265
- return { params, current };
266
- }
267
-
268
- _setQualityPath(asset) {
269
- if (!asset.useBinPath)
270
- return;
271
-
272
- const { params, current } = this._getQualityParams();
273
-
274
- const setQuality = asset => {
275
- const qualityPath = (typeof asset.useBinPath === 'string' && params[asset.useBinPath]) ? asset.useBinPath : current;
276
- asset.path = asset.path.replace('assets', `bin/${qualityPath}`);
277
- }
278
-
279
- if (!asset.contents) {
280
- setQuality(asset);
281
- return;
282
- }
283
-
284
- for (const childAsset of asset.contents) {
285
- const binPath = (childAsset.useBinPath && childAsset.useBinPath !== asset.useBinPath)
286
- ? childAsset.useBinPath : asset.useBinPath;
287
-
288
- childAsset.useBinPath = binPath;
289
- setQuality(childAsset);
290
- }
291
- }
292
-
293
- _addAssetToLoader(assetModel, loader) {
294
- if (assetModel.path)
295
- loader.addAsset(assetModel);
296
- else if (assetModel.contents) {
297
- //do nothing, its a container
298
- } else
299
- Urso.logger.error('ModulesAssetsService model error', assetModel);
300
- };
301
- }
302
-
303
- module.exports = ModulesAssetsService;
1
+ class ModulesAssetsService {
2
+ constructor() {
3
+ this.singleton = true;
4
+
5
+ this.assets = {};
6
+
7
+ this._currentQuality = 'auto';
8
+ this._addedAssetsCache = [];
9
+ };
10
+
11
+ getQuality(){
12
+ return this._currentQuality;
13
+ }
14
+
15
+ updateQuality(){
16
+ this._currentQuality = this._detectQuality();
17
+ Urso.addInstancesMode(this._currentQuality);
18
+ }
19
+
20
+ sortAssets(assets) {
21
+ this.assets[this.getInstance('Config').loadingGroups.initial] = [];
22
+
23
+ if (Array.isArray(assets))
24
+ for (let asset of assets)
25
+ this._addAsset(asset);
26
+ else
27
+ this._addAsset(assets);
28
+ }
29
+
30
+ startLoad(callback) {
31
+ this.loadGroup(
32
+ this.getInstance('Config').loadingGroups.initial,
33
+ (() => { callback(); this._continueLazyLoad(); }).bind(this)
34
+ )
35
+ }
36
+
37
+ loadUpdate(param) {
38
+ Urso.scenes.loadUpdate(Math.floor(param.progress));
39
+ }
40
+
41
+ loadGroup(group, callback) {
42
+ if (!this.assets[group])
43
+ return Urso.logger.error('ModulesAssetsService group error, no assets:' + group + ' Check ModulesAssetsConfig please');
44
+
45
+ //we need load and parse atlases at first (!)
46
+ this._loadGroupAtlases(group, () => { this._loadGroupRestAssets(group, callback) });
47
+ }
48
+
49
+ _loadGroupAtlases(group, callback) {
50
+ const atlases = this.assets[group].filter(assetModel => assetModel.type === Urso.types.assets.ATLAS);
51
+
52
+ if (!atlases.length)
53
+ return callback();
54
+
55
+ let loader = Urso.getInstance('Lib.Loader');
56
+
57
+ for (let assetModel of atlases)
58
+ this._addAssetToLoader(assetModel, loader);
59
+
60
+ loader.start(() => { this._processLoadedAtlases(group); callback(); });
61
+ }
62
+
63
+ _loadGroupRestAssets(group, callback) {
64
+ let loader = Urso.getInstance('Lib.Loader');
65
+ loader.setOnLoadUpdate(this.loadUpdate.bind(this));
66
+
67
+ for (let assetModel of this.assets[group])
68
+ if (assetModel.type !== Urso.types.assets.ATLAS)
69
+ if (!Urso.cache.getFile(assetModel.path))
70
+ this._addAssetToLoader(assetModel, loader);
71
+
72
+ loader.start(() => { this._processLoadedAssets(group); this.emit(Urso.events.MODULES_ASSETS_GROUP_LOADED, group); callback(); });
73
+ }
74
+
75
+ _processLoadedAtlases(group) {
76
+ const atlases = this.assets[group].filter(assetModel => assetModel.type === Urso.types.assets.ATLAS);
77
+
78
+ for (let assetModel of atlases) {
79
+ const assetKey = assetModel.key;
80
+ let imageData = Urso.cache.getAtlas(assetKey);
81
+ const folderPath = imageData.url.split('/').slice(0, -1).join('/');
82
+
83
+ for (let i = 0; i < imageData.spritesheet._frames.length; i++) {
84
+ let frame = imageData.spritesheet._frames[i];
85
+ let texture = imageData.textures[i];
86
+ let newFilename = frame.filename;
87
+
88
+ if(frame.filename.indexOf('/') === -1)
89
+ newFilename = folderPath + '/' + frame.filename;
90
+
91
+ Urso.cache.addFile(newFilename, texture);
92
+ }
93
+ }
94
+ }
95
+
96
+ _processLoadedAssets(group) {
97
+ for (let assetModel of this.assets[group]) {
98
+ if (assetModel.type === Urso.types.assets.IMAGE)
99
+ this._processLoadedImage(assetModel);
100
+
101
+ if (assetModel.type === Urso.types.assets.BITMAPFONT)
102
+ this._processLoadedBitmapFont(assetModel);
103
+
104
+ if (assetModel.type === Urso.types.assets.FONT)
105
+ this._processLoadedFont(assetModel);
106
+ }
107
+
108
+ delete this.assets[group];
109
+ }
110
+
111
+ _processLoadedFont(source) {
112
+ const data = Urso.cache.getFile(source.key);
113
+ const font = new FontFace(source.key, data.data);
114
+ font.load().then(() => {
115
+ document.fonts.add(font);
116
+ });
117
+ }
118
+
119
+ _processLoadedBitmapFont(assetModel) {
120
+ this._updateFontKey(assetModel.key)
121
+ }
122
+
123
+ _updateFontKey(fontName) {
124
+ const fontData = Urso.cache.getBitmapFont(fontName);
125
+
126
+ if (PIXI.BitmapFont.available[fontName] || !fontData)
127
+ return;
128
+
129
+ const savedFont = PIXI.BitmapFont.available[fontData.bitmapFont.font];
130
+
131
+ if (savedFont) {
132
+ PIXI.BitmapFont.available[fontName] = savedFont;
133
+ delete PIXI.BitmapFont.available[fontData.bitmapFont.font];
134
+ }
135
+ }
136
+
137
+ _processLoadedImage(assetModel) {
138
+ const { qualityFactors } = this.getInstance('Config');
139
+
140
+ const resolution = qualityFactors[this._currentQuality] || 1;
141
+
142
+ const assetKey = assetModel.key;
143
+ //textures cache
144
+ let imageData = Urso.cache.getImage(assetKey);
145
+
146
+ if (!imageData) {
147
+ //from atlas ?!
148
+ let texture = Urso.cache.getFile(assetModel.path);
149
+
150
+ if (!texture)
151
+ return Urso.logger.error('ModulesAssetsService process Loaded Image error: no image ', assetModel);
152
+
153
+ Urso.cache.addTexture(assetKey, texture); //TODO change resolution of base texture
154
+ } else {
155
+ //regular image
156
+ const baseTexture = new PIXI.BaseTexture(imageData.data, { resolution });
157
+ const texture = new PIXI.Texture(baseTexture);
158
+ Urso.cache.addTexture(assetKey, texture);
159
+ }
160
+
161
+ if (assetModel.preloadGPU) {
162
+ let tempOblect = Urso.objects.create({
163
+ type: Urso.types.objects.IMAGE,
164
+ assetKey: assetKey,
165
+ x: -10000, y: -10000
166
+ }, false, true);
167
+
168
+ setTimeout(() => { tempOblect.destroy() }, 1)
169
+ }
170
+ }
171
+
172
+ _addAsset(asset, loadingGroup) {
173
+ //cache for all assets. We do not need to load same assets twice or more
174
+ if (asset.type !== Urso.types.assets.CONTAINER) {
175
+ let addedAssetKey = `${asset.type}_${asset.key}`;
176
+
177
+ if (this._addedAssetsCache.includes(addedAssetKey))
178
+ return;
179
+
180
+ this._addedAssetsCache.push(addedAssetKey);
181
+ }
182
+
183
+ let model;
184
+
185
+ switch (asset.type) {
186
+ case Urso.types.assets.IMAGE:
187
+ model = this.getInstance('Models.Image', asset)
188
+ break;
189
+ case Urso.types.assets.CONTAINER:
190
+ model = this.getInstance('Models.Container', asset)
191
+ break;
192
+ case Urso.types.assets.DRAGONBONES:
193
+ model = this.getInstance('Models.DragonBones', asset)
194
+ break;
195
+ case Urso.types.assets.ATLAS:
196
+ model = this.getInstance('Models.Atlas', asset)
197
+ break;
198
+ case Urso.types.assets.AUDIOSPRITE:
199
+ model = this.getInstance('Models.Audiosprite', asset)
200
+ break;
201
+ case Urso.types.assets.JSON:
202
+ model = this.getInstance('Models.Json', asset)
203
+ break;
204
+ case Urso.types.assets.SPINE:
205
+ model = this.getInstance('Models.Spine', asset)
206
+ break;
207
+ case Urso.types.assets.BITMAPFONT:
208
+ model = this.getInstance('Models.BitmapFont', asset)
209
+ break;
210
+ case Urso.types.assets.FONT:
211
+ model = this.getInstance('Models.Font', asset)
212
+ break;
213
+ case Urso.types.assets.SOUND:
214
+ model = this.getInstance('Models.Sound', asset)
215
+ break;
216
+ default:
217
+ Urso.logger.error('ModulesAssetsService asset type error', asset);
218
+ break;
219
+ };
220
+
221
+ //set loadingGroup
222
+ model.loadingGroup = loadingGroup || model.loadingGroup || this.getInstance('Config').loadingGroups.initial;
223
+
224
+ //check if container or dragonbones
225
+ if (model.contents) {
226
+ for (let content of model.contents) {
227
+ this._addAsset(content, model.loadingGroup);
228
+ }
229
+
230
+ return;
231
+ }
232
+
233
+ //add single asset to loading group
234
+ if (!this.assets[model.loadingGroup])
235
+ this.assets[model.loadingGroup] = [];
236
+
237
+ this.assets[model.loadingGroup].push(model);
238
+ }
239
+
240
+ _continueLazyLoad(step) {
241
+ if (!step)
242
+ step = 0;
243
+
244
+ const lazyLoadGroups = this.getInstance('Config').lazyLoadGroups;
245
+
246
+ if (step >= lazyLoadGroups.length) {
247
+ this.emit(Urso.events.MODULES_ASSETS_LAZYLOAD_FINISHED);
248
+ return;
249
+ }
250
+
251
+ let groupName = lazyLoadGroups[step];
252
+
253
+ if (!groupName)
254
+ Urso.logger.error('ModulesAssetsService lazy loading groupName error');
255
+
256
+ this.loadGroup(groupName, () => { this._continueLazyLoad(step + 1); })
257
+ }
258
+
259
+ _qualityReducer(qualityFactors, widthFactor){
260
+ return [(acc, val) => {
261
+ if (acc === null) {
262
+ return val;
263
+ }
264
+
265
+ const currentQuality = qualityFactors[acc];
266
+ const qualityFactor = qualityFactors[val];
267
+
268
+ const nextQuality = (currentQuality > qualityFactor && qualityFactor >= widthFactor)
269
+ || (qualityFactor >= widthFactor && widthFactor > currentQuality)
270
+ || (widthFactor >= qualityFactor && qualityFactor > currentQuality);
271
+
272
+ return nextQuality ? val : acc;
273
+
274
+ }, null]
275
+ }
276
+
277
+ _detectQuality(){
278
+ const { qualityFactors } = this.getInstance('Config');
279
+ const userQuality = Urso.helper.parseGetParams()['quality'];
280
+
281
+ if(userQuality && qualityFactors[userQuality]){
282
+ return userQuality;
283
+ }
284
+
285
+ return this._calculateQuality(qualityFactors);
286
+ }
287
+
288
+ _calculateQuality(qualityFactors){
289
+ const { android, iOS, iPad, macOS } = Urso.device;
290
+ const isMobile = android || iOS || iPad;
291
+
292
+ if (macOS && !isMobile) {
293
+ return 'high';
294
+ }
295
+
296
+ if(macOS && iPad) {
297
+ return 'medium';
298
+ }
299
+
300
+ const resCfg = Urso.getInstance('Modules.Scenes.ResolutionsConfig').contents[0];
301
+
302
+ const { devicePixelRatio } = window;
303
+ let { width, height } = screen;
304
+
305
+ if (isMobile) {
306
+ width = (width > height) ? width : height;
307
+ }
308
+
309
+ if (iOS) {
310
+ width *= devicePixelRatio;
311
+ }
312
+
313
+ const widthFactor = width / resCfg.width;
314
+
315
+ return Object
316
+ .keys(qualityFactors)
317
+ .reduce(...this._qualityReducer(qualityFactors, widthFactor));
318
+ }
319
+
320
+ _addAssetToLoader(assetModel, loader) {
321
+ if (assetModel.path)
322
+ loader.addAsset(assetModel);
323
+ else if (assetModel.contents) {
324
+ //do nothing, its a container
325
+ } else
326
+ Urso.logger.error('ModulesAssetsService model error', assetModel);
327
+ };
328
+ }
329
+
330
+ module.exports = ModulesAssetsService;
@@ -1,3 +1,3 @@
1
- Urso.Core.Modules.Instances = {
2
- Controller: require('./controller.js')
3
- };
1
+ Urso.Core.Modules.Instances = {
2
+ Controller: require('./controller.js')
3
+ };