gdcore-tools 2.0.0-beta5 → 2.0.0-beta6

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 (77) hide show
  1. package/dist/Runtime/CustomRuntimeObject.js +1 -1
  2. package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
  3. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
  4. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
  5. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +1 -1
  6. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +2 -2
  7. package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
  8. package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
  9. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
  10. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
  11. package/dist/Runtime/Extensions/Effects/JsExtension.js +2 -2
  12. package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +97 -7
  13. package/dist/Runtime/Extensions/Multiplayer/messageManager.js +1 -1
  14. package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +2 -2
  15. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +1 -1
  16. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +2 -2
  17. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
  18. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
  19. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +1 -1
  20. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
  21. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js +1 -1
  22. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js.map +2 -2
  23. package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +62 -27
  24. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
  25. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
  26. package/dist/Runtime/Extensions/Spine/JsExtension.js +32 -0
  27. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js +1 -1
  28. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js.map +2 -2
  29. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
  30. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
  31. package/dist/Runtime/Extensions/TextInput/JsExtension.js +3 -1
  32. package/dist/Runtime/Extensions/TileMap/JsExtension.js +84 -29
  33. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
  34. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
  35. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
  36. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
  37. package/dist/Runtime/Extensions/TileMap/helper/dts/load/tiled/TiledTileMapLoader.d.ts.map +1 -1
  38. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +12 -1
  39. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
  40. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
  41. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
  42. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
  43. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
  44. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
  45. package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +1 -0
  46. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  47. package/dist/Runtime/SpriteAnimator.js +1 -1
  48. package/dist/Runtime/SpriteAnimator.js.map +2 -2
  49. package/dist/Runtime/debugger-client/InGameDebugger.js +1 -1
  50. package/dist/Runtime/debugger-client/InGameDebugger.js.map +2 -2
  51. package/dist/Runtime/debugger-client/abstract-debugger-client.js +1 -1
  52. package/dist/Runtime/debugger-client/abstract-debugger-client.js.map +2 -2
  53. package/dist/Runtime/debugger-client/hot-reloader.js +2 -1
  54. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  55. package/dist/Runtime/debugger-client/minimal-debugger-client.js +2 -0
  56. package/dist/Runtime/debugger-client/minimal-debugger-client.js.map +7 -0
  57. package/dist/Runtime/debugger-client/websocket-debugger-client.js.map +2 -2
  58. package/dist/Runtime/debugger-client/window-message-debugger-client.js.map +2 -2
  59. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
  60. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
  61. package/dist/Runtime/runtimegame.js +1 -1
  62. package/dist/Runtime/runtimegame.js.map +2 -2
  63. package/dist/Runtime/runtimescene.js +1 -1
  64. package/dist/Runtime/runtimescene.js.map +2 -2
  65. package/dist/Runtime/scenestack.js +1 -1
  66. package/dist/Runtime/scenestack.js.map +2 -2
  67. package/dist/Runtime/spriteruntimeobject.js +1 -1
  68. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  69. package/dist/Runtime/types/project-data.d.ts +31 -8
  70. package/dist/Runtime/variablescontainer.js +1 -1
  71. package/dist/Runtime/variablescontainer.js.map +2 -2
  72. package/dist/lib/libGD.cjs +1 -1
  73. package/dist/lib/libGD.wasm +0 -0
  74. package/gd.d.ts +77 -47
  75. package/package.json +2 -2
  76. package/dist/lib/libGD.d.cts +0 -5
  77. package/dist/loaders.d.cts +0 -2
@@ -73,6 +73,38 @@ module.exports = {
73
73
  .setFunctionName('setAnimationMixingDuration')
74
74
  .setGetter('getAnimationMixingDuration');
75
75
 
76
+ object
77
+ .addExpressionAndCondition(
78
+ 'number',
79
+ 'PointAttachmentX',
80
+ _('Point attachment X position'),
81
+ _('x position of spine point attachment'),
82
+ _('x position of spine _PARAM1_ point attachment for _PARAM2_ slot'),
83
+ _('Animations and images'),
84
+ 'JsPlatform/Extensions/spine.svg'
85
+ )
86
+ .addParameter('object', _('Spine'), 'SpineObject')
87
+ .addParameter('string', _('Attachment name'))
88
+ .addParameter('string', _('Slot name (use "" if names are the same)'))
89
+ .useStandardParameters('number', gd.ParameterOptions.makeNewOptions())
90
+ .setFunctionName('getPointAttachmentX');
91
+
92
+ object
93
+ .addExpressionAndCondition(
94
+ 'number',
95
+ 'PointAttachmentY',
96
+ _('Point attachment Y position'),
97
+ _('y position of spine point attachment'),
98
+ _('y position of spine _PARAM1_ point attachment for _PARAM2_ slot'),
99
+ _('Animations and images'),
100
+ 'JsPlatform/Extensions/spine.svg'
101
+ )
102
+ .addParameter('object', _('Spine'), 'SpineObject')
103
+ .addParameter('string', _('Attachment name'))
104
+ .addParameter('string', _('Slot name (use "" if names are the same)'))
105
+ .useStandardParameters('number', gd.ParameterOptions.makeNewOptions())
106
+ .setFunctionName('getPointAttachmentY');
107
+
76
108
  return extension;
77
109
  },
