@urso/core 0.6.14 → 0.6.16-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 (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 +270 -38
  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 +287 -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 +587 -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,287 @@
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.state.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
+ }
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;