gdcore-tools 2.0.0-beta5 → 2.0.0-beta7

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 (170) hide show
  1. package/dist/Runtime/Cordova/config.xml +4 -0
  2. package/dist/Runtime/Cordova/package.json +12 -20
  3. package/dist/Runtime/CustomRuntimeObject.js +1 -1
  4. package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
  5. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
  6. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
  7. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js +1 -1
  8. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js.map +2 -2
  9. package/dist/Runtime/Extensions/3D/AmbientLight.js +1 -1
  10. package/dist/Runtime/Extensions/3D/AmbientLight.js.map +2 -2
  11. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +1 -1
  12. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +2 -2
  13. package/dist/Runtime/Extensions/3D/DirectionalLight.js +1 -1
  14. package/dist/Runtime/Extensions/3D/DirectionalLight.js.map +2 -2
  15. package/dist/Runtime/Extensions/3D/ExponentialFog.js +1 -1
  16. package/dist/Runtime/Extensions/3D/ExponentialFog.js.map +2 -2
  17. package/dist/Runtime/Extensions/3D/HemisphereLight.js +1 -1
  18. package/dist/Runtime/Extensions/3D/HemisphereLight.js.map +2 -2
  19. package/dist/Runtime/Extensions/3D/JsExtension.js +419 -228
  20. package/dist/Runtime/Extensions/3D/LinearFog.js +1 -1
  21. package/dist/Runtime/Extensions/3D/LinearFog.js.map +2 -2
  22. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js +1 -1
  23. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js.map +2 -2
  24. package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
  25. package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
  26. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js +1 -1
  27. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js.map +2 -2
  28. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
  29. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
  30. package/dist/Runtime/Extensions/BBText/JsExtension.js +45 -42
  31. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
  32. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
  33. package/dist/Runtime/Extensions/BitmapText/JsExtension.js +40 -49
  34. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
  35. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
  36. package/dist/Runtime/Extensions/Effects/JsExtension.js +2 -2
  37. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js +1 -1
  38. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js.map +2 -2
  39. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js +1 -1
  40. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js.map +2 -2
  41. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js +1 -1
  42. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js.map +2 -2
  43. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js +1 -1
  44. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js.map +2 -2
  45. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js +1 -1
  46. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js.map +2 -2
  47. package/dist/Runtime/Extensions/ExampleJsExtension/JsExtension.js +18 -21
  48. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js +1 -1
  49. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js.map +2 -2
  50. package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +8 -2
  51. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js +1 -1
  52. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js.map +2 -2
  53. package/dist/Runtime/Extensions/Lighting/JsExtension.js +50 -38
  54. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js +1 -1
  55. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js.map +2 -2
  56. package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +112 -7
  57. package/dist/Runtime/Extensions/Multiplayer/messageManager.js +1 -1
  58. package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +2 -2
  59. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +1 -1
  60. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +2 -2
  61. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
  62. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
  63. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +1 -1
  64. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
  65. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js +1 -1
  66. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js.map +2 -2
  67. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
  68. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
  69. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js +1 -1
  70. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js.map +2 -2
  71. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
  72. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
  73. package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +127 -40
  74. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
  75. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
  76. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js +1 -1
  77. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js.map +2 -2
  78. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js +1 -1
  79. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
  80. package/dist/Runtime/Extensions/Spine/JsExtension.js +77 -36
  81. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js +1 -1
  82. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js.map +2 -2
  83. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
  84. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
  85. package/dist/Runtime/Extensions/TextInput/JsExtension.js +55 -56
  86. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
  87. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
  88. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
  89. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
  90. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js +1 -1
  91. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js.map +2 -2
  92. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js +1 -1
  93. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js.map +2 -2
  94. package/dist/Runtime/Extensions/TileMap/JsExtension.js +511 -287
  95. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js +1 -1
  96. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js.map +2 -2
  97. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
  98. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
  99. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
  100. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
  101. package/dist/Runtime/Extensions/TileMap/helper/dts/load/tiled/TiledTileMapLoader.d.ts.map +1 -1
  102. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +12 -1
  103. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
  104. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
  105. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +1 -0
  106. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
  107. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
  108. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
  109. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js +1 -1
  110. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js.map +2 -2
  111. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
  112. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
  113. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js +1 -1
  114. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
  115. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
  116. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
  117. package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +1 -0
  118. package/dist/Runtime/Extensions/Video/JsExtension.js +35 -44
  119. package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
  120. package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
  121. package/dist/Runtime/ResourceLoader.js +1 -1
  122. package/dist/Runtime/ResourceLoader.js.map +2 -2
  123. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  124. package/dist/Runtime/SpriteAnimator.js +1 -1
  125. package/dist/Runtime/SpriteAnimator.js.map +2 -2
  126. package/dist/Runtime/debugger-client/InGameDebugger.js +1 -1
  127. package/dist/Runtime/debugger-client/InGameDebugger.js.map +2 -2
  128. package/dist/Runtime/debugger-client/abstract-debugger-client.js +1 -1
  129. package/dist/Runtime/debugger-client/abstract-debugger-client.js.map +2 -2
  130. package/dist/Runtime/debugger-client/hot-reloader.js +2 -1
  131. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  132. package/dist/Runtime/debugger-client/minimal-debugger-client.js +2 -0
  133. package/dist/Runtime/debugger-client/minimal-debugger-client.js.map +7 -0
  134. package/dist/Runtime/debugger-client/websocket-debugger-client.js.map +2 -2
  135. package/dist/Runtime/debugger-client/window-message-debugger-client.js.map +2 -2
  136. package/dist/Runtime/events-tools/inputtools.js +1 -1
  137. package/dist/Runtime/events-tools/inputtools.js.map +2 -2
  138. package/dist/Runtime/events-tools/objecttools.js +1 -1
  139. package/dist/Runtime/events-tools/objecttools.js.map +2 -2
  140. package/dist/Runtime/gd.js +1 -1
  141. package/dist/Runtime/gd.js.map +2 -2
  142. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js +1 -1
  143. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js.map +2 -2
  144. package/dist/Runtime/inputmanager.js +1 -1
  145. package/dist/Runtime/inputmanager.js.map +2 -2
  146. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +1 -1
  147. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js.map +2 -2
  148. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js +1 -1
  149. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js.map +2 -2
  150. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js +1 -1
  151. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js.map +2 -2
  152. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
  153. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
  154. package/dist/Runtime/runtimegame.js +1 -1
  155. package/dist/Runtime/runtimegame.js.map +2 -2
  156. package/dist/Runtime/runtimeobject.js +1 -1
  157. package/dist/Runtime/runtimeobject.js.map +2 -2
  158. package/dist/Runtime/runtimescene.js +1 -1
  159. package/dist/Runtime/runtimescene.js.map +2 -2
  160. package/dist/Runtime/scenestack.js +1 -1
  161. package/dist/Runtime/scenestack.js.map +2 -2
  162. package/dist/Runtime/spriteruntimeobject.js +1 -1
  163. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  164. package/dist/Runtime/types/project-data.d.ts +36 -8
  165. package/dist/Runtime/variablescontainer.js +1 -1
  166. package/dist/Runtime/variablescontainer.js.map +2 -2
  167. package/dist/lib/libGD.cjs +1 -1
  168. package/dist/lib/libGD.wasm +0 -0
  169. package/gd.d.ts +149 -75
  170. package/package.json +3 -3
