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.
- package/dist/Runtime/CustomRuntimeObject.js +1 -1
- package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
- package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
- package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +1 -1
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +2 -2
- package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
- package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
- package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/JsExtension.js +2 -2
- package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +97 -7
- package/dist/Runtime/Extensions/Multiplayer/messageManager.js +1 -1
- package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +2 -2
- package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +1 -1
- package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +2 -2
- package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +1 -1
- package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
- package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +62 -27
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Spine/JsExtension.js +32 -0
- package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TextInput/JsExtension.js +3 -1
- package/dist/Runtime/Extensions/TileMap/JsExtension.js +84 -29
- package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
- package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/load/tiled/TiledTileMapLoader.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +12 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +1 -0
- package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
- package/dist/Runtime/SpriteAnimator.js +1 -1
- package/dist/Runtime/SpriteAnimator.js.map +2 -2
- package/dist/Runtime/debugger-client/InGameDebugger.js +1 -1
- package/dist/Runtime/debugger-client/InGameDebugger.js.map +2 -2
- package/dist/Runtime/debugger-client/abstract-debugger-client.js +1 -1
- package/dist/Runtime/debugger-client/abstract-debugger-client.js.map +2 -2
- package/dist/Runtime/debugger-client/hot-reloader.js +2 -1
- package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
- package/dist/Runtime/debugger-client/minimal-debugger-client.js +2 -0
- package/dist/Runtime/debugger-client/minimal-debugger-client.js.map +7 -0
- package/dist/Runtime/debugger-client/websocket-debugger-client.js.map +2 -2
- package/dist/Runtime/debugger-client/window-message-debugger-client.js.map +2 -2
- package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/runtimegame.js +1 -1
- package/dist/Runtime/runtimegame.js.map +2 -2
- package/dist/Runtime/runtimescene.js +1 -1
- package/dist/Runtime/runtimescene.js.map +2 -2
- package/dist/Runtime/scenestack.js +1 -1
- package/dist/Runtime/scenestack.js.map +2 -2
- package/dist/Runtime/spriteruntimeobject.js +1 -1
- package/dist/Runtime/spriteruntimeobject.js.map +2 -2
- package/dist/Runtime/types/project-data.d.ts +31 -8
- package/dist/Runtime/variablescontainer.js +1 -1
- package/dist/Runtime/variablescontainer.js.map +2 -2
- package/dist/lib/libGD.cjs +1 -1
- package/dist/lib/libGD.wasm +0 -0
- package/gd.d.ts +77 -47
- package/package.json +2 -2
- package/dist/lib/libGD.d.cts +0 -5
- 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(
|
|
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,
|
|
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
|
+
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": "AAAA,GAAU,MAAV,UAAU,EAAV,CAgCS,eACG,GAAK,aAKS,CAsBtB,YACE,EACA,EACA,CACA,MAAM,EAAmB,GAzBnB,cAAkB,IAClB,aAAkB,EAClB,aAAkB,EAElB,eAAqB,GACrB,eAAqB,GAErB,4BAAyB,GACzB,0BAA8B,EAC9B,sBAA4B,GAC5B,yBAAsB,GAiB5B,KAAK,YAAc,EAAW,QAAQ,WACtC,KAAK,eAAiB,EAAW,QAAQ,MACzC,KAAK,kBAAoB,EAAW,QAAQ,kBAC5C,KAAK,yBAA2B,
|
|
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
|
-
|
|
1662
|
+
_onLoadingError() {
|
|
1647
1663
|
this.errorPixiObject =
|
|
1648
1664
|
this.errorPixiObject ||
|
|
1649
1665
|
new PIXI.Sprite(this._pixiResourcesLoader.getInvalidPIXITexture());
|
|
1650
|
-
|
|
1651
|
-
this.
|
|
1666
|
+
|
|
1667
|
+
this._replacePixiObject(this.errorPixiObject);
|
|
1652
1668
|
}
|
|
1653
1669
|
|
|
1654
|
-
|
|
1670
|
+
_onLoadingSuccess() {
|
|
1655
1671
|
if (this.errorPixiObject) {
|
|
1656
|
-
this.
|
|
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.
|
|
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.
|
|
1772
|
+
this._onLoadingError();
|
|
1757
1773
|
// getOrLoadTextureCache already log warns and errors.
|
|
1758
1774
|
return;
|
|
1759
1775
|
}
|
|
1760
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
1976
|
-
this.
|
|
2010
|
+
|
|
2011
|
+
this._replacePixiObject(this.errorPixiObject);
|
|
1977
2012
|
}
|
|
1978
2013
|
|
|
1979
|
-
|
|
2014
|
+
_onLoadingSuccess() {
|
|
1980
2015
|
if (this.errorPixiObject) {
|
|
1981
|
-
this.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
2344
|
+
_onLoadingError() {
|
|
2290
2345
|
this.errorPixiObject =
|
|
2291
2346
|
this.errorPixiObject ||
|
|
2292
2347
|
new PIXI.Sprite(this._pixiResourcesLoader.getInvalidPIXITexture());
|
|
2293
|
-
|
|
2294
|
-
this.
|
|
2348
|
+
|
|
2349
|
+
this._replacePixiObject(this.errorPixiObject);
|
|
2295
2350
|
}
|
|
2296
2351
|
|
|
2297
|
-
|
|
2352
|
+
_onLoadingSuccess() {
|
|
2298
2353
|
if (this.errorPixiObject) {
|
|
2299
|
-
this.
|
|
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.
|
|
2424
|
+
this._onLoadingError();
|
|
2370
2425
|
// _loadTiledMapWithCallback already log errors
|
|
2371
2426
|
return;
|
|
2372
2427
|
}
|
|
2373
|
-
this.
|
|
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(
|
|
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
|