@urso/core 0.6.15 → 0.6.16

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 (156) hide show
  1. package/.babelrc +11 -11
  2. package/LICENSE +20 -20
  3. package/README.md +227 -227
  4. package/build/js/index.js +1 -1
  5. package/build/js/index.js.LICENSE.txt +38 -222
  6. package/package.json +52 -52
  7. package/src/js/app.js +79 -79
  8. package/src/js/components/_info.js +11 -11
  9. package/src/js/components/base/_info.js +3 -3
  10. package/src/js/components/base/controller.js +78 -78
  11. package/src/js/components/debug/_info.js +7 -7
  12. package/src/js/components/debug/controller.js +38 -38
  13. package/src/js/components/debug/coords.js +23 -23
  14. package/src/js/components/debug/fps.js +36 -36
  15. package/src/js/components/debug/template.js +55 -55
  16. package/src/js/components/debug/timescale.js +60 -60
  17. package/src/js/components/deviceRotate/_info.js +3 -3
  18. package/src/js/components/deviceRotate/controller.js +86 -86
  19. package/src/js/components/fullscreen/_info.js +6 -6
  20. package/src/js/components/fullscreen/android.js +104 -104
  21. package/src/js/components/fullscreen/controller.js +76 -76
  22. package/src/js/components/fullscreen/desktop.js +49 -49
  23. package/src/js/components/fullscreen/ios.js +115 -115
  24. package/src/js/components/layersSwitcher/_info.js +4 -4
  25. package/src/js/components/layersSwitcher/config.js +26 -26
  26. package/src/js/components/layersSwitcher/controller.js +34 -34
  27. package/src/js/components/loader/_info.js +4 -4
  28. package/src/js/components/loader/controller.js +65 -65
  29. package/src/js/components/loader/template.js +70 -70
  30. package/src/js/components/soundInitialPopup/_info.js +3 -3
  31. package/src/js/components/soundInitialPopup/controller.js +42 -42
  32. package/src/js/components/soundInitialPopup/template.js +109 -109
  33. package/src/js/components/stateDriven/_info.js +3 -3
  34. package/src/js/components/stateDriven/controller.js +118 -118
  35. package/src/js/config/load.js +5 -5
  36. package/src/js/config/main.js +16 -16
  37. package/src/js/extra/_info.js +26 -26
  38. package/src/js/extra/browserEvents.js +51 -51
  39. package/src/js/extra/pixiPatch.js +150 -150
  40. package/src/js/extra/setTimeout.js +7 -7
  41. package/src/js/index.js +8 -8
  42. package/src/js/lib/_info.js +13 -13
  43. package/src/js/lib/cache.js +105 -105
  44. package/src/js/lib/composition.js +85 -85
  45. package/src/js/lib/device.js +1286 -1286
  46. package/src/js/lib/helper.js +556 -556
  47. package/src/js/lib/loader.js +136 -136
  48. package/src/js/lib/localData.js +15 -15
  49. package/src/js/lib/logger.js +69 -69
  50. package/src/js/lib/math.js +35 -35
  51. package/src/js/lib/objectPool.js +203 -203
  52. package/src/js/lib/time.js +18 -18
  53. package/src/js/lib/tween.js +147 -147
  54. package/src/js/modules/_info.js +12 -12
  55. package/src/js/modules/assets/_info.js +7 -7
  56. package/src/js/modules/assets/baseModel.js +20 -20
  57. package/src/js/modules/assets/config.js +37 -37
  58. package/src/js/modules/assets/controller.js +46 -46
  59. package/src/js/modules/assets/models/_info.js +11 -11
  60. package/src/js/modules/assets/models/atlas.js +8 -8
  61. package/src/js/modules/assets/models/audiosprite.js +27 -27
  62. package/src/js/modules/assets/models/bitmapFont.js +8 -8
  63. package/src/js/modules/assets/models/container.js +16 -16
  64. package/src/js/modules/assets/models/font.js +8 -8
  65. package/src/js/modules/assets/models/image.js +15 -15
  66. package/src/js/modules/assets/models/json.js +8 -8
  67. package/src/js/modules/assets/models/sound.js +14 -14
  68. package/src/js/modules/assets/models/spine.js +14 -14
  69. package/src/js/modules/assets/service.js +366 -366
  70. package/src/js/modules/i18n/_info.js +4 -4
  71. package/src/js/modules/i18n/config.js +17 -17
  72. package/src/js/modules/i18n/controller.js +79 -79
  73. package/src/js/modules/instances/_info.js +3 -3
  74. package/src/js/modules/instances/controller.js +357 -357
  75. package/src/js/modules/logic/_info.js +4 -4
  76. package/src/js/modules/logic/config/_info.js +2 -2
  77. package/src/js/modules/logic/config/sounds.js +23 -23
  78. package/src/js/modules/logic/controller.js +48 -48
  79. package/src/js/modules/logic/sounds.js +103 -103
  80. package/src/js/modules/objects/_info.js +13 -13
  81. package/src/js/modules/objects/baseModel.js +200 -200
  82. package/src/js/modules/objects/cache.js +99 -99
  83. package/src/js/modules/objects/controller.js +131 -131
  84. package/src/js/modules/objects/find.js +58 -58
  85. package/src/js/modules/objects/models/_info.js +27 -27
  86. package/src/js/modules/objects/models/atlasImage.js +50 -50
  87. package/src/js/modules/objects/models/bitmapText.js +37 -37
  88. package/src/js/modules/objects/models/button.js +189 -189
  89. package/src/js/modules/objects/models/buttonComposite.js +35 -35
  90. package/src/js/modules/objects/models/checkbox.js +96 -96
  91. package/src/js/modules/objects/models/collection.js +54 -54
  92. package/src/js/modules/objects/models/component.js +46 -46
  93. package/src/js/modules/objects/models/container.js +19 -19
  94. package/src/js/modules/objects/models/dragContainer.js +667 -667
  95. package/src/js/modules/objects/models/emitter.js +67 -67
  96. package/src/js/modules/objects/models/emitterFx.js +99 -99
  97. package/src/js/modules/objects/models/graphics.js +38 -38
  98. package/src/js/modules/objects/models/group.js +19 -19
  99. package/src/js/modules/objects/models/hitArea.js +104 -104
  100. package/src/js/modules/objects/models/image.js +34 -34
  101. package/src/js/modules/objects/models/imagesAnimation.js +113 -113
  102. package/src/js/modules/objects/models/mask.js +38 -38
  103. package/src/js/modules/objects/models/nineSlicePlane.js +30 -30
  104. package/src/js/modules/objects/models/scrollbox.js +64 -64
  105. package/src/js/modules/objects/models/slider.js +253 -253
  106. package/src/js/modules/objects/models/spine.js +296 -287
  107. package/src/js/modules/objects/models/text.js +59 -59
  108. package/src/js/modules/objects/models/textInput.js +66 -66
  109. package/src/js/modules/objects/models/toggle.js +180 -180
  110. package/src/js/modules/objects/models/world.js +19 -19
  111. package/src/js/modules/objects/propertyAdapter.js +588 -587
  112. package/src/js/modules/objects/proxy.js +294 -294
  113. package/src/js/modules/objects/selector.js +136 -136
  114. package/src/js/modules/objects/service.js +242 -242
  115. package/src/js/modules/objects/styles.js +210 -210
  116. package/src/js/modules/observer/_info.js +4 -4
  117. package/src/js/modules/observer/controller.js +99 -99
  118. package/src/js/modules/observer/events.js +52 -52
  119. package/src/js/modules/scenes/_info.js +8 -8
  120. package/src/js/modules/scenes/controller.js +119 -119
  121. package/src/js/modules/scenes/model.js +28 -28
  122. package/src/js/modules/scenes/pixiWrapper.js +336 -336
  123. package/src/js/modules/scenes/resolutions.js +173 -173
  124. package/src/js/modules/scenes/resolutionsConfig.js +73 -73
  125. package/src/js/modules/scenes/service.js +142 -142
  126. package/src/js/modules/soundManager/_info.js +3 -3
  127. package/src/js/modules/soundManager/controller.js +100 -100
  128. package/src/js/modules/soundManager/soundSprite.js +251 -251
  129. package/src/js/modules/statesManager/_info.js +12 -12
  130. package/src/js/modules/statesManager/action.js +68 -68
  131. package/src/js/modules/statesManager/actions/_info.js +3 -3
  132. package/src/js/modules/statesManager/all.js +23 -23
  133. package/src/js/modules/statesManager/configStates.js +71 -71
  134. package/src/js/modules/statesManager/controller.js +170 -170
  135. package/src/js/modules/statesManager/functionsStorage.js +82 -82
  136. package/src/js/modules/statesManager/helper.js +27 -27
  137. package/src/js/modules/statesManager/race.js +75 -75
  138. package/src/js/modules/statesManager/sequence.js +47 -47
  139. package/src/js/modules/template/_info.js +6 -6
  140. package/src/js/modules/template/controller.js +28 -28
  141. package/src/js/modules/template/model.js +11 -11
  142. package/src/js/modules/template/service.js +137 -137
  143. package/src/js/modules/template/types.js +46 -46
  144. package/src/js/modules/transport/_info.js +8 -8
  145. package/src/js/modules/transport/baseConnectionType.js +24 -24
  146. package/src/js/modules/transport/config.js +13 -13
  147. package/src/js/modules/transport/connectionTypes/_info.js +3 -3
  148. package/src/js/modules/transport/connectionTypes/websocket.js +74 -74
  149. package/src/js/modules/transport/connectionTypes/xhr.js +44 -44
  150. package/src/js/modules/transport/controller.js +48 -48
  151. package/src/js/modules/transport/decorator.js +17 -17
  152. package/src/js/modules/transport/service.js +153 -153
  153. package/src/js/templates/_info.js +4 -4
  154. package/src/js/templates/groups/_info.js +1 -1
  155. package/src/js/templates/scenes/_info.js +1 -1
  156. package/webpack.config.js +47 -47