@@ -54,7 +54,8 @@ module.exports = {
54
54
  .addIncludeFile('Extensions/Spine/pixi-spine/pixi-spine.js')
55
55
  .addIncludeFile('Extensions/Spine/managers/pixi-spine-atlas-manager.js')
56
56
  .addIncludeFile('Extensions/Spine/managers/pixi-spine-manager.js')
57
- .setCategoryFullName(_('Advanced'));
57
+ .setCategoryFullName(_('Advanced'))
58
+ .setOpenFullEditorLabel(_('Edit animations'));
58
59
 
59
60
  object
60
61
  .addExpressionAndConditionAndAction(
@@ -73,6 +74,38 @@ module.exports = {
73
74
  .setFunctionName('setAnimationMixingDuration')
74
75
  .setGetter('getAnimationMixingDuration');
75
76
 
77
+ object
78
+ .addExpressionAndCondition(
79
+ 'number',
80
+ 'PointAttachmentX',
81
+ _('Point attachment X position'),
82
+ _('x position of spine point attachment'),
83
+ _('x position of spine _PARAM1_ point attachment for _PARAM2_ slot'),
84
+ _('Animations and images'),
85
+ 'JsPlatform/Extensions/spine.svg'
86
+ )
87
+ .addParameter('object', _('Spine'), 'SpineObject')
88
+ .addParameter('string', _('Attachment name'))
89
+ .addParameter('string', _('Slot name (use "" if names are the same)'))
90
+ .useStandardParameters('number', gd.ParameterOptions.makeNewOptions())
91
+ .setFunctionName('getPointAttachmentX');
92
+
93
+ object
94
+ .addExpressionAndCondition(
95
+ 'number',
96
+ 'PointAttachmentY',
97
+ _('Point attachment Y position'),
98
+ _('y position of spine point attachment'),
99
+ _('y position of spine _PARAM1_ point attachment for _PARAM2_ slot'),
100
+ _('Animations and images'),
101
+ 'JsPlatform/Extensions/spine.svg'
102
+ )
103
+ .addParameter('object', _('Spine'), 'SpineObject')
104
+ .addParameter('string', _('Attachment name'))
105
+ .addParameter('string', _('Slot name (use "" if names are the same)'))
106
+ .useStandardParameters('number', gd.ParameterOptions.makeNewOptions())
107
+ .setFunctionName('getPointAttachmentY');
108
+
76
109
  return extension;
77
110
  },
78
111
 
@@ -134,6 +167,7 @@ module.exports = {
134
167
  this._pixiObject.addChild(this._rect);
135
168
  this._pixiContainer.addChild(this._pixiObject);
136
169
 
170
+ this._spineResourceName = '';
137
171
  this._loadSpine();
138
172
  }
139
173
 
@@ -142,6 +176,17 @@ module.exports = {
142
176
  }
143
177
 
144
178
  update() {
179
+ const object = gd.castObject(
180
+ this._associatedObjectConfiguration,
181
+ gd.SpineObjectConfiguration
182
+ );
183
+
184
+ const spineResourceName = object.getSpineResourceName();
185
+ if (this._spineResourceName !== spineResourceName) {
186
+ this._spineResourceName = spineResourceName;
187
+ this._loadSpine();
188
+ }
189
+
145
190
  this._pixiObject.position.set(
146
191
  this._instance.getX(),
147
192
  this._instance.getY()
@@ -150,12 +195,33 @@ module.exports = {
150
195
  this._instance.getAngle()
151
196
  );
152
197
 
198
+ // Do not hide completely an object so it can still be manipulated
199
+ const alphaForDisplay = Math.max(
200
+ this._instance.getOpacity() / 255,
201
+ 0.5
202
+ );
203
+ this._pixiObject.alpha = alphaForDisplay;
204
+ // Scale is already handled below, so we just apply the flip here.
205
+ this._pixiObject.scale.x =
206
+ Math.abs(this._pixiObject.scale.x) *
207
+ (this._instance.isFlippedX() ? -1 : 1);
208
+ this._pixiObject.scale.y =
209
+ Math.abs(this._pixiObject.scale.y) *
210
+ (this._instance.isFlippedY() ? -1 : 1);
211
+
153
212
  this.setAnimation(this._instance.getRawDoubleProperty('animation'));
154
213
 
214
+ const scale = object.getScale() || 1;
215
+
216
+ const spine = this._spine;
217
+ if (spine) {
218
+ const localBounds = spine.getLocalBounds(undefined, true);
219
+ this._initialWidth = localBounds.width * scale;
220
+ this._initialHeight = localBounds.height * scale;
221
+ }
222
+
155
223
  const width = this.getWidth();
156
224
  const height = this.getHeight();
157
- const { _spine: spine } = this;
158
-
159
225
  if (spine) {
160
226
  spine.width = width;
161
227
  spine.height = height;
@@ -202,7 +268,9 @@ module.exports = {
202
268
  */
203
269
  setAnimation(index) {
204
270
  const { _spine: spine } = this;
205
- const configuration = this._getConfiguration();
271
+ const configuration = gd.asSpineConfiguration(
272
+ this._associatedObjectConfiguration
273
+ );
206
274
 
207
275
  if (
208
276
  !spine ||
@@ -230,8 +298,6 @@ module.exports = {
230
298
  spine.state.tracks[0].trackTime = 0;
231
299
  spine.update(0);
232
300
  spine.autoUpdate = false;
233
- this._initialWidth = spine.width * this.getScale();
234
- this._initialHeight = spine.height * this.getScale();
235
301
  }
236
302
 
237
303
  /**
@@ -248,41 +314,18 @@ module.exports = {
248
314
  return this._initialHeight !== null ? this._initialHeight : 256;
249
315
  }
250
316
 
251
- /**
252
- * @returns {number} defined scale
253
- */
254
- getScale() {
255
- return Number(this._getProperties().get('scale').getValue()) || 1;
256
- }
257
-
258
317
  onRemovedFromScene() {
259
318
  super.onRemovedFromScene();
260
319
  this._pixiObject.destroy({ children: true });
261
320
  }
262
321
 
263
- /**
264
- * @returns this spine object configuration
265
- */
266
- _getConfiguration() {
267
- return gd.asSpineConfiguration(this._associatedObjectConfiguration);
268
- }
269
-
270
- /**
271
- * @returns this object properties container
272
- */
273
- _getProperties() {
274
- return this._associatedObjectConfiguration.getProperties();
275
- }
276
-
277
322
  _loadSpine() {
278
- const properties = this._getProperties();
279
- const spineResourceName = properties
280
- .get('spineResourceName')
281
- .getValue();
282
-
283
323
  this._pixiResourcesLoader
284
- .getSpineData(this._project, spineResourceName)
324
+ .getSpineData(this._project, this._spineResourceName)
285
325
  .then((spineDataOrLoadingError) => {
326
+ if (this._wasDestroyed) return;
327
+ if (this._spine) this._pixiObject.removeChild(this._spine);
328
+
286
329
  if (!spineDataOrLoadingError.skeleton) {
287
330
  console.error(
288
331
  'Unable to load Spine (' +
@@ -297,13 +340,11 @@ module.exports = {
297
340
 
298
341
  try {
299
342
  this._spine = new PIXI.Spine(spineDataOrLoadingError.skeleton);
343
+ this._pixiObject.addChild(this._spine);
300
344
  } catch (error) {
301
345
  console.error('Exception while loading Spine.', error);
302
346
  this._spine = null;
303
- return;
304
347
  }
305
- this._pixiObject.addChild(this._spine);
306
- this.update();
307
348
  });
308
349
  }
309
350
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(n){const i=s=>s instanceof pixi_spine.Spine;class a{constructor(e,t){this.instanceContainer=t;this._isAnimationComplete=!0;this._object=e,this._rendererObject=this.constructRendererObject(),i(this._rendererObject)&&(this._rendererObject.autoUpdate=!1),this.updatePosition(),this.updateAngle(),this.updateOpacity(),this.updateScale(),t.getLayer("").getRenderer().addRendererObject(this._rendererObject,e.getZOrder())}updateAnimation(e){!i(this._rendererObject)||this._rendererObject.update(e)}getRendererObject(){return this._rendererObject}getOriginOffset(){if(!i(this._rendererObject))return new PIXI.Point(0,0);const e=this._rendererObject.getLocalBounds(void 0,!0);return new PIXI.Point(e.x*this._rendererObject.scale.x,e.y*this._rendererObject.scale.y)}onDestroy(){this._rendererObject.destroy()}updateScale(){const e=Math.max(this._object._originalScale*this._object.getScaleX(),0),t=Math.max(this._object._originalScale*this._object.getScaleY(),0);this._rendererObject.scale.x=this._object.isFlippedX()?-e:e,this._rendererObject.scale.y=this._object.isFlippedY()?-t:t}updatePosition(){this._rendererObject.position.x=this._object.x,this._rendererObject.position.y=this._object.y}updateAngle(){this._rendererObject.rotation=n.toRad(this._object.angle)}updateOpacity(){this._rendererObject.alpha=this._object.getOpacity()/255}getWidth(){return this._rendererObject.width}getHeight(){return this._rendererObject.height}setWidth(e){this._rendererObject.width=e}setHeight(e){this._rendererObject.height=e}getUnscaledWidth(){return Math.abs(this._rendererObject.width*this._object._originalScale/this._rendererObject.scale.x)}getUnscaledHeight(){return Math.abs(this._rendererObject.height*this._object._originalScale/this._rendererObject.scale.y)}setMixing(e,t,r){!i(this._rendererObject)||this._rendererObject.stateData.setMix(e,t,r)}setAnimation(e,t){if(i(this._rendererObject)){const r={complete:()=>{this._isAnimationComplete=!0,this._rendererObject.state.removeListener(r)}};this._isAnimationComplete=!1,this._rendererObject.state.addListener(r),this._rendererObject.state.setAnimation(0,e,t),this._rendererObject.update(0)}}getAnimationDuration(e){if(!i(this._rendererObject))return 0;const t=this._rendererObject.spineData.findAnimation(e);return t?t.duration:0}getAnimationElapsedTime(){if(!i(this._rendererObject))return 0;const e=this._rendererObject.state.tracks;return e.length===0?0:e[0].getAnimationTime()}setAnimationElapsedTime(e){if(!i(this._rendererObject))return;const t=this._rendererObject.state.tracks;if(t.length===0)return;const r=t[0];r.trackTime=e}isAnimationComplete(){return this._isAnimationComplete}constructRendererObject(){const t=this.instanceContainer.getGame().getSpineManager();return!t||!t.isSpineLoaded(this._object.spineResourceName)?new PIXI.Container:new pixi_spine.Spine(t.getSpine(this._object.spineResourceName))}}n.SpineRuntimeObjectPixiRenderer=a,n.SpineRuntimeObjectRenderer=a})(gdjs||(gdjs={}));
1
+ var gdjs;(function(s){const i=n=>n instanceof pixi_spine.Spine,c=n=>!!n&&n.type===pixi_spine.AttachmentType.Point;class a{constructor(e,t){this.instanceContainer=t;this._isAnimationComplete=!0;this._object=e,this._rendererObject=this.constructRendererObject(),i(this._rendererObject)&&(this._rendererObject.autoUpdate=!1),this.updatePosition(),this.updateAngle(),this.updateOpacity(),this.updateScale(),t.getLayer("").getRenderer().addRendererObject(this._rendererObject,e.getZOrder())}updateAnimation(e){!i(this._rendererObject)||this._rendererObject.update(e)}getRendererObject(){return this._rendererObject}getOriginOffset(){if(!i(this._rendererObject))return new PIXI.Point(0,0);const e=this._rendererObject.getLocalBounds(void 0,!0);return new PIXI.Point(e.x*this._rendererObject.scale.x,e.y*this._rendererObject.scale.y)}onDestroy(){this._rendererObject.destroy()}updateScale(){const e=Math.max(this._object._originalScale*this._object.getScaleX(),0),t=Math.max(this._object._originalScale*this._object.getScaleY(),0);this._rendererObject.scale.x=this._object.isFlippedX()?-e:e,this._rendererObject.scale.y=this._object.isFlippedY()?-t:t}updatePosition(){this._rendererObject.position.x=this._object.x,this._rendererObject.position.y=this._object.y}updateAngle(){this._rendererObject.rotation=s.toRad(this._object.angle)}updateOpacity(){this._rendererObject.alpha=this._object.getOpacity()/255}getWidth(){return this._rendererObject.width}getHeight(){return this._rendererObject.height}setWidth(e){this._rendererObject.width=e}setHeight(e){this._rendererObject.height=e}getUnscaledWidth(){return Math.abs(this._rendererObject.width*this._object._originalScale/this._rendererObject.scale.x)}getUnscaledHeight(){return Math.abs(this._rendererObject.height*this._object._originalScale/this._rendererObject.scale.y)}setMixing(e,t,r){!i(this._rendererObject)||this._rendererObject.stateData.setMix(e,t,r)}setAnimation(e,t){if(i(this._rendererObject)){const r={complete:()=>{this._isAnimationComplete=!0,this._rendererObject.state.removeListener(r)}};this._isAnimationComplete=!1,this._rendererObject.state.addListener(r),this._rendererObject.state.setAnimation(0,e,t),this._rendererObject.update(0)}}getAnimationDuration(e){if(!i(this._rendererObject))return 0;const t=this._rendererObject.spineData.findAnimation(e);return t?t.duration:0}getAnimationElapsedTime(){if(!i(this._rendererObject))return 0;const e=this._rendererObject.state.tracks;return e.length===0?0:e[0].getAnimationTime()}setAnimationElapsedTime(e){if(!i(this._rendererObject))return;const t=this._rendererObject.state.tracks;if(t.length===0)return;const r=t[0];r.trackTime=e}isAnimationComplete(){return this._isAnimationComplete}getPointAttachmentPosition(e,t){if(t||(t=e),!i(this._rendererObject))return new pixi_spine.Vector2(this._rendererObject.x,this._rendererObject.y);const r=this._rendererObject.skeleton.findSlot(t);if(!r)throw new Error(`Unable to find ${t} slot name for ${e} point attachment.`);const o=this._rendererObject.skeleton.getAttachmentByName(t,e);if(!c(o))throw new Error(`Unable to find ${e} point attachment with ${t} slot name.`);return new PIXI.Matrix().rotate(this._rendererObject.rotation).scale(this._rendererObject.scale.x,this._rendererObject.scale.y).translate(this._rendererObject.x,this._rendererObject.y).apply(o.computeWorldPosition(r.bone,new pixi_spine.Vector2))}constructRendererObject(){const t=this.instanceContainer.getGame().getSpineManager();return!t||!t.isSpineLoaded(this._object.spineResourceName)?new PIXI.Container:new pixi_spine.Spine(t.getSpine(this._object.spineResourceName))}}s.SpineRuntimeObjectPixiRenderer=a,s.SpineRuntimeObjectRenderer=a})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=spineruntimeobject-pixi-renderer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/Spine/spineruntimeobject-pixi-renderer.ts"],
4
- "sourcesContent": ["namespace gdjs {\n const isSpine = (obj: any): obj is pixi_spine.Spine =>\n obj instanceof pixi_spine.Spine;\n\n export class SpineRuntimeObjectPixiRenderer {\n private _object: gdjs.SpineRuntimeObject;\n private _rendererObject: pixi_spine.Spine | PIXI.Container;\n private _isAnimationComplete = true;\n\n /**\n * @param runtimeObject The object to render\n * @param instanceContainer The container in which the object is\n */\n constructor(\n runtimeObject: gdjs.SpineRuntimeObject,\n private instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n this._object = runtimeObject;\n this._rendererObject = this.constructRendererObject();\n if (isSpine(this._rendererObject)) {\n this._rendererObject.autoUpdate = false;\n }\n\n this.updatePosition();\n this.updateAngle();\n this.updateOpacity();\n this.updateScale();\n\n instanceContainer\n .getLayer('')\n .getRenderer()\n .addRendererObject(this._rendererObject, runtimeObject.getZOrder());\n }\n\n updateAnimation(timeDelta: float) {\n if (!isSpine(this._rendererObject)) {\n return;\n }\n this._rendererObject.update(timeDelta);\n }\n\n getRendererObject(): pixi_spine.Spine | PIXI.Container {\n return this._rendererObject;\n }\n\n getOriginOffset(): PIXI.Point {\n if (!isSpine(this._rendererObject)) return new PIXI.Point(0, 0);\n\n const localBounds = this._rendererObject.getLocalBounds(undefined, true);\n\n return new PIXI.Point(\n localBounds.x * this._rendererObject.scale.x,\n localBounds.y * this._rendererObject.scale.y\n );\n }\n\n onDestroy(): void {\n this._rendererObject.destroy();\n }\n\n updateScale(): void {\n const scaleX = Math.max(\n this._object._originalScale * this._object.getScaleX(),\n 0\n );\n const scaleY = Math.max(\n this._object._originalScale * this._object.getScaleY(),\n 0\n );\n this._rendererObject.scale.x = this._object.isFlippedX()\n ? -scaleX\n : scaleX;\n this._rendererObject.scale.y = this._object.isFlippedY()\n ? -scaleY\n : scaleY;\n }\n\n updatePosition(): void {\n this._rendererObject.position.x = this._object.x;\n this._rendererObject.position.y = this._object.y;\n }\n\n updateAngle(): void {\n this._rendererObject.rotation = gdjs.toRad(this._object.angle);\n }\n\n updateOpacity(): void {\n this._rendererObject.alpha = this._object.getOpacity() / 255;\n }\n\n getWidth(): float {\n return this._rendererObject.width;\n }\n\n getHeight(): float {\n return this._rendererObject.height;\n }\n\n setWidth(width: float): void {\n this._rendererObject.width = width;\n }\n\n setHeight(height: float): void {\n this._rendererObject.height = height;\n }\n\n getUnscaledWidth(): float {\n return Math.abs(\n (this._rendererObject.width * this._object._originalScale) /\n this._rendererObject.scale.x\n );\n }\n\n getUnscaledHeight(): float {\n return Math.abs(\n (this._rendererObject.height * this._object._originalScale) /\n this._rendererObject.scale.y\n );\n }\n\n setMixing(from: string, to: string, duration: number): void {\n if (!isSpine(this._rendererObject)) return;\n\n this._rendererObject.stateData.setMix(from, to, duration);\n }\n\n setAnimation(animation: string, loop: boolean): void {\n if (isSpine(this._rendererObject)) {\n const onCompleteListener: pixi_spine.IAnimationStateListener = {\n complete: () => {\n this._isAnimationComplete = true;\n (this._rendererObject as pixi_spine.Spine).state.removeListener(\n onCompleteListener\n );\n },\n };\n\n this._isAnimationComplete = false;\n this._rendererObject.state.addListener(onCompleteListener);\n this._rendererObject.state.setAnimation(0, animation, loop);\n this._rendererObject.update(0);\n }\n }\n\n getAnimationDuration(sourceAnimationName: string) {\n if (!isSpine(this._rendererObject)) {\n return 0;\n }\n const animation = this._rendererObject.spineData.findAnimation(\n sourceAnimationName\n );\n return animation ? animation.duration : 0;\n }\n\n getAnimationElapsedTime(): number {\n if (!isSpine(this._rendererObject)) {\n return 0;\n }\n const tracks = this._rendererObject.state.tracks;\n if (tracks.length === 0) {\n return 0;\n }\n // This should be fine because only 1 track is used.\n const track = tracks[0];\n // @ts-ignore TrackEntry.getAnimationTime is not exposed.\n return track.getAnimationTime();\n }\n\n setAnimationElapsedTime(time: number): void {\n if (!isSpine(this._rendererObject)) {\n return;\n }\n const tracks = this._rendererObject.state.tracks;\n if (tracks.length === 0) {\n return;\n }\n const track = tracks[0];\n track.trackTime = time;\n }\n\n isAnimationComplete(): boolean {\n return this._isAnimationComplete;\n }\n\n private constructRendererObject(): pixi_spine.Spine | PIXI.Container {\n const game = this.instanceContainer.getGame();\n const spineManager = game.getSpineManager();\n\n if (\n !spineManager ||\n !spineManager.isSpineLoaded(this._object.spineResourceName)\n ) {\n return new PIXI.Container();\n }\n\n return new pixi_spine.Spine(\n spineManager.getSpine(this._object.spineResourceName)!\n );\n }\n }\n export const SpineRuntimeObjectRenderer = SpineRuntimeObjectPixiRenderer;\n}\n"],
5
- "mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CACE,KAAM,GAAU,AAAC,GACf,YAAe,YAAW,MAErB,OAAqC,CAS1C,YACE,EACQ,EACR,CADQ,yBARF,0BAAuB,GAU7B,KAAK,QAAU,EACf,KAAK,gBAAkB,KAAK,0BACxB,EAAQ,KAAK,kBACf,MAAK,gBAAgB,WAAa,IAGpC,KAAK,iBACL,KAAK,cACL,KAAK,gBACL,KAAK,cAEL,EACG,SAAS,IACT,cACA,kBAAkB,KAAK,gBAAiB,EAAc,aAG3D,gBAAgB,EAAkB,CAChC,AAAI,CAAC,EAAQ,KAAK,kBAGlB,KAAK,gBAAgB,OAAO,GAG9B,mBAAuD,CACrD,MAAO,MAAK,gBAGd,iBAA8B,CAC5B,GAAI,CAAC,EAAQ,KAAK,iBAAkB,MAAO,IAAI,MAAK,MAAM,EAAG,GAE7D,KAAM,GAAc,KAAK,gBAAgB,eAAe,OAAW,IAEnE,MAAO,IAAI,MAAK,MACd,EAAY,EAAI,KAAK,gBAAgB,MAAM,EAC3C,EAAY,EAAI,KAAK,gBAAgB,MAAM,GAI/C,WAAkB,CAChB,KAAK,gBAAgB,UAGvB,aAAoB,CAClB,KAAM,GAAS,KAAK,IAClB,KAAK,QAAQ,eAAiB,KAAK,QAAQ,YAC3C,GAEI,EAAS,KAAK,IAClB,KAAK,QAAQ,eAAiB,KAAK,QAAQ,YAC3C,GAEF,KAAK,gBAAgB,MAAM,EAAI,KAAK,QAAQ,aACxC,CAAC,EACD,EACJ,KAAK,gBAAgB,MAAM,EAAI,KAAK,QAAQ,aACxC,CAAC,EACD,EAGN,gBAAuB,CACrB,KAAK,gBAAgB,SAAS,EAAI,KAAK,QAAQ,EAC/C,KAAK,gBAAgB,SAAS,EAAI,KAAK,QAAQ,EAGjD,aAAoB,CAClB,KAAK,gBAAgB,SAAW,EAAK,MAAM,KAAK,QAAQ,OAG1D,eAAsB,CACpB,KAAK,gBAAgB,MAAQ,KAAK,QAAQ,aAAe,IAG3D,UAAkB,CAChB,MAAO,MAAK,gBAAgB,MAG9B,WAAmB,CACjB,MAAO,MAAK,gBAAgB,OAG9B,SAAS,EAAoB,CAC3B,KAAK,gBAAgB,MAAQ,EAG/B,UAAU,EAAqB,CAC7B,KAAK,gBAAgB,OAAS,EAGhC,kBAA0B,CACxB,MAAO,MAAK,IACT,KAAK,gBAAgB,MAAQ,KAAK,QAAQ,eACzC,KAAK,gBAAgB,MAAM,GAIjC,mBAA2B,CACzB,MAAO,MAAK,IACT,KAAK,gBAAgB,OAAS,KAAK,QAAQ,eAC1C,KAAK,gBAAgB,MAAM,GAIjC,UAAU,EAAc,EAAY,EAAwB,CAC1D,AAAI,CAAC,EAAQ,KAAK,kBAElB,KAAK,gBAAgB,UAAU,OAAO,EAAM,EAAI,GAGlD,aAAa,EAAmB,EAAqB,CACnD,GAAI,EAAQ,KAAK,iBAAkB,CACjC,KAAM,GAAyD,CAC7D,SAAU,IAAM,CACd,KAAK,qBAAuB,GAC3B,KAAK,gBAAqC,MAAM,eAC/C,KAKN,KAAK,qBAAuB,GAC5B,KAAK,gBAAgB,MAAM,YAAY,GACvC,KAAK,gBAAgB,MAAM,aAAa,EAAG,EAAW,GACtD,KAAK,gBAAgB,OAAO,IAIhC,qBAAqB,EAA6B,CAChD,GAAI,CAAC,EAAQ,KAAK,iBAChB,MAAO,GAET,KAAM,GAAY,KAAK,gBAAgB,UAAU,cAC/C,GAEF,MAAO,GAAY,EAAU,SAAW,EAG1C,yBAAkC,CAChC,GAAI,CAAC,EAAQ,KAAK,iBAChB,MAAO,GAET,KAAM,GAAS,KAAK,gBAAgB,MAAM,OAC1C,MAAI,GAAO,SAAW,EACb,EAKF,AAFO,EAAO,GAER,mBAGf,wBAAwB,EAAoB,CAC1C,GAAI,CAAC,EAAQ,KAAK,iBAChB,OAEF,KAAM,GAAS,KAAK,gBAAgB,MAAM,OAC1C,GAAI,EAAO,SAAW,EACpB,OAEF,KAAM,GAAQ,EAAO,GACrB,EAAM,UAAY,EAGpB,qBAA+B,CAC7B,MAAO,MAAK,qBAGN,yBAA6D,CAEnE,KAAM,GAAe,AADR,KAAK,kBAAkB,UACV,kBAE1B,MACE,CAAC,GACD,CAAC,EAAa,cAAc,KAAK,QAAQ,mBAElC,GAAI,MAAK,UAGX,GAAI,YAAW,MACpB,EAAa,SAAS,KAAK,QAAQ,qBAhMlC,EAAM,iCAoMA,6BAA6B,IAxMlC",
4
+ "sourcesContent": ["namespace gdjs {\n const isSpine = (obj: any): obj is pixi_spine.Spine =>\n obj instanceof pixi_spine.Spine;\n\n // See https://github.com/pixijs/spine/issues/562\n // IPointAttachment is not declared and exported but its implementation does exist and it is used in runtime\n interface IPointAttachment extends pixi_spine.IVertexAttachment {\n computeWorldPosition(\n bone: pixi_spine.IBone,\n point: pixi_spine.Vector2\n ): pixi_spine.Vector2;\n computeWorldRotation(bone: pixi_spine.IBone): number;\n }\n\n const isPointAttachment = (\n attachment: pixi_spine.IAttachment\n ): attachment is IPointAttachment =>\n !!attachment && attachment.type === pixi_spine.AttachmentType.Point;\n\n export class SpineRuntimeObjectPixiRenderer {\n private _object: gdjs.SpineRuntimeObject;\n private _rendererObject: pixi_spine.Spine | PIXI.Container;\n private _isAnimationComplete = true;\n\n /**\n * @param runtimeObject The object to render\n * @param instanceContainer The container in which the object is\n */\n constructor(\n runtimeObject: gdjs.SpineRuntimeObject,\n private instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n this._object = runtimeObject;\n this._rendererObject = this.constructRendererObject();\n if (isSpine(this._rendererObject)) {\n this._rendererObject.autoUpdate = false;\n }\n\n this.updatePosition();\n this.updateAngle();\n this.updateOpacity();\n this.updateScale();\n\n instanceContainer\n .getLayer('')\n .getRenderer()\n .addRendererObject(this._rendererObject, runtimeObject.getZOrder());\n }\n\n updateAnimation(timeDelta: float) {\n if (!isSpine(this._rendererObject)) {\n return;\n }\n this._rendererObject.update(timeDelta);\n }\n\n getRendererObject(): pixi_spine.Spine | PIXI.Container {\n return this._rendererObject;\n }\n\n getOriginOffset(): PIXI.Point {\n if (!isSpine(this._rendererObject)) return new PIXI.Point(0, 0);\n\n const localBounds = this._rendererObject.getLocalBounds(undefined, true);\n\n return new PIXI.Point(\n localBounds.x * this._rendererObject.scale.x,\n localBounds.y * this._rendererObject.scale.y\n );\n }\n\n onDestroy(): void {\n this._rendererObject.destroy();\n }\n\n updateScale(): void {\n const scaleX = Math.max(\n this._object._originalScale * this._object.getScaleX(),\n 0\n );\n const scaleY = Math.max(\n this._object._originalScale * this._object.getScaleY(),\n 0\n );\n this._rendererObject.scale.x = this._object.isFlippedX()\n ? -scaleX\n : scaleX;\n this._rendererObject.scale.y = this._object.isFlippedY()\n ? -scaleY\n : scaleY;\n }\n\n updatePosition(): void {\n this._rendererObject.position.x = this._object.x;\n this._rendererObject.position.y = this._object.y;\n }\n\n updateAngle(): void {\n this._rendererObject.rotation = gdjs.toRad(this._object.angle);\n }\n\n updateOpacity(): void {\n this._rendererObject.alpha = this._object.getOpacity() / 255;\n }\n\n getWidth(): float {\n return this._rendererObject.width;\n }\n\n getHeight(): float {\n return this._rendererObject.height;\n }\n\n setWidth(width: float): void {\n this._rendererObject.width = width;\n }\n\n setHeight(height: float): void {\n this._rendererObject.height = height;\n }\n\n getUnscaledWidth(): float {\n return Math.abs(\n (this._rendererObject.width * this._object._originalScale) /\n this._rendererObject.scale.x\n );\n }\n\n getUnscaledHeight(): float {\n return Math.abs(\n (this._rendererObject.height * this._object._originalScale) /\n this._rendererObject.scale.y\n );\n }\n\n setMixing(from: string, to: string, duration: number): void {\n if (!isSpine(this._rendererObject)) return;\n\n this._rendererObject.stateData.setMix(from, to, duration);\n }\n\n setAnimation(animation: string, loop: boolean): void {\n if (isSpine(this._rendererObject)) {\n const onCompleteListener: pixi_spine.IAnimationStateListener = {\n complete: () => {\n this._isAnimationComplete = true;\n (this._rendererObject as pixi_spine.Spine).state.removeListener(\n onCompleteListener\n );\n },\n };\n\n this._isAnimationComplete = false;\n this._rendererObject.state.addListener(onCompleteListener);\n this._rendererObject.state.setAnimation(0, animation, loop);\n this._rendererObject.update(0);\n }\n }\n\n getAnimationDuration(sourceAnimationName: string) {\n if (!isSpine(this._rendererObject)) {\n return 0;\n }\n const animation = this._rendererObject.spineData.findAnimation(\n sourceAnimationName\n );\n return animation ? animation.duration : 0;\n }\n\n getAnimationElapsedTime(): number {\n if (!isSpine(this._rendererObject)) {\n return 0;\n }\n const tracks = this._rendererObject.state.tracks;\n if (tracks.length === 0) {\n return 0;\n }\n // This should be fine because only 1 track is used.\n const track = tracks[0];\n // @ts-ignore TrackEntry.getAnimationTime is not exposed.\n return track.getAnimationTime();\n }\n\n setAnimationElapsedTime(time: number): void {\n if (!isSpine(this._rendererObject)) {\n return;\n }\n const tracks = this._rendererObject.state.tracks;\n if (tracks.length === 0) {\n return;\n }\n const track = tracks[0];\n track.trackTime = time;\n }\n\n isAnimationComplete(): boolean {\n return this._isAnimationComplete;\n }\n\n getPointAttachmentPosition(\n attachmentName: string,\n slotName?: string\n ): pixi_spine.Vector2 {\n if (!slotName) {\n slotName = attachmentName;\n }\n if (!isSpine(this._rendererObject)) {\n return new pixi_spine.Vector2(\n this._rendererObject.x,\n this._rendererObject.y\n );\n }\n const slot = this._rendererObject.skeleton.findSlot(slotName);\n if (!slot) {\n throw new Error(\n `Unable to find ${slotName} slot name for ${attachmentName} point attachment.`\n );\n }\n const attachment = this._rendererObject.skeleton.getAttachmentByName(\n slotName,\n attachmentName\n );\n if (!isPointAttachment(attachment)) {\n throw new Error(\n `Unable to find ${attachmentName} point attachment with ${slotName} slot name.`\n );\n }\n\n return new PIXI.Matrix()\n .rotate(this._rendererObject.rotation)\n .scale(this._rendererObject.scale.x, this._rendererObject.scale.y)\n .translate(this._rendererObject.x, this._rendererObject.y)\n .apply(\n attachment.computeWorldPosition(slot.bone, new pixi_spine.Vector2())\n );\n }\n\n private constructRendererObject(): pixi_spine.Spine | PIXI.Container {\n const game = this.instanceContainer.getGame();\n const spineManager = game.getSpineManager();\n\n if (\n !spineManager ||\n !spineManager.isSpineLoaded(this._object.spineResourceName)\n ) {\n return new PIXI.Container();\n }\n\n return new pixi_spine.Spine(\n spineManager.getSpine(this._object.spineResourceName)!\n );\n }\n }\n export const SpineRuntimeObjectRenderer = SpineRuntimeObjectPixiRenderer;\n}\n"],
5
+ "mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CACE,KAAM,GAAU,AAAC,GACf,YAAe,YAAW,MAYtB,EAAoB,AACxB,GAEA,CAAC,CAAC,GAAc,EAAW,OAAS,WAAW,eAAe,MAEzD,OAAqC,CAS1C,YACE,EACQ,EACR,CADQ,yBARF,0BAAuB,GAU7B,KAAK,QAAU,EACf,KAAK,gBAAkB,KAAK,0BACxB,EAAQ,KAAK,kBACf,MAAK,gBAAgB,WAAa,IAGpC,KAAK,iBACL,KAAK,cACL,KAAK,gBACL,KAAK,cAEL,EACG,SAAS,IACT,cACA,kBAAkB,KAAK,gBAAiB,EAAc,aAG3D,gBAAgB,EAAkB,CAChC,AAAI,CAAC,EAAQ,KAAK,kBAGlB,KAAK,gBAAgB,OAAO,GAG9B,mBAAuD,CACrD,MAAO,MAAK,gBAGd,iBAA8B,CAC5B,GAAI,CAAC,EAAQ,KAAK,iBAAkB,MAAO,IAAI,MAAK,MAAM,EAAG,GAE7D,KAAM,GAAc,KAAK,gBAAgB,eAAe,OAAW,IAEnE,MAAO,IAAI,MAAK,MACd,EAAY,EAAI,KAAK,gBAAgB,MAAM,EAC3C,EAAY,EAAI,KAAK,gBAAgB,MAAM,GAI/C,WAAkB,CAChB,KAAK,gBAAgB,UAGvB,aAAoB,CAClB,KAAM,GAAS,KAAK,IAClB,KAAK,QAAQ,eAAiB,KAAK,QAAQ,YAC3C,GAEI,EAAS,KAAK,IAClB,KAAK,QAAQ,eAAiB,KAAK,QAAQ,YAC3C,GAEF,KAAK,gBAAgB,MAAM,EAAI,KAAK,QAAQ,aACxC,CAAC,EACD,EACJ,KAAK,gBAAgB,MAAM,EAAI,KAAK,QAAQ,aACxC,CAAC,EACD,EAGN,gBAAuB,CACrB,KAAK,gBAAgB,SAAS,EAAI,KAAK,QAAQ,EAC/C,KAAK,gBAAgB,SAAS,EAAI,KAAK,QAAQ,EAGjD,aAAoB,CAClB,KAAK,gBAAgB,SAAW,EAAK,MAAM,KAAK,QAAQ,OAG1D,eAAsB,CACpB,KAAK,gBAAgB,MAAQ,KAAK,QAAQ,aAAe,IAG3D,UAAkB,CAChB,MAAO,MAAK,gBAAgB,MAG9B,WAAmB,CACjB,MAAO,MAAK,gBAAgB,OAG9B,SAAS,EAAoB,CAC3B,KAAK,gBAAgB,MAAQ,EAG/B,UAAU,EAAqB,CAC7B,KAAK,gBAAgB,OAAS,EAGhC,kBAA0B,CACxB,MAAO,MAAK,IACT,KAAK,gBAAgB,MAAQ,KAAK,QAAQ,eACzC,KAAK,gBAAgB,MAAM,GAIjC,mBAA2B,CACzB,MAAO,MAAK,IACT,KAAK,gBAAgB,OAAS,KAAK,QAAQ,eAC1C,KAAK,gBAAgB,MAAM,GAIjC,UAAU,EAAc,EAAY,EAAwB,CAC1D,AAAI,CAAC,EAAQ,KAAK,kBAElB,KAAK,gBAAgB,UAAU,OAAO,EAAM,EAAI,GAGlD,aAAa,EAAmB,EAAqB,CACnD,GAAI,EAAQ,KAAK,iBAAkB,CACjC,KAAM,GAAyD,CAC7D,SAAU,IAAM,CACd,KAAK,qBAAuB,GAC3B,KAAK,gBAAqC,MAAM,eAC/C,KAKN,KAAK,qBAAuB,GAC5B,KAAK,gBAAgB,MAAM,YAAY,GACvC,KAAK,gBAAgB,MAAM,aAAa,EAAG,EAAW,GACtD,KAAK,gBAAgB,OAAO,IAIhC,qBAAqB,EAA6B,CAChD,GAAI,CAAC,EAAQ,KAAK,iBAChB,MAAO,GAET,KAAM,GAAY,KAAK,gBAAgB,UAAU,cAC/C,GAEF,MAAO,GAAY,EAAU,SAAW,EAG1C,yBAAkC,CAChC,GAAI,CAAC,EAAQ,KAAK,iBAChB,MAAO,GAET,KAAM,GAAS,KAAK,gBAAgB,MAAM,OAC1C,MAAI,GAAO,SAAW,EACb,EAKF,AAFO,EAAO,GAER,mBAGf,wBAAwB,EAAoB,CAC1C,GAAI,CAAC,EAAQ,KAAK,iBAChB,OAEF,KAAM,GAAS,KAAK,gBAAgB,MAAM,OAC1C,GAAI,EAAO,SAAW,EACpB,OAEF,KAAM,GAAQ,EAAO,GACrB,EAAM,UAAY,EAGpB,qBAA+B,CAC7B,MAAO,MAAK,qBAGd,2BACE,EACA,EACoB,CAIpB,GAHK,GACH,GAAW,GAET,CAAC,EAAQ,KAAK,iBAChB,MAAO,IAAI,YAAW,QACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GAGzB,KAAM,GAAO,KAAK,gBAAgB,SAAS,SAAS,GACpD,GAAI,CAAC,EACH,KAAM,IAAI,OACR,kBAAkB,mBAA0B,uBAGhD,KAAM,GAAa,KAAK,gBAAgB,SAAS,oBAC/C,EACA,GAEF,GAAI,CAAC,EAAkB,GACrB,KAAM,IAAI,OACR,kBAAkB,2BAAwC,gBAI9D,MAAO,IAAI,MAAK,SACb,OAAO,KAAK,gBAAgB,UAC5B,MAAM,KAAK,gBAAgB,MAAM,EAAG,KAAK,gBAAgB,MAAM,GAC/D,UAAU,KAAK,gBAAgB,EAAG,KAAK,gBAAgB,GACvD,MACC,EAAW,qBAAqB,EAAK,KAAM,GAAI,YAAW,UAIxD,yBAA6D,CAEnE,KAAM,GAAe,AADR,KAAK,kBAAkB,UACV,kBAE1B,MACE,CAAC,GACD,CAAC,EAAa,cAAc,KAAK,QAAQ,mBAElC,GAAI,MAAK,UAGX,GAAI,YAAW,MACpB,EAAa,SAAS,KAAK,QAAQ,qBAtOlC,EAAM,iCA0OA,6BAA6B,IA7PlC",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(n){class a extends n.RuntimeObject{constructor(i,e){super(i,e);this._opacity=255;this._scaleX=1;this._scaleY=1;this._flippedX=!1;this._flippedY=!1;this._currentAnimationIndex=-1;this._animationSpeedScale=1;this._animationPaused=!1;this._isPausedFrameDirty=!1;this._animations=e.content.animations,this._originalScale=e.content.scale,this.spineResourceName=e.content.spineResourceName,this._animationMixingDuration=.1,this._renderer=new n.SpineRuntimeObjectRenderer(this,i),this.setAnimationIndex(0),this._renderer.updateAnimation(0),this.onCreated()}update(i){if(this._animationPaused){this._isPausedFrameDirty&&(this._renderer.updateAnimation(0),this.invalidateHitboxes(),this._isPausedFrameDirty=!1);return}const e=this.getElapsedTime()/1e3;this._renderer.updateAnimation(e*this._animationSpeedScale),this.invalidateHitboxes()}getRendererObject(){return this._renderer.getRendererObject()}updateFromObjectData(i,e){return super.updateFromObjectData(i,e),i.content.scale!==e.content.scale&&(this._originalScale=e.content.scale,this._renderer.updateScale(),this.invalidateHitboxes()),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),opa:this._opacity,wid:this.getWidth(),hei:this.getHeight(),scaX:this.getScaleX(),scaY:this.getScaleY(),flipX:this.isFlippedX(),flipY:this.isFlippedY(),ani:this.getAnimationIndex(),anmd:this.getAnimationMixingDuration(),anp:this.isAnimationPaused(),anss:this.getAnimationSpeedScale(),anet:this.getAnimationElapsedTime()}}updateFromNetworkSyncData(i){super.updateFromNetworkSyncData(i),i.opa!==void 0&&i.opa!==this._opacity&&this.setOpacity(i.opa),i.wid!==void 0&&i.wid!==this.getWidth()&&this.setWidth(i.wid),i.hei!==void 0&&i.hei!==this.getHeight()&&this.setHeight(i.hei),i.scaX!==void 0&&i.scaX!==this.getScaleX()&&this.setScaleX(i.scaX),i.scaY!==void 0&&i.scaY!==this.getScaleY()&&this.setScaleY(i.scaY),i.flipX!==void 0&&i.flipX!==this.isFlippedX()&&this.flipX(i.flipX),i.flipY!==void 0&&i.flipY!==this.isFlippedY()&&this.flipY(i.flipY),i.ani!==void 0&&i.ani!==this.getAnimationIndex()&&this.setAnimationIndex(i.ani),i.anmd!==void 0&&i.anmd!==this.getAnimationMixingDuration()&&this.setAnimationMixingDuration(i.anmd),i.anp!==void 0&&i.anp!==this.isAnimationPaused()&&(i.anp?this.pauseAnimation():this.resumeAnimation()),i.anss!==void 0&&i.anss!==this.getAnimationSpeedScale()&&this.setAnimationSpeedScale(i.anss),i.anet!==void 0&&i.anet!==this.getAnimationElapsedTime()&&this.setAnimationElapsedTime(i.anet)}extraInitializationFromInitialInstance(i){const e=i.numberProperties.find(t=>t.name==="animation"),s=e?e.value:this._currentAnimationIndex;this.setAnimationIndexWithMixing(s,0),i.customSize&&(this.setSize(i.width,i.height),this.invalidateHitboxes())}getDrawableX(){const i=this._renderer.getOriginOffset();return this.getX()+i.x}getDrawableY(){const i=this._renderer.getOriginOffset();return this.getY()+i.y}getCenterX(){return-this._renderer.getOriginOffset().x}getCenterY(){return-this._renderer.getOriginOffset().y}onDestroyed(){super.onDestroyed(),this._renderer.onDestroy()}setX(i){super.setX(i),this._renderer.updatePosition()}setY(i){super.setY(i),this._renderer.updatePosition()}setAngle(i){super.setAngle(i),this._renderer.updateAngle()}setOpacity(i){this._opacity=Math.max(0,Math.min(255,i)),this._renderer.updateOpacity()}getOpacity(){return this._opacity}getWidth(){return this._renderer.getWidth()}getHeight(){return this._renderer.getHeight()}setWidth(i){const e=this._renderer.getUnscaledWidth();e!==0&&this.setScaleX(i/e)}setHeight(i){const e=this._renderer.getUnscaledHeight();e!==0&&this.setScaleY(i/e)}setSize(i,e){this.setWidth(i),this.setHeight(e)}setScale(i){i<0&&(i=0),!(i===Math.abs(this._scaleX)&&i===Math.abs(this._scaleY))&&(this._scaleX=i*(this._flippedX?-1:1),this._scaleY=i*(this._flippedY?-1:1),this._renderer.updateScale(),this.invalidateHitboxes())}setScaleX(i){i<0&&(i=0),i!==Math.abs(this._scaleX)&&(this._scaleX=i*(this._flippedX?-1:1),this._renderer.updateScale(),this.invalidateHitboxes())}setScaleY(i){i<0&&(i=0),i!==Math.abs(this._scaleY)&&(this._scaleY=i*(this._flippedY?-1:1),this._renderer.updateScale(),this.invalidateHitboxes())}getScale(){const i=Math.abs(this._scaleX),e=Math.abs(this._scaleY);return i===e?i:Math.sqrt(i*e)}getScaleY(){return Math.abs(this._scaleY)}getScaleX(){return Math.abs(this._scaleX)}isFlippedX(){return this._flippedX}isFlippedY(){return this._flippedY}flipX(i){i!==this._flippedX&&(this._scaleX*=-1,this._flippedX=i,this.invalidateHitboxes(),this._renderer.updateScale())}flipY(i){i!==this._flippedY&&(this._scaleY*=-1,this._flippedY=i,this.invalidateHitboxes(),this._renderer.updateScale())}setAnimationIndex(i){this.setAnimationIndexWithMixing(i,this._animationMixingDuration)}setAnimationIndexWithMixing(i,e){if(this._animations.length===0||this._currentAnimationIndex===i||!this.isAnimationIndex(i))return;const s=this._animations[this._currentAnimationIndex],t=this._animations[i];this._currentAnimationIndex=i,s&&this._renderer.setMixing(s.source,t.source,e),this._renderer.setAnimation(t.source,t.loop),this._isPausedFrameDirty=!0}setAnimationName(i){this.setAnimationNameWithMixing(i,this._animationMixingDuration)}setAnimationNameWithMixing(i,e){this.setAnimationIndexWithMixing(this.getAnimationIndexFor(i),e)}getAnimationIndexFor(i){return this._animations.findIndex(e=>e.name===i)}getAnimationMixingDuration(){return this._animationMixingDuration}setAnimationMixingDuration(i){this._animationMixingDuration=i}getAnimationIndex(){return this._currentAnimationIndex}getAnimationName(){return this.isAnimationIndex(this._currentAnimationIndex)?this._animations[this._currentAnimationIndex].name:""}isAnimationIndex(i){return Number.isInteger(i)&&i>=0&&i<this._animations.length}hasAnimationEnded(){return this._renderer.isAnimationComplete()}isAnimationPaused(){return this._animationPaused}pauseAnimation(){this._animationPaused=!0}resumeAnimation(){this._animationPaused=!1}getAnimationSpeedScale(){return this._animationSpeedScale}setAnimationSpeedScale(i){this._animationSpeedScale=i}getAnimationElapsedTime(){return this._animations.length===0?0:this._renderer.getAnimationElapsedTime()}setAnimationElapsedTime(i){this._animations.length!==0&&(this._renderer.setAnimationElapsedTime(i),this._isPausedFrameDirty=!0)}getAnimationDuration(){return this._animations.length===0?0:this._renderer.getAnimationDuration(this._animations[this._currentAnimationIndex].source)}}n.SpineRuntimeObject=a,n.registerObject("SpineObject::SpineObject",n.SpineRuntimeObject)})(gdjs||(gdjs={}));
1
+ var gdjs;(function(n){class r extends n.RuntimeObject{constructor(i,e){super(i,e);this._opacity=255;this._scaleX=1;this._scaleY=1;this._flippedX=!1;this._flippedY=!1;this._currentAnimationIndex=-1;this._animationSpeedScale=1;this._animationPaused=!1;this._isPausedFrameDirty=!1;this._animations=e.content.animations,this._originalScale=e.content.scale,this.spineResourceName=e.content.spineResourceName,this._animationMixingDuration=0,this._renderer=new n.SpineRuntimeObjectRenderer(this,i),this.setAnimationIndex(0),this._renderer.updateAnimation(0),this.onCreated()}update(i){if(this._animationPaused){this._isPausedFrameDirty&&(this._renderer.updateAnimation(0),this.invalidateHitboxes(),this._isPausedFrameDirty=!1);return}const e=this.getElapsedTime()/1e3;this._renderer.updateAnimation(e*this._animationSpeedScale),this.invalidateHitboxes()}getRendererObject(){return this._renderer.getRendererObject()}updateFromObjectData(i,e){return super.updateFromObjectData(i,e),i.content.scale!==e.content.scale&&(this._originalScale=e.content.scale,this._renderer.updateScale(),this.invalidateHitboxes()),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),opa:this._opacity,wid:this.getWidth(),hei:this.getHeight(),scaX:this.getScaleX(),scaY:this.getScaleY(),flipX:this.isFlippedX(),flipY:this.isFlippedY(),ani:this.getAnimationIndex(),anmd:this.getAnimationMixingDuration(),anp:this.isAnimationPaused(),anss:this.getAnimationSpeedScale(),anet:this.getAnimationElapsedTime()}}updateFromNetworkSyncData(i){super.updateFromNetworkSyncData(i),i.opa!==void 0&&i.opa!==this._opacity&&this.setOpacity(i.opa),i.wid!==void 0&&i.wid!==this.getWidth()&&this.setWidth(i.wid),i.hei!==void 0&&i.hei!==this.getHeight()&&this.setHeight(i.hei),i.scaX!==void 0&&i.scaX!==this.getScaleX()&&this.setScaleX(i.scaX),i.scaY!==void 0&&i.scaY!==this.getScaleY()&&this.setScaleY(i.scaY),i.flipX!==void 0&&i.flipX!==this.isFlippedX()&&this.flipX(i.flipX),i.flipY!==void 0&&i.flipY!==this.isFlippedY()&&this.flipY(i.flipY),i.ani!==void 0&&i.ani!==this.getAnimationIndex()&&this.setAnimationIndex(i.ani),i.anmd!==void 0&&i.anmd!==this.getAnimationMixingDuration()&&this.setAnimationMixingDuration(i.anmd),i.anp!==void 0&&i.anp!==this.isAnimationPaused()&&(i.anp?this.pauseAnimation():this.resumeAnimation()),i.anss!==void 0&&i.anss!==this.getAnimationSpeedScale()&&this.setAnimationSpeedScale(i.anss),i.anet!==void 0&&i.anet!==this.getAnimationElapsedTime()&&this.setAnimationElapsedTime(i.anet)}extraInitializationFromInitialInstance(i){const e=i.numberProperties.find(t=>t.name==="animation"),s=e?e.value:this._currentAnimationIndex;this.setAnimationIndexWithMixing(s,0),i.customSize&&(this.setSize(i.width,i.height),this.invalidateHitboxes()),i.opacity!==void 0&&this.setOpacity(i.opacity),i.flippedX&&this.flipX(i.flippedX),i.flippedY&&this.flipY(i.flippedY)}getDrawableX(){const i=this._renderer.getOriginOffset();return this.getX()+i.x}getDrawableY(){const i=this._renderer.getOriginOffset();return this.getY()+i.y}getCenterX(){return-this._renderer.getOriginOffset().x}getCenterY(){return-this._renderer.getOriginOffset().y}onDestroyed(){super.onDestroyed(),this._renderer.onDestroy()}setX(i){super.setX(i),this._renderer.updatePosition()}setY(i){super.setY(i),this._renderer.updatePosition()}setAngle(i){super.setAngle(i),this._renderer.updateAngle()}setOpacity(i){this._opacity=Math.max(0,Math.min(255,i)),this._renderer.updateOpacity()}getOpacity(){return this._opacity}getWidth(){return this._renderer.getWidth()}getHeight(){return this._renderer.getHeight()}setWidth(i){const e=this._renderer.getUnscaledWidth();e!==0&&this.setScaleX(i/e)}setHeight(i){const e=this._renderer.getUnscaledHeight();e!==0&&this.setScaleY(i/e)}setSize(i,e){this.setWidth(i),this.setHeight(e)}setScale(i){i<0&&(i=0),!(i===Math.abs(this._scaleX)&&i===Math.abs(this._scaleY))&&(this._scaleX=i*(this._flippedX?-1:1),this._scaleY=i*(this._flippedY?-1:1),this._renderer.updateScale(),this.invalidateHitboxes())}setScaleX(i){i<0&&(i=0),i!==Math.abs(this._scaleX)&&(this._scaleX=i*(this._flippedX?-1:1),this._renderer.updateScale(),this.invalidateHitboxes())}setScaleY(i){i<0&&(i=0),i!==Math.abs(this._scaleY)&&(this._scaleY=i*(this._flippedY?-1:1),this._renderer.updateScale(),this.invalidateHitboxes())}getScale(){const i=Math.abs(this._scaleX),e=Math.abs(this._scaleY);return i===e?i:Math.sqrt(i*e)}getScaleY(){return Math.abs(this._scaleY)}getScaleX(){return Math.abs(this._scaleX)}isFlippedX(){return this._flippedX}isFlippedY(){return this._flippedY}flipX(i){i!==this._flippedX&&(this._scaleX*=-1,this._flippedX=i,this.invalidateHitboxes(),this._renderer.updateScale())}flipY(i){i!==this._flippedY&&(this._scaleY*=-1,this._flippedY=i,this.invalidateHitboxes(),this._renderer.updateScale())}setAnimationIndex(i){this.setAnimationIndexWithMixing(i,this._animationMixingDuration)}setAnimationIndexWithMixing(i,e){if(this._animations.length===0||this._currentAnimationIndex===i||!this.isAnimationIndex(i))return;const s=this._animations[this._currentAnimationIndex],t=this._animations[i];this._currentAnimationIndex=i,s&&this._renderer.setMixing(s.source,t.source,e),this._renderer.setAnimation(t.source,t.loop),this._isPausedFrameDirty=!0}setAnimationName(i){this.setAnimationNameWithMixing(i,this._animationMixingDuration)}setAnimationNameWithMixing(i,e){this.setAnimationIndexWithMixing(this.getAnimationIndexFor(i),e)}getAnimationIndexFor(i){return this._animations.findIndex(e=>e.name===i)}getAnimationMixingDuration(){return this._animationMixingDuration}setAnimationMixingDuration(i){this._animationMixingDuration=i}getAnimationIndex(){return this._currentAnimationIndex}getAnimationName(){return this.isAnimationIndex(this._currentAnimationIndex)?this._animations[this._currentAnimationIndex].name:""}isAnimationIndex(i){return Number.isInteger(i)&&i>=0&&i<this._animations.length}hasAnimationEnded(){return this._renderer.isAnimationComplete()}isAnimationPaused(){return this._animationPaused}pauseAnimation(){this._animationPaused=!0}resumeAnimation(){this._animationPaused=!1}getAnimationSpeedScale(){return this._animationSpeedScale}setAnimationSpeedScale(i){this._animationSpeedScale=i}getAnimationElapsedTime(){return this._animations.length===0?0:this._renderer.getAnimationElapsedTime()}setAnimationElapsedTime(i){this._animations.length!==0&&(this._renderer.setAnimationElapsedTime(i),this._isPausedFrameDirty=!0)}getPointAttachmentX(i,e){return this._renderer.getPointAttachmentPosition(i,e).x}getPointAttachmentY(i,e){return this._renderer.getPointAttachmentPosition(i,e).y}getAnimationDuration(){return this._animations.length===0?0:this._renderer.getAnimationDuration(this._animations[this._currentAnimationIndex].source)}}n.SpineRuntimeObject=r,n.registerObject("SpineObject::SpineObject",n.SpineRuntimeObject)})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=spineruntimeobject.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/Spine/spineruntimeobject.ts"],
4
- "sourcesContent": ["namespace gdjs {\n type SpineAnimation = { name: string; source: string; loop: boolean };\n\n export type SpineObjectDataType = {\n content: {\n opacity: float;\n scale: float;\n timeScale: float;\n spineResourceName: string;\n animations: SpineAnimation[];\n };\n };\n export type SpineObjectData = ObjectData & SpineObjectDataType;\n\n export type SpineNetworkSyncDataType = {\n opa: float;\n wid: float;\n hei: float;\n scaX: float;\n scaY: float;\n flipX: boolean;\n flipY: boolean;\n ani: number;\n anmd: number;\n anp: boolean;\n anss: float;\n anet: number;\n };\n\n export type SpineNetworkSyncData = ObjectNetworkSyncData &\n SpineNetworkSyncDataType;\n\n export class SpineRuntimeObject\n extends gdjs.RuntimeObject\n implements\n gdjs.Resizable,\n gdjs.Scalable,\n gdjs.Animatable,\n gdjs.OpacityHandler {\n private _opacity: float = 255;\n private _scaleX: number = 1;\n private _scaleY: number = 1;\n _originalScale: number;\n private _flippedX: boolean = false;\n private _flippedY: boolean = false;\n private _animations: SpineAnimation[];\n private _currentAnimationIndex = -1;\n private _animationSpeedScale: float = 1;\n private _animationPaused: boolean = false;\n private _isPausedFrameDirty = false;\n /** The duration in second for the smooth transition between 2 animations */\n private _animationMixingDuration: number;\n private _renderer: gdjs.SpineRuntimeObjectPixiRenderer;\n\n readonly spineResourceName: string;\n\n /**\n * @param instanceContainer The container the object belongs to.\n * @param objectData The object data used to initialize the object\n */\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n objectData: SpineObjectData\n ) {\n super(instanceContainer, objectData);\n\n this._animations = objectData.content.animations;\n this._originalScale = objectData.content.scale;\n this.spineResourceName = objectData.content.spineResourceName;\n this._animationMixingDuration = 0.1;\n this._renderer = new gdjs.SpineRuntimeObjectRenderer(\n this,\n instanceContainer\n );\n this.setAnimationIndex(0);\n this._renderer.updateAnimation(0);\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n update(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n if (this._animationPaused) {\n if (this._isPausedFrameDirty) {\n this._renderer.updateAnimation(0);\n this.invalidateHitboxes();\n this._isPausedFrameDirty = false;\n }\n return;\n }\n const elapsedTime = this.getElapsedTime() / 1000;\n this._renderer.updateAnimation(elapsedTime * this._animationSpeedScale);\n this.invalidateHitboxes();\n }\n\n getRendererObject(): pixi_spine.Spine | PIXI.Container {\n return this._renderer.getRendererObject();\n }\n\n updateFromObjectData(\n oldObjectData: SpineObjectData,\n newObjectData: SpineObjectData\n ): boolean {\n super.updateFromObjectData(oldObjectData, newObjectData);\n\n if (oldObjectData.content.scale !== newObjectData.content.scale) {\n this._originalScale = newObjectData.content.scale;\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n return true;\n }\n\n getNetworkSyncData(): SpineNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n opa: this._opacity,\n wid: this.getWidth(),\n hei: this.getHeight(),\n scaX: this.getScaleX(),\n scaY: this.getScaleY(),\n flipX: this.isFlippedX(),\n flipY: this.isFlippedY(),\n ani: this.getAnimationIndex(),\n anmd: this.getAnimationMixingDuration(),\n anp: this.isAnimationPaused(),\n anss: this.getAnimationSpeedScale(),\n anet: this.getAnimationElapsedTime(),\n };\n }\n\n updateFromNetworkSyncData(syncData: SpineNetworkSyncData): void {\n super.updateFromNetworkSyncData(syncData);\n\n if (syncData.opa !== undefined && syncData.opa !== this._opacity) {\n this.setOpacity(syncData.opa);\n }\n if (syncData.wid !== undefined && syncData.wid !== this.getWidth()) {\n this.setWidth(syncData.wid);\n }\n if (syncData.hei !== undefined && syncData.hei !== this.getHeight()) {\n this.setHeight(syncData.hei);\n }\n if (syncData.scaX !== undefined && syncData.scaX !== this.getScaleX()) {\n this.setScaleX(syncData.scaX);\n }\n if (syncData.scaY !== undefined && syncData.scaY !== this.getScaleY()) {\n this.setScaleY(syncData.scaY);\n }\n if (\n syncData.flipX !== undefined &&\n syncData.flipX !== this.isFlippedX()\n ) {\n this.flipX(syncData.flipX);\n }\n if (\n syncData.flipY !== undefined &&\n syncData.flipY !== this.isFlippedY()\n ) {\n this.flipY(syncData.flipY);\n }\n if (\n syncData.ani !== undefined &&\n syncData.ani !== this.getAnimationIndex()\n ) {\n this.setAnimationIndex(syncData.ani);\n }\n if (\n syncData.anmd !== undefined &&\n syncData.anmd !== this.getAnimationMixingDuration()\n ) {\n this.setAnimationMixingDuration(syncData.anmd);\n }\n if (\n syncData.anp !== undefined &&\n syncData.anp !== this.isAnimationPaused()\n ) {\n syncData.anp ? this.pauseAnimation() : this.resumeAnimation();\n }\n if (\n syncData.anss !== undefined &&\n syncData.anss !== this.getAnimationSpeedScale()\n ) {\n this.setAnimationSpeedScale(syncData.anss);\n }\n if (\n syncData.anet !== undefined &&\n syncData.anet !== this.getAnimationElapsedTime()\n ) {\n this.setAnimationElapsedTime(syncData.anet);\n }\n }\n\n extraInitializationFromInitialInstance(\n initialInstanceData: InstanceData\n ): void {\n const animationData = initialInstanceData.numberProperties.find(\n (data) => data.name === 'animation'\n );\n const animationIndex = animationData\n ? animationData.value\n : this._currentAnimationIndex;\n\n this.setAnimationIndexWithMixing(animationIndex, 0);\n\n if (initialInstanceData.customSize) {\n this.setSize(initialInstanceData.width, initialInstanceData.height);\n this.invalidateHitboxes();\n }\n }\n\n getDrawableX(): number {\n const originOffset = this._renderer.getOriginOffset();\n\n return this.getX() + originOffset.x;\n }\n\n getDrawableY(): number {\n const originOffset = this._renderer.getOriginOffset();\n\n return this.getY() + originOffset.y;\n }\n\n getCenterX(): float {\n const originOffset = this._renderer.getOriginOffset();\n return -originOffset.x;\n }\n\n getCenterY(): float {\n const originOffset = this._renderer.getOriginOffset();\n return -originOffset.y;\n }\n\n onDestroyed(): void {\n super.onDestroyed();\n this._renderer.onDestroy();\n }\n\n setX(x: float): void {\n super.setX(x);\n this._renderer.updatePosition();\n }\n\n setY(y: float): void {\n super.setY(y);\n this._renderer.updatePosition();\n }\n\n setAngle(angle: float): void {\n super.setAngle(angle);\n this._renderer.updateAngle();\n }\n\n setOpacity(opacity: float): void {\n this._opacity = Math.max(0, Math.min(255, opacity));\n this._renderer.updateOpacity();\n }\n\n getOpacity(): float {\n return this._opacity;\n }\n\n getWidth(): float {\n return this._renderer.getWidth();\n }\n\n getHeight(): float {\n return this._renderer.getHeight();\n }\n\n setWidth(newWidth: float): void {\n const unscaledWidth = this._renderer.getUnscaledWidth();\n if (unscaledWidth !== 0) {\n this.setScaleX(newWidth / unscaledWidth);\n }\n }\n\n setHeight(newHeight: float): void {\n const unscaledHeight = this._renderer.getUnscaledHeight();\n if (unscaledHeight !== 0) {\n this.setScaleY(newHeight / unscaledHeight);\n }\n }\n\n setSize(newWidth: number, newHeight: number): void {\n this.setWidth(newWidth);\n this.setHeight(newHeight);\n }\n\n setScale(newScale: float): void {\n if (newScale < 0) {\n newScale = 0;\n }\n if (\n newScale === Math.abs(this._scaleX) &&\n newScale === Math.abs(this._scaleY)\n ) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n setScaleX(newScale: float): void {\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleX)) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n setScaleY(newScale: float): void {\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleY)) {\n return;\n }\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n /**\n * Get the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n *\n * @return the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n */\n getScale(): float {\n const scaleX = Math.abs(this._scaleX);\n const scaleY = Math.abs(this._scaleY);\n return scaleX === scaleY ? scaleX : Math.sqrt(scaleX * scaleY);\n }\n\n getScaleY(): float {\n return Math.abs(this._scaleY);\n }\n\n getScaleX(): float {\n return Math.abs(this._scaleX);\n }\n\n isFlippedX(): boolean {\n return this._flippedX;\n }\n\n isFlippedY(): boolean {\n return this._flippedY;\n }\n\n flipX(enable: boolean) {\n if (enable !== this._flippedX) {\n this._scaleX *= -1;\n this._flippedX = enable;\n this.invalidateHitboxes();\n this._renderer.updateScale();\n }\n }\n\n flipY(enable: boolean) {\n if (enable !== this._flippedY) {\n this._scaleY *= -1;\n this._flippedY = enable;\n this.invalidateHitboxes();\n this._renderer.updateScale();\n }\n }\n\n setAnimationIndex(animationIndex: number): void {\n this.setAnimationIndexWithMixing(\n animationIndex,\n this._animationMixingDuration\n );\n }\n\n setAnimationIndexWithMixing(\n animationIndex: number,\n mixingDuration: number\n ): void {\n if (\n this._animations.length === 0 ||\n this._currentAnimationIndex === animationIndex ||\n !this.isAnimationIndex(animationIndex)\n ) {\n return;\n }\n const previousAnimation = this._animations[this._currentAnimationIndex];\n const newAnimation = this._animations[animationIndex];\n this._currentAnimationIndex = animationIndex;\n\n if (previousAnimation) {\n this._renderer.setMixing(\n previousAnimation.source,\n newAnimation.source,\n mixingDuration\n );\n }\n this._renderer.setAnimation(newAnimation.source, newAnimation.loop);\n this._isPausedFrameDirty = true;\n }\n\n setAnimationName(animationName: string): void {\n this.setAnimationNameWithMixing(\n animationName,\n this._animationMixingDuration\n );\n }\n\n setAnimationNameWithMixing(\n animationName: string,\n mixingDuration: number\n ): void {\n this.setAnimationIndexWithMixing(\n this.getAnimationIndexFor(animationName),\n mixingDuration\n );\n }\n\n getAnimationIndexFor(animationName: string): number {\n return this._animations.findIndex(\n (animation) => animation.name === animationName\n );\n }\n\n /**\n * Return the duration in second for the smooth transition between 2 animations.\n */\n getAnimationMixingDuration(): number {\n return this._animationMixingDuration;\n }\n\n /**\n * Change the duration in second for the smooth transition between 2 animations.\n */\n setAnimationMixingDuration(animationMixingDuration: number): void {\n this._animationMixingDuration = animationMixingDuration;\n }\n\n getAnimationIndex(): number {\n return this._currentAnimationIndex;\n }\n\n getAnimationName(): string {\n return this.isAnimationIndex(this._currentAnimationIndex)\n ? this._animations[this._currentAnimationIndex].name\n : '';\n }\n\n isAnimationIndex(animationIndex: number): boolean {\n return (\n Number.isInteger(animationIndex) &&\n animationIndex >= 0 &&\n animationIndex < this._animations.length\n );\n }\n\n hasAnimationEnded(): boolean {\n return this._renderer.isAnimationComplete();\n }\n\n isAnimationPaused() {\n return this._animationPaused;\n }\n\n pauseAnimation() {\n this._animationPaused = true;\n }\n\n resumeAnimation() {\n this._animationPaused = false;\n }\n\n getAnimationSpeedScale() {\n return this._animationSpeedScale;\n }\n\n setAnimationSpeedScale(ratio: float): void {\n this._animationSpeedScale = ratio;\n }\n\n getAnimationElapsedTime(): number {\n if (this._animations.length === 0) {\n return 0;\n }\n return this._renderer.getAnimationElapsedTime();\n }\n\n setAnimationElapsedTime(time: number): void {\n if (this._animations.length === 0) {\n return;\n }\n this._renderer.setAnimationElapsedTime(time);\n this._isPausedFrameDirty = true;\n }\n\n getAnimationDuration(): number {\n if (this._animations.length === 0) {\n return 0;\n }\n return this._renderer.getAnimationDuration(\n this._animations[this._currentAnimationIndex].source\n );\n }\n }\n\n gdjs.registerObject('SpineObject::SpineObject', gdjs.SpineRuntimeObject);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["namespace gdjs {\n type SpineAnimation = { name: string; source: string; loop: boolean };\n\n export type SpineObjectDataType = {\n content: {\n opacity: float;\n scale: float;\n timeScale: float;\n spineResourceName: string;\n animations: SpineAnimation[];\n };\n };\n export type SpineObjectData = ObjectData & SpineObjectDataType;\n\n export type SpineNetworkSyncDataType = {\n opa: float;\n wid: float;\n hei: float;\n scaX: float;\n scaY: float;\n flipX: boolean;\n flipY: boolean;\n ani: number;\n anmd: number;\n anp: boolean;\n anss: float;\n anet: number;\n };\n\n export type SpineNetworkSyncData = ObjectNetworkSyncData &\n SpineNetworkSyncDataType;\n\n export class SpineRuntimeObject\n extends gdjs.RuntimeObject\n implements\n gdjs.Resizable,\n gdjs.Scalable,\n gdjs.Animatable,\n gdjs.OpacityHandler {\n private _opacity: float = 255;\n private _scaleX: number = 1;\n private _scaleY: number = 1;\n _originalScale: number;\n private _flippedX: boolean = false;\n private _flippedY: boolean = false;\n private _animations: SpineAnimation[];\n private _currentAnimationIndex = -1;\n private _animationSpeedScale: float = 1;\n private _animationPaused: boolean = false;\n private _isPausedFrameDirty = false;\n /** The duration in second for the smooth transition between 2 animations */\n private _animationMixingDuration: number;\n private _renderer: gdjs.SpineRuntimeObjectPixiRenderer;\n\n readonly spineResourceName: string;\n\n /**\n * @param instanceContainer The container the object belongs to.\n * @param objectData The object data used to initialize the object\n */\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n objectData: SpineObjectData\n ) {\n super(instanceContainer, objectData);\n\n this._animations = objectData.content.animations;\n this._originalScale = objectData.content.scale;\n this.spineResourceName = objectData.content.spineResourceName;\n this._animationMixingDuration = 0;\n this._renderer = new gdjs.SpineRuntimeObjectRenderer(\n this,\n instanceContainer\n );\n this.setAnimationIndex(0);\n this._renderer.updateAnimation(0);\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n update(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n if (this._animationPaused) {\n if (this._isPausedFrameDirty) {\n this._renderer.updateAnimation(0);\n this.invalidateHitboxes();\n this._isPausedFrameDirty = false;\n }\n return;\n }\n const elapsedTime = this.getElapsedTime() / 1000;\n this._renderer.updateAnimation(elapsedTime * this._animationSpeedScale);\n this.invalidateHitboxes();\n }\n\n getRendererObject(): pixi_spine.Spine | PIXI.Container {\n return this._renderer.getRendererObject();\n }\n\n updateFromObjectData(\n oldObjectData: SpineObjectData,\n newObjectData: SpineObjectData\n ): boolean {\n super.updateFromObjectData(oldObjectData, newObjectData);\n\n if (oldObjectData.content.scale !== newObjectData.content.scale) {\n this._originalScale = newObjectData.content.scale;\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n return true;\n }\n\n getNetworkSyncData(): SpineNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n opa: this._opacity,\n wid: this.getWidth(),\n hei: this.getHeight(),\n scaX: this.getScaleX(),\n scaY: this.getScaleY(),\n flipX: this.isFlippedX(),\n flipY: this.isFlippedY(),\n ani: this.getAnimationIndex(),\n anmd: this.getAnimationMixingDuration(),\n anp: this.isAnimationPaused(),\n anss: this.getAnimationSpeedScale(),\n anet: this.getAnimationElapsedTime(),\n };\n }\n\n updateFromNetworkSyncData(syncData: SpineNetworkSyncData): void {\n super.updateFromNetworkSyncData(syncData);\n\n if (syncData.opa !== undefined && syncData.opa !== this._opacity) {\n this.setOpacity(syncData.opa);\n }\n if (syncData.wid !== undefined && syncData.wid !== this.getWidth()) {\n this.setWidth(syncData.wid);\n }\n if (syncData.hei !== undefined && syncData.hei !== this.getHeight()) {\n this.setHeight(syncData.hei);\n }\n if (syncData.scaX !== undefined && syncData.scaX !== this.getScaleX()) {\n this.setScaleX(syncData.scaX);\n }\n if (syncData.scaY !== undefined && syncData.scaY !== this.getScaleY()) {\n this.setScaleY(syncData.scaY);\n }\n if (\n syncData.flipX !== undefined &&\n syncData.flipX !== this.isFlippedX()\n ) {\n this.flipX(syncData.flipX);\n }\n if (\n syncData.flipY !== undefined &&\n syncData.flipY !== this.isFlippedY()\n ) {\n this.flipY(syncData.flipY);\n }\n if (\n syncData.ani !== undefined &&\n syncData.ani !== this.getAnimationIndex()\n ) {\n this.setAnimationIndex(syncData.ani);\n }\n if (\n syncData.anmd !== undefined &&\n syncData.anmd !== this.getAnimationMixingDuration()\n ) {\n this.setAnimationMixingDuration(syncData.anmd);\n }\n if (\n syncData.anp !== undefined &&\n syncData.anp !== this.isAnimationPaused()\n ) {\n syncData.anp ? this.pauseAnimation() : this.resumeAnimation();\n }\n if (\n syncData.anss !== undefined &&\n syncData.anss !== this.getAnimationSpeedScale()\n ) {\n this.setAnimationSpeedScale(syncData.anss);\n }\n if (\n syncData.anet !== undefined &&\n syncData.anet !== this.getAnimationElapsedTime()\n ) {\n this.setAnimationElapsedTime(syncData.anet);\n }\n }\n\n extraInitializationFromInitialInstance(\n initialInstanceData: InstanceData\n ): void {\n const animationData = initialInstanceData.numberProperties.find(\n (data) => data.name === 'animation'\n );\n const animationIndex = animationData\n ? animationData.value\n : this._currentAnimationIndex;\n\n this.setAnimationIndexWithMixing(animationIndex, 0);\n\n if (initialInstanceData.customSize) {\n this.setSize(initialInstanceData.width, initialInstanceData.height);\n this.invalidateHitboxes();\n }\n if (initialInstanceData.opacity !== undefined) {\n this.setOpacity(initialInstanceData.opacity);\n }\n if (initialInstanceData.flippedX) {\n this.flipX(initialInstanceData.flippedX);\n }\n if (initialInstanceData.flippedY) {\n this.flipY(initialInstanceData.flippedY);\n }\n }\n\n getDrawableX(): number {\n const originOffset = this._renderer.getOriginOffset();\n\n return this.getX() + originOffset.x;\n }\n\n getDrawableY(): number {\n const originOffset = this._renderer.getOriginOffset();\n\n return this.getY() + originOffset.y;\n }\n\n getCenterX(): float {\n const originOffset = this._renderer.getOriginOffset();\n return -originOffset.x;\n }\n\n getCenterY(): float {\n const originOffset = this._renderer.getOriginOffset();\n return -originOffset.y;\n }\n\n onDestroyed(): void {\n super.onDestroyed();\n this._renderer.onDestroy();\n }\n\n setX(x: float): void {\n super.setX(x);\n this._renderer.updatePosition();\n }\n\n setY(y: float): void {\n super.setY(y);\n this._renderer.updatePosition();\n }\n\n setAngle(angle: float): void {\n super.setAngle(angle);\n this._renderer.updateAngle();\n }\n\n setOpacity(opacity: float): void {\n this._opacity = Math.max(0, Math.min(255, opacity));\n this._renderer.updateOpacity();\n }\n\n getOpacity(): float {\n return this._opacity;\n }\n\n getWidth(): float {\n return this._renderer.getWidth();\n }\n\n getHeight(): float {\n return this._renderer.getHeight();\n }\n\n setWidth(newWidth: float): void {\n const unscaledWidth = this._renderer.getUnscaledWidth();\n if (unscaledWidth !== 0) {\n this.setScaleX(newWidth / unscaledWidth);\n }\n }\n\n setHeight(newHeight: float): void {\n const unscaledHeight = this._renderer.getUnscaledHeight();\n if (unscaledHeight !== 0) {\n this.setScaleY(newHeight / unscaledHeight);\n }\n }\n\n setSize(newWidth: number, newHeight: number): void {\n this.setWidth(newWidth);\n this.setHeight(newHeight);\n }\n\n setScale(newScale: float): void {\n if (newScale < 0) {\n newScale = 0;\n }\n if (\n newScale === Math.abs(this._scaleX) &&\n newScale === Math.abs(this._scaleY)\n ) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n setScaleX(newScale: float): void {\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleX)) {\n return;\n }\n this._scaleX = newScale * (this._flippedX ? -1 : 1);\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n setScaleY(newScale: float): void {\n if (newScale < 0) {\n newScale = 0;\n }\n if (newScale === Math.abs(this._scaleY)) {\n return;\n }\n this._scaleY = newScale * (this._flippedY ? -1 : 1);\n this._renderer.updateScale();\n this.invalidateHitboxes();\n }\n\n /**\n * Get the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n *\n * @return the scale of the object (or the geometric mean of the X and Y scale in case they are different).\n */\n getScale(): float {\n const scaleX = Math.abs(this._scaleX);\n const scaleY = Math.abs(this._scaleY);\n return scaleX === scaleY ? scaleX : Math.sqrt(scaleX * scaleY);\n }\n\n getScaleY(): float {\n return Math.abs(this._scaleY);\n }\n\n getScaleX(): float {\n return Math.abs(this._scaleX);\n }\n\n isFlippedX(): boolean {\n return this._flippedX;\n }\n\n isFlippedY(): boolean {\n return this._flippedY;\n }\n\n flipX(enable: boolean) {\n if (enable !== this._flippedX) {\n this._scaleX *= -1;\n this._flippedX = enable;\n this.invalidateHitboxes();\n this._renderer.updateScale();\n }\n }\n\n flipY(enable: boolean) {\n if (enable !== this._flippedY) {\n this._scaleY *= -1;\n this._flippedY = enable;\n this.invalidateHitboxes();\n this._renderer.updateScale();\n }\n }\n\n setAnimationIndex(animationIndex: number): void {\n this.setAnimationIndexWithMixing(\n animationIndex,\n this._animationMixingDuration\n );\n }\n\n setAnimationIndexWithMixing(\n animationIndex: number,\n mixingDuration: number\n ): void {\n if (\n this._animations.length === 0 ||\n this._currentAnimationIndex === animationIndex ||\n !this.isAnimationIndex(animationIndex)\n ) {\n return;\n }\n const previousAnimation = this._animations[this._currentAnimationIndex];\n const newAnimation = this._animations[animationIndex];\n this._currentAnimationIndex = animationIndex;\n\n if (previousAnimation) {\n this._renderer.setMixing(\n previousAnimation.source,\n newAnimation.source,\n mixingDuration\n );\n }\n this._renderer.setAnimation(newAnimation.source, newAnimation.loop);\n this._isPausedFrameDirty = true;\n }\n\n setAnimationName(animationName: string): void {\n this.setAnimationNameWithMixing(\n animationName,\n this._animationMixingDuration\n );\n }\n\n setAnimationNameWithMixing(\n animationName: string,\n mixingDuration: number\n ): void {\n this.setAnimationIndexWithMixing(\n this.getAnimationIndexFor(animationName),\n mixingDuration\n );\n }\n\n getAnimationIndexFor(animationName: string): number {\n return this._animations.findIndex(\n (animation) => animation.name === animationName\n );\n }\n\n /**\n * Return the duration in second for the smooth transition between 2 animations.\n */\n getAnimationMixingDuration(): number {\n return this._animationMixingDuration;\n }\n\n /**\n * Change the duration in second for the smooth transition between 2 animations.\n */\n setAnimationMixingDuration(animationMixingDuration: number): void {\n this._animationMixingDuration = animationMixingDuration;\n }\n\n getAnimationIndex(): number {\n return this._currentAnimationIndex;\n }\n\n getAnimationName(): string {\n return this.isAnimationIndex(this._currentAnimationIndex)\n ? this._animations[this._currentAnimationIndex].name\n : '';\n }\n\n isAnimationIndex(animationIndex: number): boolean {\n return (\n Number.isInteger(animationIndex) &&\n animationIndex >= 0 &&\n animationIndex < this._animations.length\n );\n }\n\n hasAnimationEnded(): boolean {\n return this._renderer.isAnimationComplete();\n }\n\n isAnimationPaused() {\n return this._animationPaused;\n }\n\n pauseAnimation() {\n this._animationPaused = true;\n }\n\n resumeAnimation() {\n this._animationPaused = false;\n }\n\n getAnimationSpeedScale() {\n return this._animationSpeedScale;\n }\n\n setAnimationSpeedScale(ratio: float): void {\n this._animationSpeedScale = ratio;\n }\n\n getAnimationElapsedTime(): number {\n if (this._animations.length === 0) {\n return 0;\n }\n return this._renderer.getAnimationElapsedTime();\n }\n\n setAnimationElapsedTime(time: number): void {\n if (this._animations.length === 0) {\n return;\n }\n this._renderer.setAnimationElapsedTime(time);\n this._isPausedFrameDirty = true;\n }\n\n getPointAttachmentX(attachmentName: string, slotName?: string): number {\n return this._renderer.getPointAttachmentPosition(attachmentName, slotName)\n .x;\n }\n\n getPointAttachmentY(attachmentName: string, slotName?: string): number {\n return this._renderer.getPointAttachmentPosition(attachmentName, slotName)\n .y;\n }\n\n getAnimationDuration(): number {\n if (this._animations.length === 0) {\n return 0;\n }\n return this._renderer.getAnimationDuration(\n this._animations[this._currentAnimationIndex].source\n );\n }\n }\n\n gdjs.registerObject('SpineObject::SpineObject', gdjs.SpineRuntimeObject);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -31,11 +31,8 @@ module.exports = {
31
31
  .setIcon('JsPlatform/Extensions/text_input.svg');
32
32
 
33
33
  const textInputObject = new gd.ObjectJsImplementation();
34
- textInputObject.updateProperty = function (
35
- objectContent,
36
- propertyName,
37
- newValue
38
- ) {
34
+ textInputObject.updateProperty = function (propertyName, newValue) {
35
+ const objectContent = this.content;
39
36
  if (propertyName === 'initialValue') {
40
37
  objectContent.initialValue = newValue;
41
38
  return true;
@@ -85,8 +82,9 @@ module.exports = {
85
82
 
86
83
  return false;
87
84
  };
88
- textInputObject.getProperties = function (objectContent) {
85
+ textInputObject.getProperties = function () {
89
86
  const objectProperties = new gd.MapStringPropertyDescriptor();
87
+ const objectContent = this.content;
90
88
 
91
89
  objectProperties
92
90
  .getOrCreate('initialValue')
@@ -141,21 +139,21 @@ module.exports = {
141
139
  .setValue(objectContent.readOnly ? 'true' : 'false')
142
140
  .setType('boolean')
143
141
  .setLabel(_('Read only'))
144
- .setGroup(_('Field appearance'));
142
+ .setGroup(_('Field'));
145
143
 
146
144
  objectProperties
147
145
  .getOrCreate('disabled')
148
146
  .setValue(objectContent.disabled ? 'true' : 'false')
149
147
  .setType('boolean')
150
148
  .setLabel(_('Disabled'))
151
- .setGroup(_('Field appearance'));
149
+ .setGroup(_('Field'));
152
150
 
153
151
  objectProperties
154
152
  .getOrCreate('textColor')
155
153
  .setValue(objectContent.textColor || '0;0;0')
156
154
  .setType('color')
157
155
  .setLabel(_('Text color'))
158
- .setGroup(_('Field appearance'));
156
+ .setGroup(_('Font'));
159
157
 
160
158
  objectProperties
161
159
  .getOrCreate('fillColor')
@@ -180,8 +178,8 @@ module.exports = {
180
178
  .getOrCreate('borderColor')
181
179
  .setValue(objectContent.borderColor || '0;0;0')
182
180
  .setType('color')
183
- .setLabel(_('Border color'))
184
- .setGroup(_('Field appearance'));
181
+ .setLabel(_('Color'))
182
+ .setGroup(_('Border appearance'));
185
183
 
186
184
  objectProperties
187
185
  .getOrCreate('borderOpacity')
@@ -192,38 +190,35 @@ module.exports = {
192
190
  ).toString()
193
191
  )
194
192
  .setType('number')
195
- .setLabel(_('Border opacity'))
196
- .setGroup(_('Field appearance'));
193
+ .setLabel(_('Opacity'))
194
+ .setGroup(_('Border appearance'));
197
195
 
198
196
  objectProperties
199
197
  .getOrCreate('borderWidth')
200
198
  .setValue((objectContent.borderWidth || 0).toString())
201
199
  .setType('number')
202
- .setLabel(_('Border width'))
203
- .setGroup(_('Field appearance'));
200
+ .setLabel(_('Width'))
201
+ .setGroup(_('Border appearance'));
204
202
 
205
203
  return objectProperties;
206
204
  };
207
- textInputObject.setRawJSONContent(
208
- JSON.stringify({
209
- initialValue: '',
210
- placeholder: 'Touch to start typing',
211
- fontResourceName: '',
212
- fontSize: 20,
213
- inputType: 'text',
214
- textColor: '0;0;0',
215
- fillColor: '255;255;255',
216
- fillOpacity: 255,
217
- borderColor: '0;0;0',
218
- borderOpacity: 255,
219
- borderWidth: 1,
220
- readOnly: false,
221
- disabled: false,
222
- })
223
- );
205
+ textInputObject.content = {
206
+ initialValue: '',
207
+ placeholder: 'Touch to start typing',
208
+ fontResourceName: '',
209
+ fontSize: 20,
210
+ inputType: 'text',
211
+ textColor: '0;0;0',
212
+ fillColor: '255;255;255',
213
+ fillOpacity: 255,
214
+ borderColor: '0;0;0',
215
+ borderOpacity: 255,
216
+ borderWidth: 1,
217
+ readOnly: false,
218
+ disabled: false,
219
+ };
224
220
 
225
221
  textInputObject.updateInitialInstanceProperty = function (
226
- objectContent,
227
222
  instance,
228
223
  propertyName,
229
224
  newValue
@@ -238,10 +233,7 @@ module.exports = {
238
233
 
239
234
  return false;
240
235
  };
241
- textInputObject.getInitialInstanceProperties = function (
242
- content,
243
- instance
244
- ) {
236
+ textInputObject.getInitialInstanceProperties = function (instance) {
245
237
  const instanceProperties = new gd.MapStringPropertyDescriptor();
246
238
 
247
239
  instanceProperties
@@ -278,7 +270,7 @@ module.exports = {
278
270
 
279
271
  // Properties expressions/conditions/actions:
280
272
 
281
- // Deprecated
273
+ // Deprecated, see TextContainerCapability
282
274
  object
283
275
  .addExpressionAndConditionAndAction(
284
276
  'string',
@@ -298,6 +290,7 @@ module.exports = {
298
290
  .setFunctionName('setText')
299
291
  .setGetter('getText');
300
292
 
293
+ // Deprecated, see TextContainerCapability
301
294
  object
302
295
  .addStrExpression(
303
296
  'Text',
@@ -306,6 +299,7 @@ module.exports = {
306
299
  '',
307
300
  'res/conditions/text24_black.png'
308
301
  )
302
+ .setHidden()
309
303
  .addParameter('object', _('Text input'), 'TextInputObject', false)
310
304
  .setFunctionName('getText');
311
305
 
@@ -680,18 +674,21 @@ module.exports = {
680
674
 
681
675
  update() {
682
676
  const instance = this._instance;
683
- const properties = this._associatedObjectConfiguration.getProperties();
677
+ const object = gd.castObject(
678
+ this._associatedObjectConfiguration,
679
+ gd.ObjectJsImplementation
680
+ );
684
681
 
685
682
  const placeholder =
686
683
  instance.getRawStringProperty('placeholder') ||
687
- properties.get('placeholder').getValue();
684
+ object.content.placeholder;
688
685
  const initialValue =
689
686
  instance.getRawStringProperty('initialValue') ||
690
- properties.get('initialValue').getValue();
687
+ object.content.initialValue;
691
688
  const hasInitialValue = initialValue !== '';
692
689
  this._pixiText.text = hasInitialValue ? initialValue : placeholder;
693
690
 
694
- const textColor = properties.get('textColor').getValue();
691
+ const textColor = object.content.textColor;
695
692
  const finalTextColor = hasInitialValue
696
693
  ? objectsRenderingService.rgbOrHexToHexNumber(textColor)
697
694
  : 0x888888;
@@ -701,19 +698,20 @@ module.exports = {
701
698
  this._pixiText.dirty = true;
702
699
  }
703
700
 
704
- const fontSize = parseFloat(properties.get('fontSize').getValue());
701
+ const fontSize = object.content.fontSize;
705
702
  if (this._pixiText.style.fontSize !== fontSize) {
706
703
  this._pixiText.style.fontSize = fontSize;
707
704
  this._pixiText.dirty = true;
708
705
  }
709
706
 
710
- const fontResourceName = properties.get('fontResourceName').getValue();
707
+ const fontResourceName = object.content.fontResourceName;
711
708
  if (this._fontResourceName !== fontResourceName) {
712
709
  this._fontResourceName = fontResourceName;
713
710
 
714
711
  this._pixiResourcesLoader
715
712
  .loadFontFamily(this._project, fontResourceName)
716
713
  .then((fontFamily) => {
714
+ if (this._wasDestroyed) return;
717
715
  this._pixiText.style.fontFamily = fontFamily;
718
716
  this._pixiText.dirty = true;
719
717
  })
@@ -742,8 +740,7 @@ module.exports = {
742
740
  this._instance.getAngle()
743
741
  );
744
742
 
745
- const borderWidth =
746
- parseFloat(properties.get('borderWidth').getValue()) || 0;
743
+ const borderWidth = object.content.borderWidth || 0;
747
744
 
748
745
  // Draw the mask for the text.
749
746
  const textOffset = borderWidth + TEXT_MASK_PADDING;
@@ -757,8 +754,7 @@ module.exports = {
757
754
  );
758
755
  this._pixiTextMask.endFill();
759
756
 
760
- const isTextArea =
761
- properties.get('inputType').getValue() === 'text area';
757
+ const isTextArea = object.content.inputType === 'text area';
762
758
 
763
759
  this._pixiText.position.x = textOffset;
764
760
  this._pixiText.position.y = isTextArea
@@ -766,14 +762,10 @@ module.exports = {
766
762
  : height / 2 - this._pixiText.height / 2;
767
763
 
768
764
  // Draw the background and border.
769
- const fillColor = properties.get('fillColor').getValue();
770
- const fillOpacity = parseFloat(
771
- properties.get('fillOpacity').getValue()
772
- );
773
- const borderColor = properties.get('borderColor').getValue();
774
- const borderOpacity = parseFloat(
775
- properties.get('borderOpacity').getValue()
776
- );
765
+ const fillColor = object.content.fillColor;
766
+ const fillOpacity = object.content.fillOpacity;
767
+ const borderColor = object.content.borderColor;
768
+ const borderOpacity = object.content.borderOpacity;
777
769
 
778
770
  this._pixiGraphics.clear();
779
771
  this._pixiGraphics.lineStyle(
@@ -787,6 +779,13 @@ module.exports = {
787
779
  );
788
780
  this._pixiGraphics.drawRect(0, 0, width, height);
789
781
  this._pixiGraphics.endFill();
782
+
783
+ // Do not hide completely an object so it can still be manipulated
784
+ const alphaForDisplay = Math.max(
785
+ this._instance.getOpacity() / 255,
786
+ 0.5
787
+ );
788
+ this._pixiObject.alpha = alphaForDisplay;
790
789
  }
791
790
 
792
791
  getDefaultWidth() {