@urso/core 0.6.16-dev → 0.6.17

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 +0 -48
  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 +207 -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,287 +1,296 @@
1
- class ModulesObjectsModelsSpine extends Urso.Core.Modules.Objects.BaseModel {
2
- constructor(params) {
3
- super(params);
4
-
5
- this.type = Urso.types.objects.SPINE;
6
- this._addBaseObject();
7
- }
8
-
9
- /**
10
- * setup params to object model
11
- * @param {Object} params
12
- */
13
- setupParams(params) {
14
- super.setupParams(params);
15
-
16
- this.assetKey = Urso.helper.recursiveGet('assetKey', params, false);
17
-
18
- this.animation = {
19
- timeScale: Urso.helper.recursiveGet('animation.timeScale', params, 1),
20
- name: Urso.helper.recursiveGet('animation.name', params, false),
21
- loop: Urso.helper.recursiveGet('animation.loop', params, false),
22
- onComplete: Urso.helper.recursiveGet('animation.onComplete', params, false)
23
- };
24
-
25
- params.animation = this.animation; //we redefine original property here
26
- }
27
-
28
- /**
29
- * play spine animation
30
- * @param {String} animationName
31
- * @param {Boolean} [loopFlag]
32
- * @param {Number} [track] - you can define track number for current animation
33
- */
34
- play(animationName, loopFlag = false, track = 0) {
35
- this._baseObject.state.setAnimation(track, animationName, loopFlag);
36
- }
37
-
38
- /**
39
- * set up the mixes between animations
40
- * @param {String} from - animation name
41
- * @param {String} to - animation name
42
- * @param {Number} duration - time in seconds
43
- * @example setMix("walk", "jump", 0.2)
44
- */
45
- setMix(from, to, duration) {
46
- this._baseObject.stateData.setMix(from, to, duration);
47
- }
48
-
49
- /**
50
- * set skin by name
51
- * @param {String} skinName
52
- */
53
- setSkinByName(skinName) {
54
- this._baseObject.skeleton.setSkinByName(skinName);
55
- }
56
-
57
- /**
58
- * reset animation to first frame
59
- */
60
- setToSetupPose() {
61
- this._baseObject.skeleton.setToSetupPose();
62
- }
63
-
64
- /**
65
- * play spine animation and execute function after animation completes
66
- * @param {String} animation - name of the animation to be played
67
- * @param {Function} func - function to be executed
68
- */
69
- playAndThen(animation, func) {
70
- this.playInSequenceAndThen([animation], func);
71
- }
72
-
73
- /**
74
- * play spine animations in sequence
75
- * @param {String[]} animations - names of the animations to be played
76
- */
77
- playInSequence(animations) {
78
- this._playInSequenceAndThen(animations);
79
- }
80
-
81
- /**
82
- * play spine animations in sequence and execute function after last animation completes
83
- * @param {String[]} animations - names of the animations to be played
84
- * @param {Function} func - function to be executed
85
- */
86
- playInSequenceAndThen(animations, func) {
87
- this._playInSequenceAndThen(animations, func);
88
- }
89
-
90
- /**
91
- * play spine animations in sequence and execute function after last animation completes
92
- * @param {String[]} animations - names of the animations to be played
93
- * @param {Function} func - function to be executed
94
- */
95
- _playInSequenceAndThen(animations, func) {
96
- this.stop();
97
- let removeSelf = () => { };
98
- let animationCount = 0;
99
-
100
- const completer = {
101
- complete: () => {
102
- animationCount++;
103
-
104
- if (animations[animationCount])
105
- this.play(animations[animationCount])
106
- else {
107
- func && func();
108
- removeSelf();
109
- }
110
- }
111
- }
112
-
113
- removeSelf = () => this._baseObject.state.removeListener(completer);
114
- this._baseObject.state.addListener(completer);
115
- this.play(animations[0]);
116
- }
117
-
118
- /**
119
- * stop track animation
120
- * @param {Number} [track] - you can define track number to stop
121
- */
122
- stopTrack(track) {
123
- this._baseObject.state.clearTrack(track);
124
- }
125
-
126
- /**
127
- * stop all animations
128
- */
129
- stop() {
130
- this._baseObject.state.clearTracks();
131
- }
132
-
133
- /**
134
- * reset all animations
135
- */
136
- reset() {
137
- this._baseObject.state.setEmptyAnimations();
138
- }
139
-
140
- /**
141
- * add object to spine slot
142
- * @param {String} slotName
143
- * @param {Object} object - created by engine object
144
- */
145
- addToSlot(slotName, object) {
146
- this._addToSlot(slotName, object, false);
147
- }
148
-
149
- /**
150
- * replace spine slot with new object
151
- * @param {String} slotName
152
- * @param {Object} object - created by engine object
153
- */
154
- replaceSlotWith(slotName, object) {
155
- this._addToSlot(slotName, object, true);
156
- }
157
-
158
- /**
159
- * set/update animation config
160
- * @param {*} config
161
- * @param {boolean} [noObjectCreate] dont use this flag out of core
162
- *
163
- * config keys:
164
- timeScale
165
- onComplete
166
- */
167
- setAnimationConfig(config = {}, noObjectCreate) {
168
- this.animation = {
169
- ...this.animation,
170
- ...config
171
- };
172
-
173
- /*if (config.timeScale)
174
- this._baseObject.state.timeScale = config.timeScale;*/ //deprecated - now we use getTimeScale getter
175
-
176
- if (config.onComplete) {
177
- if (this._baseObject.state.listeners.length !== 0) {
178
- Urso.logger.warn('ModulesObjectsModelsSpine setAnimationConfig warning: animation state listeners will be cleared');
179
- }
180
- this._baseObject.state.clearListeners();
181
- this._baseObject.state.addListener({ complete: this.animation.onComplete });
182
- }
183
- }
184
-
185
- /**
186
- * returns skeleton's child by it's name
187
- * @param {string} name
188
- * @returns {DisplayObject}
189
- */
190
- getChildByName(name) {
191
- return this.children[this._baseObject.skeleton.findSlotIndex(name)];
192
- }
193
-
194
- /**
195
- * returns skeleton's slot by it's name
196
- * @param {string} name
197
- * @returns {Slot}
198
- */
199
- findSlot(name) {
200
- return this._baseObject.skeleton.findSlot(name)
201
- }
202
-
203
- /**
204
- * returns skeleton's bone by it's name
205
- * @param {string} name
206
- * @returns {Bone}
207
- */
208
- findBone(name) {
209
- return this._baseObject.skeleton.findBone(name)
210
- }
211
-
212
- /**
213
- * returns animation from spineData by it's name
214
- * @param {string} name
215
- * @returns {Animation}
216
- */
217
- findAnimation(name) {
218
- return this._baseObject.spineData.findAnimation(name)
219
- }
220
-
221
- /**
222
- * returns event from spineData by it's name
223
- * @param {string} name
224
- * @returns {EventData}
225
- */
226
- findEvent(name) {
227
- return this._baseObject.spineData.findEvent(name)
228
- }
229
-
230
- /**
231
- * system function
232
- * add object to pixi tree
233
- */
234
- _addBaseObject() {
235
- let spineAsset = Urso.cache.getSpine(this.assetKey);
236
-
237
- if (!spineAsset)
238
- Urso.logger.error('ModulesObjectsModelsSpine assets error: no spine object ' + this.assetKey);
239
-
240
- this._baseObject = new PIXI.spine.Spine(spineAsset.spineData);
241
- //this._baseObject.state.timeScale = this.animation.timeScale;
242
- Object.defineProperty(this._baseObject.state, 'timeScale', { get: this.getTimeScale.bind(this) });
243
-
244
- if (this.animation.onComplete)
245
- this._baseObject.state.addListener({ complete: this.animation.onComplete });
246
-
247
- if (this.animation.name)
248
- this.play(this.animation.name, this.animation.loop);
249
-
250
- this._baseObject.state.addListener({ event: this._eventHandler.bind(this) });
251
- };
252
-
253
- _eventHandler(entry, event) {
254
- this.emit(Urso.events.MODULES_OBJECTS_SPINE_EVENT, { eventName: event.data.name, name: this.name, class: this.class });
255
- }
256
-
257
- _addToSlot(slotName, object, replaceSlotContents) {
258
- const spine = this._baseObject;
259
- const slotIndex = spine.spineData.slots.findIndex(({ name }) => name === slotName);
260
- const currentSlot = spine.slotContainers[slotIndex];
261
-
262
- if (currentSlot) {
263
- object._baseObject.scale.y = -1;
264
-
265
- Urso.objects.removeChild(object.parent, object, true);
266
-
267
- if (replaceSlotContents)
268
- currentSlot.removeChildren(); //todo check if its proxy and reset parent
269
-
270
- object.parent = this; //todo make removeChild for addedToSlotObjects
271
- currentSlot.addChild(object._baseObject);
272
- Urso.objects.refreshStyles();
273
- } else {
274
- Urso.logger.warn('ModulesObjectsModelsSpine _addToSlot error: no spine slot ' + slotName);
275
- }
276
- }
277
-
278
- /**
279
- * get animation timeScale
280
- * @returns Number
281
- */
282
- getTimeScale() {
283
- return Urso.scenes.timeScale * this.animation.timeScale;
284
- }
285
- }
286
-
287
- module.exports = ModulesObjectsModelsSpine;
1
+ class ModulesObjectsModelsSpine extends Urso.Core.Modules.Objects.BaseModel {
2
+ constructor(params) {
3
+ super(params);
4
+
5
+ this.type = Urso.types.objects.SPINE;
6
+ this._addBaseObject();
7
+ }
8
+
9
+ /**
10
+ * setup params to object model
11
+ * @param {Object} params
12
+ */
13
+ setupParams(params) {
14
+ super.setupParams(params);
15
+
16
+ this.assetKey = Urso.helper.recursiveGet('assetKey', params, false);
17
+
18
+ this.animation = {
19
+ timeScale: Urso.helper.recursiveGet('animation.timeScale', params, 1),
20
+ name: Urso.helper.recursiveGet('animation.name', params, false),
21
+ loop: Urso.helper.recursiveGet('animation.loop', params, false),
22
+ onComplete: Urso.helper.recursiveGet('animation.onComplete', params, false)
23
+ };
24
+
25
+ params.animation = this.animation; //we redefine original property here
26
+ this.contents = Urso.helper.recursiveGet('contents', params, []);
27
+ }
28
+
29
+ /**
30
+ * play spine animation
31
+ * @param {String} animationName
32
+ * @param {Boolean} [loopFlag]
33
+ * @param {Number} [track] - you can define track number for current animation
34
+ */
35
+ play(animationName, loopFlag = false, track = 0) {
36
+ this._baseObject.state.setAnimation(track, animationName, loopFlag);
37
+ }
38
+
39
+ /**
40
+ * set up the mixes between animations
41
+ * @param {String} from - animation name
42
+ * @param {String} to - animation name
43
+ * @param {Number} duration - time in seconds
44
+ * @example setMix("walk", "jump", 0.2)
45
+ */
46
+ setMix(from, to, duration) {
47
+ this._baseObject.stateData.setMix(from, to, duration);
48
+ }
49
+
50
+ /**
51
+ * Clears all listeners and resubscribes to spine events
52
+ */
53
+ clearListeners() {
54
+ this._baseObject.state.clearListeners();
55
+ this._baseObject.state.addListener({ event: this._eventHandler.bind(this) });
56
+ }
57
+
58
+ /**
59
+ * set skin by name
60
+ * @param {String} skinName
61
+ */
62
+ setSkinByName(skinName) {
63
+ this._baseObject.skeleton.setSkinByName(skinName);
64
+ }
65
+
66
+ /**
67
+ * reset animation to first frame
68
+ */
69
+ setToSetupPose() {
70
+ this._baseObject.skeleton.setToSetupPose();
71
+ }
72
+
73
+ /**
74
+ * play spine animation and execute function after animation completes
75
+ * @param {String} animation - name of the animation to be played
76
+ * @param {Function} func - function to be executed
77
+ */
78
+ playAndThen(animation, func) {
79
+ this.playInSequenceAndThen([animation], func);
80
+ }
81
+
82
+ /**
83
+ * play spine animations in sequence
84
+ * @param {String[]} animations - names of the animations to be played
85
+ */
86
+ playInSequence(animations) {
87
+ this._playInSequenceAndThen(animations);
88
+ }
89
+
90
+ /**
91
+ * play spine animations in sequence and execute function after last animation completes
92
+ * @param {String[]} animations - names of the animations to be played
93
+ * @param {Function} func - function to be executed
94
+ */
95
+ playInSequenceAndThen(animations, func) {
96
+ this._playInSequenceAndThen(animations, func);
97
+ }
98
+
99
+ /**
100
+ * play spine animations in sequence and execute function after last animation completes
101
+ * @param {String[]} animations - names of the animations to be played
102
+ * @param {Function} func - function to be executed
103
+ */
104
+ _playInSequenceAndThen(animations, func) {
105
+ this.stop();
106
+ let removeSelf = () => { };
107
+ let animationCount = 0;
108
+
109
+ const completer = {
110
+ complete: () => {
111
+ animationCount++;
112
+
113
+ if (animations[animationCount])
114
+ this.play(animations[animationCount])
115
+ else {
116
+ func && func();
117
+ removeSelf();
118
+ }
119
+ }
120
+ }
121
+
122
+ removeSelf = () => this._baseObject.state.removeListener(completer);
123
+ this._baseObject.state.addListener(completer);
124
+ this.play(animations[0]);
125
+ }
126
+
127
+ /**
128
+ * stop track animation
129
+ * @param {Number} [track] - you can define track number to stop
130
+ */
131
+ stopTrack(track) {
132
+ this._baseObject.state.clearTrack(track);
133
+ }
134
+
135
+ /**
136
+ * stop all animations
137
+ */
138
+ stop() {
139
+ this._baseObject.state.clearTracks();
140
+ }
141
+
142
+ /**
143
+ * reset all animations
144
+ */
145
+ reset() {
146
+ this._baseObject.state.setEmptyAnimations();
147
+ }
148
+
149
+ /**
150
+ * add object to spine slot
151
+ * @param {String} slotName
152
+ * @param {Object} object - created by engine object
153
+ */
154
+ addToSlot(slotName, object) {
155
+ this._addToSlot(slotName, object, false);
156
+ }
157
+
158
+ /**
159
+ * replace spine slot with new object
160
+ * @param {String} slotName
161
+ * @param {Object} object - created by engine object
162
+ */
163
+ replaceSlotWith(slotName, object) {
164
+ this._addToSlot(slotName, object, true);
165
+ }
166
+
167
+ /**
168
+ * set/update animation config
169
+ * @param {*} config
170
+ * @param {boolean} [noObjectCreate] dont use this flag out of core
171
+ *
172
+ * config keys:
173
+ timeScale
174
+ onComplete
175
+ */
176
+ setAnimationConfig(config = {}, noObjectCreate) {
177
+ this.animation = {
178
+ ...this.animation,
179
+ ...config
180
+ };
181
+
182
+ /*if (config.timeScale)
183
+ this._baseObject.state.timeScale = config.timeScale;*/ //deprecated - now we use getTimeScale getter
184
+
185
+ if (config.onComplete) {
186
+ if (this._baseObject.state.listeners.length !== 0) {
187
+ Urso.logger.warn('ModulesObjectsModelsSpine setAnimationConfig warning: animation state listeners will be cleared');
188
+ }
189
+ this._baseObject.state.clearListeners();
190
+ this._baseObject.state.addListener({ complete: this.animation.onComplete });
191
+ }
192
+ }
193
+
194
+ /**
195
+ * returns skeleton's child by it's name
196
+ * @param {string} name
197
+ * @returns {DisplayObject}
198
+ */
199
+ getChildByName(name) {
200
+ return this.children[this._baseObject.skeleton.findSlotIndex(name)];
201
+ }
202
+
203
+ /**
204
+ * returns skeleton's slot by it's name
205
+ * @param {string} name
206
+ * @returns {Slot}
207
+ */
208
+ findSlot(name) {
209
+ return this._baseObject.skeleton.findSlot(name)
210
+ }
211
+
212
+ /**
213
+ * returns skeleton's bone by it's name
214
+ * @param {string} name
215
+ * @returns {Bone}
216
+ */
217
+ findBone(name) {
218
+ return this._baseObject.skeleton.findBone(name)
219
+ }
220
+
221
+ /**
222
+ * returns animation from spineData by it's name
223
+ * @param {string} name
224
+ * @returns {Animation}
225
+ */
226
+ findAnimation(name) {
227
+ return this._baseObject.spineData.findAnimation(name)
228
+ }
229
+
230
+ /**
231
+ * returns event from spineData by it's name
232
+ * @param {string} name
233
+ * @returns {EventData}
234
+ */
235
+ findEvent(name) {
236
+ return this._baseObject.spineData.findEvent(name)
237
+ }
238
+
239
+ /**
240
+ * system function
241
+ * add object to pixi tree
242
+ */
243
+ _addBaseObject() {
244
+ let spineAsset = Urso.cache.getSpine(this.assetKey);
245
+
246
+ if (!spineAsset)
247
+ Urso.logger.error('ModulesObjectsModelsSpine assets error: no spine object ' + this.assetKey);
248
+
249
+ this._baseObject = new PIXI.spine.Spine(spineAsset.spineData);
250
+ //this._baseObject.state.timeScale = this.animation.timeScale;
251
+ Object.defineProperty(this._baseObject.state, 'timeScale', { get: this.getTimeScale.bind(this) });
252
+
253
+ if (this.animation.onComplete)
254
+ this._baseObject.state.addListener({ complete: this.animation.onComplete });
255
+
256
+ if (this.animation.name)
257
+ this.play(this.animation.name, this.animation.loop);
258
+
259
+ this._baseObject.state.addListener({ event: this._eventHandler.bind(this) });
260
+ };
261
+
262
+ _eventHandler(entry, event) {
263
+ this.emit(Urso.events.MODULES_OBJECTS_SPINE_EVENT, { eventName: event.data.name, name: this.name, class: this.class });
264
+ }
265
+
266
+ _addToSlot(slotName, object, replaceSlotContents) {
267
+ const spine = this._baseObject;
268
+ const slotIndex = spine.spineData.slots.findIndex(({ name }) => name === slotName);
269
+ const currentSlot = spine.slotContainers[slotIndex];
270
+
271
+ if (currentSlot) {
272
+ object._baseObject.scale.y = -1;
273
+
274
+ Urso.objects.removeChild(object.parent, object, true);
275
+
276
+ if (replaceSlotContents)
277
+ currentSlot.removeChildren(); //todo check if its proxy and reset parent
278
+
279
+ this.addChild(object); //todo make removeChild for addedToSlotObjects
280
+ currentSlot.addChild(object._baseObject);
281
+ Urso.objects.refreshStyles();
282
+ } else {
283
+ Urso.logger.warn('ModulesObjectsModelsSpine _addToSlot error: no spine slot ' + slotName);
284
+ }
285
+ }
286
+
287
+ /**
288
+ * get animation timeScale
289
+ * @returns Number
290
+ */
291
+ getTimeScale() {
292
+ return Urso.scenes.timeScale * this.animation.timeScale;
293
+ }
294
+ }
295
+
296
+ module.exports = ModulesObjectsModelsSpine;