@@ -1,336 +1,336 @@
1
- const NORMAL_FPS_COUNT = 60;
2
- const LOW_PERFORMANCE_FPS_COUNT = 30;
3
-
4
- class ModulesScenesPixiWrapper {
5
- constructor() {
6
- this.singleton = true;
7
- this._renderer;
8
-
9
- this.scenes = {};
10
- this.world;
11
-
12
- this._root;
13
- this._loaderScene;
14
-
15
- this._loopStopped = false;
16
- this._loopPaused = false;
17
- this._loopLastCall = 0;
18
-
19
- this._loop = this._loop.bind(this);
20
- this.passiveCallIntervalId = null;
21
-
22
- this._mouseCoords = { x: 0, y: 0 };
23
-
24
-
25
- this._maxFPSLimit = Urso.config.fps.limit;
26
- this._lastUpdateTime = 0;
27
- this._frames = 0;
28
- this._currentFPS = Urso.config.fps.limit;
29
- this._lastTimeCheckFPS = 0;
30
- }
31
-
32
- init() {
33
- this._setPixiSettings();
34
-
35
- //define renderer
36
- PIXI.utils.skipHello();
37
- this.renderer = new PIXI.Renderer({ preserveDrawingBuffer: true, width: 1, height: 1 });
38
- document.body.appendChild(this.renderer.view);
39
-
40
- //root and world
41
- this._root = new PIXI.Container();
42
- this._createWorld();
43
-
44
- // setup interaction
45
- this.interaction = Urso.helper.recursiveGet('plugins.interaction', this.renderer) || new PIXI.InteractionManager(this.renderer);
46
-
47
- this._loaderScene = this.getInstance('Model');
48
- this._requestAnimFrame(this._loop);
49
-
50
- this.getInstance('Resolutions');
51
- }
52
-
53
- /**
54
- * returns is scene paused
55
- * @returns {Boolean}
56
- */
57
- isPaused() {
58
- return this._loopPaused;
59
- }
60
-
61
- /**
62
- * pause scene
63
- */
64
- pause() {
65
- this._loopPaused = true;
66
- PIXI.spine.settings.GLOBAL_AUTO_UPDATE = false;
67
- }
68
-
69
- /**
70
- * resume scene
71
- */
72
- resume() {
73
- this._loopLastCall = Date.now();
74
- this._loopPaused = false;
75
- this._update();
76
- PIXI.spine.settings.GLOBAL_AUTO_UPDATE = true;
77
- }
78
-
79
- /**
80
- * resize renderer
81
- * @param {Number} width
82
- * @param {Number} height
83
- */
84
- resize(width, height) {
85
- this.renderer.resize(width, height);
86
- };
87
-
88
- /**
89
- * hide canvas
90
- */
91
- hideCanvas() {
92
- this.renderer.view.style.display = 'none';
93
- }
94
-
95
- /**
96
- * show canvas
97
- */
98
- showCanvas() {
99
- this.renderer.view.style.display = '';
100
- }
101
-
102
- /**
103
- * set world scale
104
- * @param {Number} x
105
- * @param {Number} y
106
- */
107
- setWorldScale(x, y) {
108
- this.world.scale.x = x;
109
- this.world.scale.y = y;
110
- }
111
-
112
- /**
113
- * set canvas width
114
- * @param {Number} val
115
- */
116
- setCanvasWidth(val) {
117
- this.renderer.view.style.width = val + 'px';
118
- };
119
-
120
- /**
121
- * set canvas height
122
- * @param {Number} val
123
- */
124
- setCanvasHeight(val) {
125
- this.renderer.view.style.height = val + 'px';
126
- };
127
-
128
- /**
129
- * get pixi world (main Container)
130
- * @returns {Object}
131
- */
132
- getPixiWorld() {
133
- return this.world;
134
- }
135
-
136
- /**
137
- * set new scene
138
- * @param {Object} model
139
- */
140
- setNewScene(model) {
141
- this._createWorld();
142
- this.currentScene = model;
143
- }
144
-
145
- /**
146
- * get fps
147
- * @returns {Number}
148
- */
149
- getFps() {
150
- return this._currentFPS;
151
- }
152
-
153
- /**
154
- * get fps data
155
- * @returns {Object}
156
- */
157
- getFpsData() {
158
- return {
159
- fps: this._currentFPS,
160
- limit: this._maxFPSLimit
161
- }
162
- }
163
-
164
- /**
165
- * get cached mouse coords
166
- * @returns {Object}
167
- */
168
- getCachedMouseCoords() {
169
- return this._mouseCoords;
170
- }
171
-
172
- /**
173
- * generateTexture from object
174
- * @param {Object} obj
175
- * @returns {Object} - pixi.Texture
176
- */
177
- generateTexture(obj) {
178
- return this.renderer.generateTexture(obj);
179
- }
180
-
181
- _setPixiSettings() {
182
- PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.LINEAR;
183
- PIXI.settings.TEXT_RESOLUTION = 1;
184
-
185
- if (Urso.device.iOS || Urso.device.macOS)
186
- PIXI.settings.PRECISION_FRAGMENT = PIXI.PRECISION.HIGH;
187
- }
188
-
189
- _createWorld() {
190
- if (this.world)
191
- this._root.removeChild(this.world);
192
-
193
- this.world = new PIXI.Container();
194
- this._root.addChild(this.world);
195
- }
196
-
197
- _requestAnimFrame(loopFunction) {
198
- (() => {
199
- return window.requestAnimationFrame ||
200
- window.webkitRequestAnimationFrame ||
201
- window.mozRequestAnimationFrame ||
202
- window.oRequestAnimationFrame ||
203
- window.msRequestAnimationFrame ||
204
- function (/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
205
- window.setTimeout(callback, 0);
206
- };
207
- })()(loopFunction);
208
- }
209
-
210
- _getDeltaTime() {
211
- let newTime = Date.now();
212
- let deltaTime = Urso.scenes.timeScale * (newTime - this._loopLastCall);
213
- this._loopLastCall = newTime;
214
-
215
- return Urso.math.intMakeBetween(deltaTime, 0, 1000);
216
- }
217
-
218
- _getDeltaFrame(deltaTime) {
219
- return deltaTime * 60 / 1000;
220
- };
221
-
222
- _loop() {
223
- if (this._loopStopped)
224
- return false;
225
-
226
- this._requestAnimFrame(this._loop);
227
-
228
- if (!this._loopPaused) {
229
- if (!this._fpsCheckAllowUpdate())
230
- return;
231
-
232
- this._update();
233
- }
234
-
235
- return true;
236
- };
237
-
238
- _fpsCheckAllowUpdate() {
239
- const currentTime = Urso.time.get();
240
- this._updateCurrentFPS(currentTime);
241
-
242
- //setup maxFPSLimit
243
- if (Urso.config.fps.optimizeLowPerformance)
244
- if (this._currentFPS < NORMAL_FPS_COUNT)
245
- this._maxFPSLimit = LOW_PERFORMANCE_FPS_COUNT;
246
- else
247
- this._maxFPSLimit = Urso.config.fps.limit;
248
-
249
- //check need update
250
- if (currentTime - this._lastUpdateTime < ~~(1000 / this._maxFPSLimit))
251
- return false;
252
-
253
- this._lastUpdateTime = currentTime;
254
- return true;
255
- }
256
-
257
- _updateCurrentFPS(currentTime) {
258
- this._frames++;
259
-
260
- if (currentTime - this._lastTimeCheckFPS < 1000)
261
- return;
262
-
263
- this._currentFPS = Math.round(1000 * this._frames / (currentTime - this._lastTimeCheckFPS));
264
- this._lastTimeCheckFPS = currentTime;
265
- this._frames = 0;
266
- }
267
-
268
- _update() {
269
- if (!this.currentScene)
270
- return;
271
-
272
- let deltaTime = this._getDeltaTime();
273
- let deltaFrame = this._getDeltaFrame(deltaTime);
274
- this.interaction.update(deltaFrame);
275
-
276
- this._checkMouse();
277
- this.emit(Urso.events.MODULES_SCENES_UPDATE, deltaTime);
278
-
279
- this.currentScene.update(deltaTime);
280
- this.currentScene.render();
281
- this.renderer.render(this._root);
282
- };
283
-
284
- _checkMouse() {
285
- let newCoords = this._getMouseCoords();
286
-
287
- if (Urso.helper.checkDeepEqual(this._mouseCoords, newCoords))
288
- return true;
289
-
290
- this._mouseCoords = newCoords;
291
- this.emit(Urso.events.MODULES_SCENES_MOUSE_NEW_POSITION, this._mouseCoords);
292
- };
293
-
294
- _getMouseCoords() {
295
- const coords = {
296
- x: ~~(this.interaction.mouse.global.x / this.world.scale.x),
297
- y: ~~(this.interaction.mouse.global.y / this.world.scale.y)
298
- };
299
-
300
- coords.x = this._validateCoordinate(coords.x);
301
- coords.y = this._validateCoordinate(coords.y);
302
-
303
- return coords;
304
- };
305
-
306
- _validateCoordinate(c) {
307
- return c > 0 ? c : 0;
308
- }
309
-
310
- /**
311
- * reserve loop, when browser tab is inactive
312
- * @param {Boolean} isVisible
313
- */
314
- _visibilityChangeHandler(isVisible) {
315
- if (isVisible) {
316
- if (this.passiveCallIntervalId) {
317
- clearInterval(this.passiveCallIntervalId);
318
- this.passiveCallIntervalId = null;
319
- }
320
-
321
- return;
322
- }
323
-
324
- this.passiveCallIntervalId = setInterval(() => {
325
- if (!this._loopStopped && !this._loopPaused) {
326
- this._update();
327
- }
328
- }, 16);
329
- }
330
-
331
- _subscribeOnce() {
332
- this.addListener(Urso.events.EXTRA_BROWSEREVENTS_WINDOW_VISIBILITYCHANGE, this._visibilityChangeHandler.bind(this), true);
333
- }
334
- }
335
-
336
- module.exports = ModulesScenesPixiWrapper;
1
+ const NORMAL_FPS_COUNT = 60;
2
+ const LOW_PERFORMANCE_FPS_COUNT = 30;
3
+
4
+ class ModulesScenesPixiWrapper {
5
+ constructor() {
6
+ this.singleton = true;
7
+ this._renderer;
8
+
9
+ this.scenes = {};
10
+ this.world;
11
+
12
+ this._root;
13
+ this._loaderScene;
14
+
15
+ this._loopStopped = false;
16
+ this._loopPaused = false;
17
+ this._loopLastCall = 0;
18
+
19
+ this._loop = this._loop.bind(this);
20
+ this.passiveCallIntervalId = null;
21
+
22
+ this._mouseCoords = { x: 0, y: 0 };
23
+
24
+
25
+ this._maxFPSLimit = Urso.config.fps.limit;
26
+ this._lastUpdateTime = 0;
27
+ this._frames = 0;
28
+ this._currentFPS = Urso.config.fps.limit;
29
+ this._lastTimeCheckFPS = 0;
30
+ }
31
+
32
+ init() {
33
+ this._setPixiSettings();
34
+
35
+ //define renderer
36
+ PIXI.utils.skipHello();
37
+ this.renderer = new PIXI.Renderer({ preserveDrawingBuffer: true, width: 1, height: 1 });
38
+ document.body.appendChild(this.renderer.view);
39
+
40
+ //root and world
41
+ this._root = new PIXI.Container();
42
+ this._createWorld();
43
+
44
+ // setup interaction
45
+ this.interaction = Urso.helper.recursiveGet('plugins.interaction', this.renderer) || new PIXI.InteractionManager(this.renderer);
46
+
47
+ this._loaderScene = this.getInstance('Model');
48
+ this._requestAnimFrame(this._loop);
49
+
50
+ this.getInstance('Resolutions');
51
+ }
52
+
53
+ /**
54
+ * returns is scene paused
55
+ * @returns {Boolean}
56
+ */
57
+ isPaused() {
58
+ return this._loopPaused;
59
+ }
60
+
61
+ /**
62
+ * pause scene
63
+ */
64
+ pause() {
65
+ this._loopPaused = true;
66
+ PIXI.spine.settings.GLOBAL_AUTO_UPDATE = false;
67
+ }
68
+
69
+ /**
70
+ * resume scene
71
+ */
72
+ resume() {
73
+ this._loopLastCall = Date.now();
74
+ this._loopPaused = false;
75
+ this._update();
76
+ PIXI.spine.settings.GLOBAL_AUTO_UPDATE = true;
77
+ }
78
+
79
+ /**
80
+ * resize renderer
81
+ * @param {Number} width
82
+ * @param {Number} height
83
+ */
84
+ resize(width, height) {
85
+ this.renderer.resize(width, height);
86
+ };
87
+
88
+ /**
89
+ * hide canvas
90
+ */
91
+ hideCanvas() {
92
+ this.renderer.view.style.display = 'none';
93
+ }
94
+
95
+ /**
96
+ * show canvas
97
+ */
98
+ showCanvas() {
99
+ this.renderer.view.style.display = '';
100
+ }
101
+
102
+ /**
103
+ * set world scale
104
+ * @param {Number} x
105
+ * @param {Number} y
106
+ */
107
+ setWorldScale(x, y) {
108
+ this.world.scale.x = x;
109
+ this.world.scale.y = y;
110
+ }
111
+
112
+ /**
113
+ * set canvas width
114
+ * @param {Number} val
115
+ */
116
+ setCanvasWidth(val) {
117
+ this.renderer.view.style.width = val + 'px';
118
+ };
119
+
120
+ /**
121
+ * set canvas height
122
+ * @param {Number} val
123
+ */
124
+ setCanvasHeight(val) {
125
+ this.renderer.view.style.height = val + 'px';
126
+ };
127
+
128
+ /**
129
+ * get pixi world (main Container)
130
+ * @returns {Object}
131
+ */
132
+ getPixiWorld() {
133
+ return this.world;
134
+ }
135
+
136
+ /**
137
+ * set new scene
138
+ * @param {Object} model
139
+ */
140
+ setNewScene(model) {
141
+ this._createWorld();
142
+ this.currentScene = model;
143
+ }
144
+
145
+ /**
146
+ * get fps
147
+ * @returns {Number}
148
+ */
149
+ getFps() {
150
+ return this._currentFPS;
151
+ }
152
+
153
+ /**
154
+ * get fps data
155
+ * @returns {Object}
156
+ */
157
+ getFpsData() {
158
+ return {
159
+ fps: this._currentFPS,
160
+ limit: this._maxFPSLimit
161
+ }
162
+ }
163
+
164
+ /**
165
+ * get cached mouse coords
166
+ * @returns {Object}
167
+ */
168
+ getCachedMouseCoords() {
169
+ return this._mouseCoords;
170
+ }
171
+
172
+ /**
173
+ * generateTexture from object
174
+ * @param {Object} obj
175
+ * @returns {Object} - pixi.Texture
176
+ */
177
+ generateTexture(obj) {
178
+ return this.renderer.generateTexture(obj);
179
+ }
180
+
181
+ _setPixiSettings() {
182
+ PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.LINEAR;
183
+ PIXI.settings.TEXT_RESOLUTION = 1;
184
+
185
+ if (Urso.device.iOS || Urso.device.macOS)
186
+ PIXI.settings.PRECISION_FRAGMENT = PIXI.PRECISION.HIGH;
187
+ }
188
+
189
+ _createWorld() {
190
+ if (this.world)
191
+ this._root.removeChild(this.world);
192
+
193
+ this.world = new PIXI.Container();
194
+ this._root.addChild(this.world);
195
+ }
196
+
197
+ _requestAnimFrame(loopFunction) {
198
+ (() => {
199
+ return window.requestAnimationFrame ||
200
+ window.webkitRequestAnimationFrame ||
201
+ window.mozRequestAnimationFrame ||
202
+ window.oRequestAnimationFrame ||
203
+ window.msRequestAnimationFrame ||
204
+ function (/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
205
+ window.setTimeout(callback, 0);
206
+ };
207
+ })()(loopFunction);
208
+ }
209
+
210
+ _getDeltaTime() {
211
+ let newTime = Date.now();
212
+ let deltaTime = Urso.scenes.timeScale * (newTime - this._loopLastCall);
213
+ this._loopLastCall = newTime;
214
+
215
+ return Urso.math.intMakeBetween(deltaTime, 0, 1000);
216
+ }
217
+
218
+ _getDeltaFrame(deltaTime) {
219
+ return deltaTime * 60 / 1000;
220
+ };
221
+
222
+ _loop() {
223
+ if (this._loopStopped)
224
+ return false;
225
+
226
+ this._requestAnimFrame(this._loop);
227
+
228
+ if (!this._loopPaused) {
229
+ if (!this._fpsCheckAllowUpdate())
230
+ return;
231
+
232
+ this._update();
233
+ }
234
+
235
+ return true;
236
+ };
237
+
238
+ _fpsCheckAllowUpdate() {
239
+ const currentTime = Urso.time.get();
240
+ this._updateCurrentFPS(currentTime);
241
+
242
+ //setup maxFPSLimit
243
+ if (Urso.config.fps.optimizeLowPerformance)
244
+ if (this._currentFPS < NORMAL_FPS_COUNT)
245
+ this._maxFPSLimit = LOW_PERFORMANCE_FPS_COUNT;
246
+ else
247
+ this._maxFPSLimit = Urso.config.fps.limit;
248
+
249
+ //check need update
250
+ if (currentTime - this._lastUpdateTime < ~~(1000 / this._maxFPSLimit))
251
+ return false;
252
+
253
+ this._lastUpdateTime = currentTime;
254
+ return true;
255
+ }
256
+
257
+ _updateCurrentFPS(currentTime) {
258
+ this._frames++;
259
+
260
+ if (currentTime - this._lastTimeCheckFPS < 1000)
261
+ return;
262
+
263
+ this._currentFPS = Math.round(1000 * this._frames / (currentTime - this._lastTimeCheckFPS));
264
+ this._lastTimeCheckFPS = currentTime;
265
+ this._frames = 0;
266
+ }
267
+
268
+ _update() {
269
+ if (!this.currentScene)
270
+ return;
271
+
272
+ let deltaTime = this._getDeltaTime();
273
+ let deltaFrame = this._getDeltaFrame(deltaTime);
274
+ this.interaction.update(deltaFrame);
275
+
276
+ this._checkMouse();
277
+ this.emit(Urso.events.MODULES_SCENES_UPDATE, deltaTime);
278
+
279
+ this.currentScene.update(deltaTime);
280
+ this.currentScene.render();
281
+ this.renderer.render(this._root);
282
+ };
283
+
284
+ _checkMouse() {
285
+ let newCoords = this._getMouseCoords();
286
+
287
+ if (Urso.helper.checkDeepEqual(this._mouseCoords, newCoords))
288
+ return true;
289
+
290
+ this._mouseCoords = newCoords;
291
+ this.emit(Urso.events.MODULES_SCENES_MOUSE_NEW_POSITION, this._mouseCoords);
292
+ };
293
+
294
+ _getMouseCoords() {
295
+ const coords = {
296
+ x: ~~(this.interaction.mouse.global.x / this.world.scale.x),
297
+ y: ~~(this.interaction.mouse.global.y / this.world.scale.y)
298
+ };
299
+
300
+ coords.x = this._validateCoordinate(coords.x);
301
+ coords.y = this._validateCoordinate(coords.y);
302
+
303
+ return coords;
304
+ };
305
+
306
+ _validateCoordinate(c) {
307
+ return c > 0 ? c : 0;
308
+ }
309
+
310
+ /**
311
+ * reserve loop, when browser tab is inactive
312
+ * @param {Boolean} isVisible
313
+ */
314
+ _visibilityChangeHandler(isVisible) {
315
+ if (isVisible) {
316
+ if (this.passiveCallIntervalId) {
317
+ clearInterval(this.passiveCallIntervalId);
318
+ this.passiveCallIntervalId = null;
319
+ }
320
+
321
+ return;
322
+ }
323
+
324
+ this.passiveCallIntervalId = setInterval(() => {
325
+ if (!this._loopStopped && !this._loopPaused) {
326
+ this._update();
327
+ }
328
+ }, 16);
329
+ }
330
+
331
+ _subscribeOnce() {
332
+ this.addListener(Urso.events.EXTRA_BROWSEREVENTS_WINDOW_VISIBILITYCHANGE, this._visibilityChangeHandler.bind(this), true);
333
+ }
334
+ }
335
+
336
+ module.exports = ModulesScenesPixiWrapper;