78
110
 
@@ -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": "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",
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": "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",
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 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=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())}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=a,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 }\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
  }
@@ -278,7 +278,7 @@ module.exports = {
278
278
 
279
279
  // Properties expressions/conditions/actions:
280
280
 
281
- // Deprecated
281
+ // Deprecated, see TextContainerCapability
282
282
  object
283
283
  .addExpressionAndConditionAndAction(
284
284
  'string',
@@ -298,6 +298,7 @@ module.exports = {
298
298
  .setFunctionName('setText')
299
299
  .setGetter('getText');
300
300
 
301
+ // Deprecated, see TextContainerCapability
301
302
  object
302
303
  .addStrExpression(
303
304
  'Text',
@@ -306,6 +307,7 @@ module.exports = {
306
307
  '',
307
308
  'res/conditions/text24_black.png'
308
309
  )
310
+ .setHidden()
309
311
  .addParameter('object', _('Text input'), 'TextInputObject', false)
310
312
  .setFunctionName('getText');
311
313
 
@@ -184,7 +184,6 @@ const defineTileMap = function (extension, _, gd) {
184
184
  objectTileMap
185
185
  )
186
186
  .setCategoryFullName(_('Advanced'))
187
- .addDefaultBehavior('EffectCapability::EffectBehavior')
188
187
  .addDefaultBehavior('ResizableCapability::ResizableBehavior')
189
188
  .addDefaultBehavior('ScalableCapability::ScalableBehavior')
190
189
  .addDefaultBehavior('OpacityCapability::OpacityBehavior')
@@ -721,7 +720,6 @@ const defineSimpleTileMap = function (extension, _, gd) {
721
720
  objectSimpleTileMap
722
721
  )
723
722
  .setCategoryFullName(_('General'))
724
- .addDefaultBehavior('EffectCapability::EffectBehavior')
725
723
  .addDefaultBehavior('ResizableCapability::ResizableBehavior')
726
724
  .addDefaultBehavior('ScalableCapability::ScalableBehavior')
727
725
  .addDefaultBehavior('OpacityCapability::OpacityBehavior')
@@ -1240,7 +1238,6 @@ const defineCollisionMask = function (extension, _, gd) {
1240
1238
  collisionMaskObject
1241
1239
  )
1242
1240
  .setCategoryFullName(_('Advanced'))
1243
- .addDefaultBehavior('EffectCapability::EffectBehavior')
1244
1241
  .addDefaultBehavior('ResizableCapability::ResizableBehavior')
1245
1242
  .addDefaultBehavior('ScalableCapability::ScalableBehavior')
1246
1243
  .setIncludeFile('Extensions/TileMap/tilemapcollisionmaskruntimeobject.js')
@@ -1619,6 +1616,14 @@ module.exports = {
1619
1616
  // the Tilemap will properly emit events when hovered/clicked.
1620
1617
  // By default, this is not implemented in pixi-tilemap.
1621
1618
  this._pixiObject.containsPoint = (position) => {
1619
+ if (!this._pixiObject) {
1620
+ // Ease debugging by throwing now rather than waiting for an exception later.
1621
+ throw new Error(
1622
+ 'containsPoint called on a destroyed PIXI object - this object was not properly removed from the PIXI container.'
1623
+ );
1624
+ return;
1625
+ }
1626
+
1622
1627
  // Turns the world position to the local object coordinates
1623
1628
  const localPosition = new PIXI.Point();
1624
1629
  this._pixiObject.worldTransform.applyInverse(position, localPosition);
@@ -1641,21 +1646,32 @@ module.exports = {
1641
1646
  super.onRemovedFromScene();
1642
1647
  // Keep textures because they are shared by all tile maps.
1643
1648
  this._pixiObject.destroy(false);
1649
+
1650
+ // Not strictly necessary, but helps finding wrong
1651
+ // handling of this._pixiObject in its container.
1652
+ this._pixiObject = null;
1653
+ }
1654
+
1655
+ _replacePixiObject(newPixiObject) {
1656
+ if (this._pixiObject !== null)
1657
+ this._pixiContainer.removeChild(this._pixiObject);
1658
+ this._pixiObject = newPixiObject;
1659
+ this._pixiContainer.addChild(this._pixiObject);
1644
1660
  }
1645
1661
 
1646
- onLoadingError() {
1662
+ _onLoadingError() {
1647
1663
  this.errorPixiObject =
1648
1664
  this.errorPixiObject ||
1649
1665
  new PIXI.Sprite(this._pixiResourcesLoader.getInvalidPIXITexture());
1650
- this._pixiContainer.addChild(this.errorPixiObject);
1651
- this._pixiObject = this.errorPixiObject;
1666
+
1667
+ this._replacePixiObject(this.errorPixiObject);
1652
1668
  }
1653
1669
 
1654
- onLoadingSuccess() {
1670
+ _onLoadingSuccess() {
1655
1671
  if (this.errorPixiObject) {
1656
- this._pixiContainer.removeChild(this.errorPixiObject);
1672
+ this._replacePixiObject(this.tileMapPixiObject);
1673
+
1657
1674
  this.errorPixiObject = null;
1658
- this._pixiObject = this.tileMapPixiObject;
1659
1675
  }
1660
1676
  }
1661
1677
 
@@ -1734,7 +1750,7 @@ module.exports = {
1734
1750
  pako,
1735
1751
  (tileMap) => {
1736
1752
  if (!tileMap) {
1737
- this.onLoadingError();
1753
+ this._onLoadingError();
1738
1754
  // _loadTileMapWithCallback already log errors
1739
1755
  return;
1740
1756
  }
@@ -1753,11 +1769,11 @@ module.exports = {
1753
1769
  levelIndex,
1754
1770
  (textureCache) => {
1755
1771
  if (!textureCache) {
1756
- this.onLoadingError();
1772
+ this._onLoadingError();
1757
1773
  // getOrLoadTextureCache already log warns and errors.
1758
1774
  return;
1759
1775
  }
1760
- this.onLoadingSuccess();
1776
+ this._onLoadingSuccess();
1761
1777
 
1762
1778
  this.width = tileMap.getWidth();
1763
1779
  this.height = tileMap.getHeight();
@@ -1923,6 +1939,14 @@ module.exports = {
1923
1939
  // the Tilemap will properly emit events when hovered/clicked.
1924
1940
  // By default, this is not implemented in pixi-tilemap.
1925
1941
  this._pixiObject.containsPoint = (position) => {
1942
+ if (!this._pixiObject) {
1943
+ // Ease debugging by throwing now rather than waiting for an exception later.
1944
+ throw new Error(
1945
+ 'containsPoint called on a destroyed PIXI object - this object was not properly removed from the PIXI container.'
1946
+ );
1947
+ return;
1948
+ }
1949
+
1926
1950
  // Turns the world position to the local object coordinates
1927
1951
  const localPosition = new PIXI.Point();
1928
1952
  if (this.tileMapPixiObject.visible) {
@@ -1966,21 +1990,32 @@ module.exports = {
1966
1990
  super.onRemovedFromScene();
1967
1991
  // Keep textures because they are shared by all tile maps.
1968
1992
  this._pixiObject.destroy(false);
1993
+
1994
+ // Not strictly necessary, but helps finding wrong
1995
+ // handling of this._pixiObject in its container.
1996
+ this._pixiObject = null;
1969
1997
  }
1970
1998
 
1971
- onLoadingError() {
1999
+ _replacePixiObject(newPixiObject) {
2000
+ if (this._pixiObject !== null)
2001
+ this._pixiContainer.removeChild(this._pixiObject);
2002
+ this._pixiObject = newPixiObject;
2003
+ this._pixiContainer.addChild(this._pixiObject);
2004
+ }
2005
+
2006
+ _onLoadingError() {
1972
2007
  this.errorPixiObject =
1973
2008
  this.errorPixiObject ||
1974
2009
  new PIXI.Sprite(this._pixiResourcesLoader.getInvalidPIXITexture());
1975
- this._pixiContainer.addChild(this.errorPixiObject);
1976
- this._pixiObject = this.errorPixiObject;
2010
+
2011
+ this._replacePixiObject(this.errorPixiObject);
1977
2012
  }
1978
2013
 
1979
- onLoadingSuccess() {
2014
+ _onLoadingSuccess() {
1980
2015
  if (this.errorPixiObject) {
1981
- this._pixiContainer.removeChild(this.errorPixiObject);
2016
+ this._replacePixiObject(this.tileMapPixiObject);
2017
+
1982
2018
  this.errorPixiObject = null;
1983
- this._pixiObject = this.tileMapPixiObject;
1984
2019
  }
1985
2020
  }
1986
2021
 
@@ -2055,7 +2090,7 @@ module.exports = {
2055
2090
  rowCount,
2056
2091
  (tileMap) => {
2057
2092
  if (!tileMap) {
2058
- this.onLoadingError();
2093
+ this._onLoadingError();
2059
2094
  console.error('Could not parse tilemap.');
2060
2095
  return;
2061
2096
  }
@@ -2076,7 +2111,7 @@ module.exports = {
2076
2111
  /** @type {TileMapHelper.TileTextureCache | null} */
2077
2112
  textureCache
2078
2113
  ) => {
2079
- this.onLoadingSuccess();
2114
+ this._onLoadingSuccess();
2080
2115
  if (!this._editableTileMap) return;
2081
2116
 
2082
2117
  this.width = this._editableTileMap.getWidth();
@@ -2148,7 +2183,7 @@ module.exports = {
2148
2183
  /** @type {TileMapHelper.TileTextureCache | null} */
2149
2184
  textureCache
2150
2185
  ) => {
2151
- this.onLoadingSuccess();
2186
+ this._onLoadingSuccess();
2152
2187
  if (!this._editableTileMap) return;
2153
2188
 
2154
2189
  this.width = this._editableTileMap.getWidth();
@@ -2256,12 +2291,21 @@ module.exports = {
2256
2291
  );
2257
2292
 
2258
2293
  this.tileMapPixiObject = new PIXI.Graphics();
2294
+ this.tileMapPixiObject._0iAmTheTileMapPixiObject = true;
2259
2295
  this._pixiObject = this.tileMapPixiObject;
2260
2296
 
2261
2297
  // Implement `containsPoint` so that we can set `interactive` to true and
2262
2298
  // the Tilemap will properly emit events when hovered/clicked.
2263
2299
  // By default, this is not implemented in pixi-tilemap.
2264
2300
  this._pixiObject.containsPoint = (position) => {
2301
+ if (!this._pixiObject) {
2302
+ // Ease debugging by throwing now rather than waiting for an exception later.
2303
+ throw new Error(
2304
+ 'containsPoint called on a destroyed PIXI object - this object was not properly removed from the PIXI container.'
2305
+ );
2306
+ return;
2307
+ }
2308
+
2265
2309
  // Turns the world position to the local object coordinates
2266
2310
  const localPosition = new PIXI.Point();
2267
2311
  this._pixiObject.worldTransform.applyInverse(position, localPosition);
@@ -2284,21 +2328,32 @@ module.exports = {
2284
2328
  onRemovedFromScene() {
2285
2329
  super.onRemovedFromScene();
2286
2330
  this._pixiObject.destroy();
2331
+
2332
+ // Not strictly necessary, but helps finding wrong
2333
+ // handling of this._pixiObject in its container.
2334
+ this._pixiObject = null;
2335
+ }
2336
+
2337
+ _replacePixiObject(newPixiObject) {
2338
+ if (this._pixiObject !== null)
2339
+ this._pixiContainer.removeChild(this._pixiObject);
2340
+ this._pixiObject = newPixiObject;
2341
+ this._pixiContainer.addChild(this._pixiObject);
2287
2342
  }
2288
2343
 
2289
- onLoadingError() {
2344
+ _onLoadingError() {
2290
2345
  this.errorPixiObject =
2291
2346
  this.errorPixiObject ||
2292
2347
  new PIXI.Sprite(this._pixiResourcesLoader.getInvalidPIXITexture());
2293
- this._pixiContainer.addChild(this.errorPixiObject);
2294
- this._pixiObject = this.errorPixiObject;
2348
+
2349
+ this._replacePixiObject(this.errorPixiObject);
2295
2350
  }
2296
2351
 
2297
- onLoadingSuccess() {
2352
+ _onLoadingSuccess() {
2298
2353
  if (this.errorPixiObject) {
2299
- this._pixiContainer.removeChild(this.errorPixiObject);
2354
+ this._replacePixiObject(this.tileMapPixiObject);
2355
+
2300
2356
  this.errorPixiObject = null;
2301
- this._pixiObject = this.tileMapPixiObject;
2302
2357
  }
2303
2358
  }
2304
2359
 
@@ -2366,11 +2421,11 @@ module.exports = {
2366
2421
  pako,
2367
2422
  (tileMap) => {
2368
2423
  if (!tileMap) {
2369
- this.onLoadingError();
2424
+ this._onLoadingError();
2370
2425
  // _loadTiledMapWithCallback already log errors
2371
2426
  return;
2372
2427
  }
2373
- this.onLoadingSuccess();
2428
+ this._onLoadingSuccess();
2374
2429
 
2375
2430
  this.width = tileMap.getWidth();
2376
2431
  this.height = tileMap.getHeight();
@@ -1,2 +1,2 @@
1
- var gdjs;(function(h){let D;(function(w){const p=class{constructor(t,e){this._transformation=new h.AffineTransformation;this._inverseTransformation=new h.AffineTransformation;this._transformationUpToDateCount=1;this._source=t,this.tag=e,this._layers=new Map,this._buildLayersFromTileMap(t,this._layers)}updateFromTileMap(t){this._source=t,this._layers=new Map,this._buildLayersFromTileMap(t,this._layers)}_buildLayersFromTileMap(t,e){for(const r of t.getLayers()){if(!(r instanceof TileMapHelper.EditableTileMapLayer))continue;const n=r;e.set(n.id,new v(this,n))}}getTransformation(){return this._transformation}setTransformation(t){this._transformation=t;const e=this._inverseTransformation;e.copyFrom(t),e.invert(),this._invalidate()}_invalidate(){this._transformationUpToDateCount=(this._transformationUpToDateCount+1)%Number.MAX_SAFE_INTEGER}getWidth(){return this._source.getWidth()}getHeight(){return this._source.getHeight()}getTileHeight(){return this._source.getTileHeight()}getTileWidth(){return this._source.getTileWidth()}getDimensionX(){return this._source.getDimensionX()}getDimensionY(){return this._source.getDimensionY()}getTileDefinition(t){return this._source.getTileDefinition(t)}getLayer(t){return this._layers.get(t)}getLayers(){return this._layers.values()}pointIsInsideTile(t,e,r){const n=p.workingPoint;return n[0]=t,n[1]=e,this._inverseTransformation.transform(n,n),this._source.pointIsInsideTile(n[0],n[1],r)}getHitboxesAround(t,e,r,n,s){const o=this._inverseTransformation,i=p.workingPoint;i[0]=e,i[1]=r,o.transform(i,i);const a=i[0],l=i[1];i[0]=n,i[1]=r,o.transform(i,i);const f=i[0],g=i[1];i[0]=n,i[1]=s,o.transform(i,i);const y=i[0],T=i[1];i[0]=e,i[1]=s,o.transform(i,i);const b=i[0],H=i[1],I=Math.max(0,Math.floor(Math.min(a,f,y,b)/this._source.getTileWidth())),L=Math.min(this.getDimensionX()-1,Math.floor(Math.max(a,f,y,b)/this._source.getTileWidth())),P=Math.max(0,Math.floor(Math.min(l,g,T,H)/this._source.getTileHeight())),C=Math.min(this.getDimensionY()-1,Math.floor(Math.max(l,g,T,H)/this._source.getTileHeight()));return this.getHitboxes(t,I,P,L,C)}getHitboxes(t,e,r,n,s){return new d(this,t,e,r,n,s)}getAllHitboxes(t){return this.getHitboxes(t,0,0,this._source.getDimensionX()-1,this._source.getDimensionY()-1)}};let _=p;_.workingPoint=[0,0],w.TransformedCollisionTileMap=_;const x=class{constructor(t,e,r,n,s,o){this.map=t,this.tag=e,this.xMin=r,this.yMin=n,this.xMax=s,this.yMax=o}[Symbol.iterator](){let t=this.map.getLayers()[Symbol.iterator](),e=x.emptyItr;return{next:()=>{let r=e.next();for(;r.done;){const n=t.next();if(n.done)return r;e=n.value.getHitboxes(this.tag,this.xMin,this.yMin,this.xMax,this.yMax)[Symbol.iterator](),r=e.next()}return r}}}};let d=x;d.emptyItr={next:()=>({value:void 0,done:!0})};class v{constructor(t,e){this.tileMap=t,this._source=e,this._tiles=[];const r=this._source.getDimensionX(),n=this._source.getDimensionY();this._tiles.length=n;for(let s=0;s<n;s++){this._tiles[s]=[],this._tiles[s].length=r;for(let o=0;o<r;o++)this._tiles[s][o]=new c(this,o,s)}}get(t,e){const r=this._tiles[e];return r?r[t]:void 0}getDimensionX(){return this._tiles.length===0?0:this._tiles[0].length}getDimensionY(){return this._tiles.length}getWidth(){return this._source.getWidth()}getHeight(){return this._source.getHeight()}isFlippedDiagonally(t,e){return this._source.isFlippedDiagonally(t,e)}isFlippedVertically(t,e){return this._source.isFlippedVertically(t,e)}isFlippedHorizontally(t,e){return this._source.isFlippedHorizontally(t,e)}getHitboxes(t,e,r,n,s){return new m(this,t,e,r,n,s)}getAllHitboxes(t){return this.getHitboxes(t,0,0,this.getDimensionX()-1,this.getDimensionY()-1)}}w.TransformedCollisionTileMapLayer=v;const u=class{constructor(t,e,r,n,s,o){this.layer=t,this.tag=e,this.xMin=r,this.yMin=n,this.xMax=s,this.yMax=o}[Symbol.iterator](){let t=this.xMax,e=this.yMin-1,r=u.emptyItr;return{next:()=>{let n=r.next();for(;n.done;){if(t++,t>this.xMax&&(e++,t=this.xMin),e>this.yMax)return n;const s=this.layer.get(t,e);if(!s)continue;const o=s.getDefinition();!o||o.hasTaggedHitBox(this.tag)&&(r=s.getHitboxes()[Symbol.iterator](),n=r.next())}return n}}}};let m=u;m.emptyItr={next:()=>({value:void 0,done:!0})};const M=class{constructor(t,e,r){this.affineTransformationUpToDateCount=0;this.layer=t,this.x=e,this.y=r;const n=this.getDefinition();if(this.hitBoxes=[],n){const s=this.layer.tileMap.tag,o=n.getHitBoxes(s);if(o){this.hitBoxes.length=o.length;for(let i=0;i<this.hitBoxes.length;i++){const a=new h.Polygon;this.hitBoxes[i]=a,a.vertices.length=o[i].length;for(let l=0;l<a.vertices.length;l++)a.vertices[l]=[0,0]}}}}getDefinition(){return this.layer.tileMap.getTileDefinition(this.layer._source.getTileId(this.x,this.y))}_isHitboxesUpToDate(){return this.affineTransformationUpToDateCount===this.layer.tileMap._transformationUpToDateCount}_setHitboxesUpToDate(){this.affineTransformationUpToDateCount=this.layer.tileMap._transformationUpToDateCount}getHitboxes(){if(this._isHitboxesUpToDate())return this.hitBoxes;const t=this.getDefinition();if(!t)return this._setHitboxesUpToDate(),this.hitBoxes.length=0,this.hitBoxes;const e=this.layer.tileMap.tag,r=t.getHitBoxes(e);if(!r)return this._setHitboxesUpToDate(),this.hitBoxes.length=0,this.hitBoxes;const n=this.layer.tileMap.getTransformation(),s=this.layer.tileMap.getTileWidth(),o=this.layer.tileMap.getTileHeight(),i=M.workingTransformation;i.setToTranslation(s*this.x,o*this.y),this.layer.isFlippedHorizontally(this.x,this.y)&&i.flipX(s/2),this.layer.isFlippedVertically(this.x,this.y)&&i.flipY(o/2),this.layer.isFlippedDiagonally(this.x,this.y)&&(i.flipX(s/2),i.rotateAround(Math.PI/2,s/2,o/2)),i.preConcatenate(n);for(let a=0;a<this.hitBoxes.length;a++){const l=r[a],f=this.hitBoxes[a];for(let g=0;g<f.vertices.length;g++){const y=l[g],T=f.vertices[g];i.transform(y,T)}}return this._setHitboxesUpToDate(),this.hitBoxes}};let c=M;c.workingTransformation=new h.AffineTransformation})(D=h.TileMap||(h.TileMap={}))})(gdjs||(gdjs={}));
1
+ var gdjs;(function(p){let D;(function(P){const u=class{constructor(t,e){this._transformation=new p.AffineTransformation;this._inverseTransformation=new p.AffineTransformation;this._transformationUpToDateCount=1;this._source=t,this.tag=e,this._layers=new Map,this._buildLayersFromTileMap(t,this._layers)}updateFromTileMap(t){this._source=t,this._layers=new Map,this._buildLayersFromTileMap(t,this._layers)}_buildLayersFromTileMap(t,e){for(const n of t.getLayers()){if(!(n instanceof TileMapHelper.EditableTileMapLayer))continue;const i=n;e.set(i.id,new v(this,i))}}getTransformation(){return this._transformation}setTransformation(t){this._transformation=t;const e=this._inverseTransformation;e.copyFrom(t),e.invert(),this._invalidate()}_invalidate(){this._transformationUpToDateCount=(this._transformationUpToDateCount+1)%Number.MAX_SAFE_INTEGER}invalidateTile(t,e,n){const i=this.getLayer(t);if(i){const s=i.get(e,n);s&&s.invalidate()}}getWidth(){return this._source.getWidth()}getHeight(){return this._source.getHeight()}getTileHeight(){return this._source.getTileHeight()}getTileWidth(){return this._source.getTileWidth()}getDimensionX(){return this._source.getDimensionX()}getDimensionY(){return this._source.getDimensionY()}getTileDefinition(t){return this._source.getTileDefinition(t)}getLayer(t){return this._layers.get(t)}getLayers(){return this._layers.values()}pointIsInsideTile(t,e,n){const i=u.workingPoint;return i[0]=t,i[1]=e,this._inverseTransformation.transform(i,i),this._source.pointIsInsideTile(i[0],i[1],n)}getHitboxesAround(t,e,n,i,s){const o=this._inverseTransformation,r=u.workingPoint;r[0]=e,r[1]=n,o.transform(r,r);const h=r[0],a=r[1];r[0]=i,r[1]=n,o.transform(r,r);const y=r[0],f=r[1];r[0]=i,r[1]=s,o.transform(r,r);const g=r[0],l=r[1];r[0]=e,r[1]=s,o.transform(r,r);const c=r[0],T=r[1],B=Math.max(0,Math.floor(Math.min(h,y,g,c)/this._source.getTileWidth())),I=Math.min(this.getDimensionX()-1,Math.floor(Math.max(h,y,g,c)/this._source.getTileWidth())),F=Math.max(0,Math.floor(Math.min(a,f,l,T)/this._source.getTileHeight())),L=Math.min(this.getDimensionY()-1,Math.floor(Math.max(a,f,l,T)/this._source.getTileHeight()));return this.getHitboxes(t,B,F,I,L)}getHitboxes(t,e,n,i,s){return new d(this,t,e,n,i,s)}getAllHitboxes(t){return this.getHitboxes(t,0,0,this._source.getDimensionX()-1,this._source.getDimensionY()-1)}};let H=u;H.workingPoint=[0,0],P.TransformedCollisionTileMap=H;const _=class{constructor(t,e,n,i,s,o){this.map=t,this.tag=e,this.xMin=n,this.yMin=i,this.xMax=s,this.yMax=o}[Symbol.iterator](){let t=this.map.getLayers()[Symbol.iterator](),e=_.emptyItr;return{next:()=>{let n=e.next();for(;n.done;){const i=t.next();if(i.done)return n;e=i.value.getHitboxes(this.tag,this.xMin,this.yMin,this.xMax,this.yMax)[Symbol.iterator](),n=e.next()}return n}}}};let d=_;d.emptyItr={next:()=>({value:void 0,done:!0})};class v{constructor(t,e){this.tileMap=t,this._source=e,this._tiles=[];const n=this._source.getDimensionX(),i=this._source.getDimensionY();this._tiles.length=i;for(let s=0;s<i;s++){this._tiles[s]=[],this._tiles[s].length=n;for(let o=0;o<n;o++)this._tiles[s][o]=new M(this,o,s)}}get(t,e){const n=this._tiles[e];return n?n[t]:void 0}getDimensionX(){return this._tiles.length===0?0:this._tiles[0].length}getDimensionY(){return this._tiles.length}getWidth(){return this._source.getWidth()}getHeight(){return this._source.getHeight()}isFlippedDiagonally(t,e){return this._source.isFlippedDiagonally(t,e)}isFlippedVertically(t,e){return this._source.isFlippedVertically(t,e)}isFlippedHorizontally(t,e){return this._source.isFlippedHorizontally(t,e)}getHitboxes(t,e,n,i,s){return new m(this,t,e,n,i,s)}getAllHitboxes(t){return this.getHitboxes(t,0,0,this.getDimensionX()-1,this.getDimensionY()-1)}}P.TransformedCollisionTileMapLayer=v;const b=class{constructor(t,e,n,i,s,o){this.layer=t,this.tag=e,this.xMin=n,this.yMin=i,this.xMax=s,this.yMax=o}[Symbol.iterator](){let t=this.xMax,e=this.yMin-1,n=b.emptyItr;return{next:()=>{let i=n.next();for(;i.done;){if(t++,t>this.xMax&&(e++,t=this.xMin),e>this.yMax)return i;const s=this.layer.get(t,e);if(!s)continue;const o=s.getDefinition();!o||o.hasTaggedHitBox(this.tag)&&(n=s.getHitboxes()[Symbol.iterator](),i=n.next())}return i}}}};let m=b;m.emptyItr={next:()=>({value:void 0,done:!0})};const x=class{constructor(t,e,n){this.affineTransformationUpToDateCount=0;this.layer=t,this.x=e,this.y=n;const i=this.getDefinition();if(this.hitBoxes=[],i){const s=this.layer.tileMap.tag,o=i.getHitBoxes(s);if(o){this.hitBoxes.length=o.length;for(let r=0;r<this.hitBoxes.length;r++){const h=new p.Polygon;this.hitBoxes[r]=h,h.vertices.length=o[r].length;for(let a=0;a<h.vertices.length;a++)h.vertices[a]=[0,0]}}}}getDefinition(){return this.layer.tileMap.getTileDefinition(this.layer._source.getTileId(this.x,this.y))}_isHitboxesUpToDate(){return this.affineTransformationUpToDateCount===this.layer.tileMap._transformationUpToDateCount}_setHitboxesUpToDate(){this.affineTransformationUpToDateCount=this.layer.tileMap._transformationUpToDateCount}invalidate(){this.affineTransformationUpToDateCount=-1;let t=this.layer.get(this.x-1,this.y);t&&(t.affineTransformationUpToDateCount=-1),t=this.layer.get(this.x+1,this.y),t&&(t.affineTransformationUpToDateCount=-1),t=this.layer.get(this.x,this.y-1),t&&(t.affineTransformationUpToDateCount=-1),t=this.layer.get(this.x,this.y+1),t&&(t.affineTransformationUpToDateCount=-1)}getHitboxes(){if(this._isHitboxesUpToDate())return this.hitBoxes;const t=this.getDefinition();if(!t)return this._setHitboxesUpToDate(),this.hitBoxes.length=0,this.hitBoxes;const e=this.layer.tileMap.tag,n=t.getHitBoxes(e);if(!n)return this._setHitboxesUpToDate(),this.hitBoxes.length=0,this.hitBoxes;const i=this.layer.tileMap,s=i.getTileWidth(),o=i.getTileHeight();if(n.length===1&&t.hasFullHitBox(e)){const a=this._hasNeighborFullHitBox(-1,0),y=this._hasNeighborFullHitBox(1,0),f=this._hasNeighborFullHitBox(0,-1),g=this._hasNeighborFullHitBox(0,1);let l=0;if(a||y){let c=a?-s:0,T=y?2*s:s;l>=this.hitBoxes.length&&(this.hitBoxes[l]=p.Polygon.createRectangle(0,0)),x.setRectangle(this.hitBoxes[l],c,0,T,o),l++}if(f||g){let c=f?-o:0,T=g?2*o:o;l>=this.hitBoxes.length&&(this.hitBoxes[l]=p.Polygon.createRectangle(0,0)),x.setRectangle(this.hitBoxes[l],0,c,s,T),l++}l===0&&(this.hitBoxes.length===0&&(this.hitBoxes[0]=p.Polygon.createRectangle(0,0)),x.setRectangle(this.hitBoxes[0],0,0,s,o),l++),this.hitBoxes.length=l}else for(let a=0;a<n.length;a++){const y=n[a];a>=this.hitBoxes.length&&(this.hitBoxes[a]=p.Polygon.createRectangle(0,0));const f=this.hitBoxes[a];for(let g=0;g<f.vertices.length;g++){const l=y[g],c=f.vertices[g];c[0]=l[0],c[1]=l[1]}}const h=x.workingTransformation;h.setToTranslation(s*this.x,o*this.y),this.layer.isFlippedHorizontally(this.x,this.y)&&h.flipX(s/2),this.layer.isFlippedVertically(this.x,this.y)&&h.flipY(o/2),this.layer.isFlippedDiagonally(this.x,this.y)&&(h.flipX(s/2),h.rotateAround(Math.PI/2,s/2,o/2)),h.preConcatenate(i.getTransformation());for(let a=0;a<this.hitBoxes.length;a++){const y=this.hitBoxes[a];for(let f=0;f<y.vertices.length;f++){const g=y.vertices[f];h.transform(g,g)}}return this._setHitboxesUpToDate(),this.hitBoxes}_hasNeighborFullHitBox(t,e){const i=this.layer._source.getTileId(this.x+t,this.y+e),s=i&&this.layer.tileMap.getTileDefinition(i);return s&&s.hasFullHitBox(this.layer.tileMap.tag)}static setRectangle(t,e,n,i,s){const o=t.vertices;o[0][0]=e,o[0][1]=n,o[1][0]=i,o[1][1]=n,o[2][0]=i,o[2][1]=s,o[3][0]=e,o[3][1]=s}};let M=x;M.workingTransformation=new p.AffineTransformation})(D=p.TileMap||(p.TileMap={}))})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=TransformedTileMap.js.map