gdcore-tools 2.0.0-beta5 → 2.0.0-beta7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/Runtime/Cordova/config.xml +4 -0
  2. package/dist/Runtime/Cordova/package.json +12 -20
  3. package/dist/Runtime/CustomRuntimeObject.js +1 -1
  4. package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
  5. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
  6. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
  7. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js +1 -1
  8. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js.map +2 -2
  9. package/dist/Runtime/Extensions/3D/AmbientLight.js +1 -1
  10. package/dist/Runtime/Extensions/3D/AmbientLight.js.map +2 -2
  11. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +1 -1
  12. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +2 -2
  13. package/dist/Runtime/Extensions/3D/DirectionalLight.js +1 -1
  14. package/dist/Runtime/Extensions/3D/DirectionalLight.js.map +2 -2
  15. package/dist/Runtime/Extensions/3D/ExponentialFog.js +1 -1
  16. package/dist/Runtime/Extensions/3D/ExponentialFog.js.map +2 -2
  17. package/dist/Runtime/Extensions/3D/HemisphereLight.js +1 -1
  18. package/dist/Runtime/Extensions/3D/HemisphereLight.js.map +2 -2
  19. package/dist/Runtime/Extensions/3D/JsExtension.js +419 -228
  20. package/dist/Runtime/Extensions/3D/LinearFog.js +1 -1
  21. package/dist/Runtime/Extensions/3D/LinearFog.js.map +2 -2
  22. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js +1 -1
  23. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js.map +2 -2
  24. package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
  25. package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
  26. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js +1 -1
  27. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js.map +2 -2
  28. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
  29. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
  30. package/dist/Runtime/Extensions/BBText/JsExtension.js +45 -42
  31. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
  32. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
  33. package/dist/Runtime/Extensions/BitmapText/JsExtension.js +40 -49
  34. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
  35. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
  36. package/dist/Runtime/Extensions/Effects/JsExtension.js +2 -2
  37. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js +1 -1
  38. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js.map +2 -2
  39. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js +1 -1
  40. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js.map +2 -2
  41. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js +1 -1
  42. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js.map +2 -2
  43. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js +1 -1
  44. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js.map +2 -2
  45. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js +1 -1
  46. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js.map +2 -2
  47. package/dist/Runtime/Extensions/ExampleJsExtension/JsExtension.js +18 -21
  48. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js +1 -1
  49. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js.map +2 -2
  50. package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +8 -2
  51. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js +1 -1
  52. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js.map +2 -2
  53. package/dist/Runtime/Extensions/Lighting/JsExtension.js +50 -38
  54. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js +1 -1
  55. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js.map +2 -2
  56. package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +112 -7
  57. package/dist/Runtime/Extensions/Multiplayer/messageManager.js +1 -1
  58. package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +2 -2
  59. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +1 -1
  60. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +2 -2
  61. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
  62. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
  63. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +1 -1
  64. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
  65. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js +1 -1
  66. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js.map +2 -2
  67. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
  68. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
  69. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js +1 -1
  70. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js.map +2 -2
  71. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
  72. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
  73. package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +127 -40
  74. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
  75. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
  76. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js +1 -1
  77. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js.map +2 -2
  78. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js +1 -1
  79. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
  80. package/dist/Runtime/Extensions/Spine/JsExtension.js +77 -36
  81. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js +1 -1
  82. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js.map +2 -2
  83. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
  84. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
  85. package/dist/Runtime/Extensions/TextInput/JsExtension.js +55 -56
  86. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
  87. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
  88. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
  89. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
  90. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js +1 -1
  91. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js.map +2 -2
  92. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js +1 -1
  93. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js.map +2 -2
  94. package/dist/Runtime/Extensions/TileMap/JsExtension.js +511 -287
  95. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js +1 -1
  96. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js.map +2 -2
  97. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
  98. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
  99. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
  100. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
  101. package/dist/Runtime/Extensions/TileMap/helper/dts/load/tiled/TiledTileMapLoader.d.ts.map +1 -1
  102. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +12 -1
  103. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
  104. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
  105. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +1 -0
  106. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
  107. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
  108. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
  109. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js +1 -1
  110. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js.map +2 -2
  111. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
  112. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
  113. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js +1 -1
  114. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
  115. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
  116. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
  117. package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +1 -0
  118. package/dist/Runtime/Extensions/Video/JsExtension.js +35 -44
  119. package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
  120. package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
  121. package/dist/Runtime/ResourceLoader.js +1 -1
  122. package/dist/Runtime/ResourceLoader.js.map +2 -2
  123. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  124. package/dist/Runtime/SpriteAnimator.js +1 -1
  125. package/dist/Runtime/SpriteAnimator.js.map +2 -2
  126. package/dist/Runtime/debugger-client/InGameDebugger.js +1 -1
  127. package/dist/Runtime/debugger-client/InGameDebugger.js.map +2 -2
  128. package/dist/Runtime/debugger-client/abstract-debugger-client.js +1 -1
  129. package/dist/Runtime/debugger-client/abstract-debugger-client.js.map +2 -2
  130. package/dist/Runtime/debugger-client/hot-reloader.js +2 -1
  131. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  132. package/dist/Runtime/debugger-client/minimal-debugger-client.js +2 -0
  133. package/dist/Runtime/debugger-client/minimal-debugger-client.js.map +7 -0
  134. package/dist/Runtime/debugger-client/websocket-debugger-client.js.map +2 -2
  135. package/dist/Runtime/debugger-client/window-message-debugger-client.js.map +2 -2
  136. package/dist/Runtime/events-tools/inputtools.js +1 -1
  137. package/dist/Runtime/events-tools/inputtools.js.map +2 -2
  138. package/dist/Runtime/events-tools/objecttools.js +1 -1
  139. package/dist/Runtime/events-tools/objecttools.js.map +2 -2
  140. package/dist/Runtime/gd.js +1 -1
  141. package/dist/Runtime/gd.js.map +2 -2
  142. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js +1 -1
  143. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js.map +2 -2
  144. package/dist/Runtime/inputmanager.js +1 -1
  145. package/dist/Runtime/inputmanager.js.map +2 -2
  146. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +1 -1
  147. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js.map +2 -2
  148. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js +1 -1
  149. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js.map +2 -2
  150. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js +1 -1
  151. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js.map +2 -2
  152. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
  153. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
  154. package/dist/Runtime/runtimegame.js +1 -1
  155. package/dist/Runtime/runtimegame.js.map +2 -2
  156. package/dist/Runtime/runtimeobject.js +1 -1
  157. package/dist/Runtime/runtimeobject.js.map +2 -2
  158. package/dist/Runtime/runtimescene.js +1 -1
  159. package/dist/Runtime/runtimescene.js.map +2 -2
  160. package/dist/Runtime/scenestack.js +1 -1
  161. package/dist/Runtime/scenestack.js.map +2 -2
  162. package/dist/Runtime/spriteruntimeobject.js +1 -1
  163. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  164. package/dist/Runtime/types/project-data.d.ts +36 -8
  165. package/dist/Runtime/variablescontainer.js +1 -1
  166. package/dist/Runtime/variablescontainer.js.map +2 -2
  167. package/dist/lib/libGD.cjs +1 -1
  168. package/dist/lib/libGD.wasm +0 -0
  169. package/gd.d.ts +149 -75
  170. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.ts"],
4
- "sourcesContent": ["/*\nGDevelop - Particle System Extension\nCopyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)\nThis project is released under the MIT License.\n*/\nnamespace gdjs {\n const setBoundsValues = (list: any, startValue: float, endValue: float) => {\n const first = list.first;\n first.value = startValue;\n first.next = first.next || {\n time: 1,\n value: 0,\n };\n first.next.value = endValue;\n };\n\n export class ParticleEmitterObjectPixiRenderer {\n renderer: PIXI.Container;\n emitter: PIXI.particles.Emitter;\n started: boolean = false;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n runtimeObject: gdjs.RuntimeObject,\n objectData: any\n ) {\n const pixiRenderer = instanceContainer\n .getGame()\n .getRenderer()\n .getPIXIRenderer();\n const imageManager = instanceContainer\n .getGame()\n .getImageManager() as gdjs.PixiImageManager;\n let particleTexture: PIXI.Texture = PIXI.Texture.WHITE;\n if (pixiRenderer) {\n if (objectData.rendererType === 'Point') {\n particleTexture = imageManager.getOrCreateDiskTexture(\n objectData.rendererParam1,\n pixiRenderer\n );\n } else if (objectData.rendererType === 'Line') {\n particleTexture = imageManager.getOrCreateRectangleTexture(\n objectData.rendererParam1,\n objectData.rendererParam2,\n pixiRenderer\n );\n } else if (objectData.textureParticleName) {\n particleTexture = imageManager.getOrCreateScaledTexture(\n objectData.textureParticleName,\n objectData.rendererParam1,\n objectData.rendererParam2,\n pixiRenderer\n );\n } else {\n particleTexture = imageManager.getOrCreateRectangleTexture(\n objectData.rendererParam1,\n objectData.rendererParam2,\n pixiRenderer\n );\n }\n }\n\n const configuration = {\n ease: undefined,\n emit: undefined,\n lifetime: {\n min: objectData.particleLifeTimeMin,\n max: objectData.particleLifeTimeMax,\n },\n // A negative flow is \"infinite flow\" (all particles burst)\n frequency:\n objectData.flow < 0\n ? ParticleEmitterObjectPixiRenderer.frequencyMinimumValue\n : 1.0 / objectData.flow,\n spawnChance: 1,\n particlesPerWave: objectData.flow < 0 ? objectData.maxParticleNb : 1,\n maxParticles: objectData.maxParticleNb,\n // Lifetime can be computed from the tank (the number of particles available)\n // and the flow (number of particles emitted per seconds)\n emitterLifetime: ParticleEmitterObjectPixiRenderer.computeLifetime(\n objectData.flow,\n objectData.tank\n ),\n pos: { x: 0, y: 0 },\n addAtBack: false,\n behaviors: [\n {\n type: 'alpha',\n config: {\n alpha: {\n isStepped: false,\n list: [\n { time: 0, value: objectData.particleAlpha1 / 255.0 },\n { time: 1, value: objectData.particleAlpha2 / 255.0 },\n ],\n },\n },\n },\n {\n type: 'moveAcceleration',\n config: {\n accel: {\n x: objectData.particleGravityX,\n y: objectData.particleGravityY,\n },\n minStart: objectData.emitterForceMin,\n maxStart: objectData.emitterForceMax,\n // See _updateRotateFlagFromSpeed\n rotate:\n objectData.particleAngle1 === 0 &&\n objectData.particleAngle2 === 0 &&\n (objectData.particleGravityX !== 0 ||\n objectData.particleGravityY !== 0 ||\n objectData.emitterForceMin < 0 ||\n objectData.emitterForceMax < 0),\n },\n },\n {\n type: 'scale',\n config: {\n scale: {\n isStepped: false,\n list: [\n {\n time: 0,\n value:\n (objectData.particleSize1 / 100) *\n (1 + objectData.particleSizeRandomness1 / 100),\n },\n {\n time: 1,\n value:\n (objectData.particleSize2 / 100) *\n (1 + objectData.particleSizeRandomness2 / 100),\n },\n ],\n },\n },\n },\n {\n type: 'color',\n config: {\n color: {\n isStepped: false,\n list: [\n {\n time: 0,\n value: gdjs.rgbToHex(\n objectData.particleRed1,\n objectData.particleGreen1,\n objectData.particleBlue1\n ),\n },\n {\n time: 1,\n value: gdjs.rgbToHex(\n objectData.particleRed2,\n objectData.particleGreen2,\n objectData.particleBlue2\n ),\n },\n ],\n },\n },\n },\n {\n type: 'rotation',\n config: {\n accel: 0,\n // Angle of the spray cone\n minStart: -objectData.emitterAngleB / 2.0,\n maxStart: objectData.emitterAngleB / 2.0,\n // Rotation speed of the particles\n maxSpeed: objectData.particleAngle2,\n minSpeed: objectData.particleAngle1,\n },\n },\n {\n type: 'blendMode',\n config: {\n blendMode: objectData.additive ? 'ADD' : 'NORMAL',\n },\n },\n {\n type: 'textureSingle',\n config: {\n texture: particleTexture,\n },\n },\n {\n type: 'spawnShape',\n config: {\n type: 'torus',\n data: {\n affectRotation: false,\n innerRadius: 0,\n radius: objectData.zoneRadius,\n x: 0,\n y: 0,\n },\n },\n },\n ],\n };\n\n this.renderer = new PIXI.Container();\n // The embedded particle emitter is supposed to be the last minor version\n // of the version 5 of the particle emitter object\n // See source https://github.com/pixijs/particle-emitter/blob/v5.0.8/src/Emitter.ts\n this.emitter = new PIXI.particles.Emitter(this.renderer, configuration);\n this.start();\n const layer = instanceContainer.getLayer(runtimeObject.getLayer());\n if (layer) {\n layer\n .getRenderer()\n .addRendererObject(this.renderer, runtimeObject.getZOrder());\n }\n }\n\n getRendererObject() {\n return this.renderer;\n }\n\n update(delta: float): void {\n const wasEmitting = this.emitter.emit;\n this.emitter.update(delta);\n if (!this.started && wasEmitting) {\n this.started = true;\n }\n }\n\n setPosition(x: number, y: number): void {\n this.emitter.spawnPos.x = x;\n this.emitter.spawnPos.y = y;\n }\n\n setAngle(angle1: float, angle2: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('rotation');\n behavior.minStart = gdjs.toRad(angle1);\n behavior.maxStart = gdjs.toRad(angle2);\n }\n\n setForce(min: float, max: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('moveAcceleration');\n // If max force is zero, PIXI seems to not be able to compute correctly\n // the angle of the emitter, resulting in it staying at 0\u00B0 or 180\u00B0.\n // See https://github.com/4ian/GDevelop/issues/4312.\n behavior.maxStart = max || 0.000001;\n behavior.minStart = min;\n }\n\n setZoneRadius(radius: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('spawnShape');\n behavior.shape.radius = radius;\n }\n\n setLifeTime(min: float, max: float): void {\n this.emitter.minLifetime = min;\n this.emitter.maxLifetime = max;\n }\n\n setGravity(x: float, y: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('moveAcceleration');\n behavior.accel.x = x;\n behavior.accel.y = y;\n this._updateRotateFlagFromSpeed();\n }\n\n /**\n * When rotate from `moveAcceleration` is `true` the rotation is set\n * according to the speed direction. This is overriding the particle\n * rotation calculated by from `rotation`.\n */\n private _updateRotateFlagFromSpeed() {\n const rotation: any = this.emitter.getBehavior('rotation');\n const moveAcceleration: any = this.emitter.getBehavior(\n 'moveAcceleration'\n );\n moveAcceleration.rotate =\n rotation.minSpeed === 0 &&\n rotation.maxSpeed === 0 &&\n // This part is to avoid to do `atan` every frame when the object\n // direction doesn't change.\n (moveAcceleration.accel.x !== 0 ||\n moveAcceleration.accel.y !== 0 ||\n // Negative speeds need a 180\u00B0 rotation.\n moveAcceleration.minStart < 0 ||\n moveAcceleration.maxStart < 0);\n }\n\n setColor(\n r1: number,\n g1: number,\n b1: number,\n r2: number,\n g2: number,\n b2: number\n ): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('color');\n const first = behavior.list.first;\n\n const startColor = first.value;\n startColor.r = r1;\n startColor.g = g1;\n startColor.b = b1;\n\n first.next = first.next || {\n time: 1,\n value: {},\n };\n const endColor = first.next.value;\n endColor.r = r2;\n endColor.g = g2;\n endColor.b = b2;\n }\n\n setSize(size1: float, size2: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('scale');\n setBoundsValues(behavior.list, size1 / 100.0, size2 / 100.0);\n }\n\n setParticleRotationSpeed(min: float, max: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('rotation');\n behavior.minSpeed = gdjs.toRad(min);\n behavior.maxSpeed = gdjs.toRad(max);\n this._updateRotateFlagFromSpeed();\n }\n\n setMaxParticlesCount(count: float): void {\n this.emitter.maxParticles = count;\n }\n\n setAdditiveRendering(enabled: boolean): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('blendMode');\n behavior.value = enabled ? 'ADD' : 'NORMAL';\n }\n\n setAlpha(alpha1: number, alpha2: number): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('alpha');\n setBoundsValues(behavior.list, alpha1 / 255.0, alpha2 / 255.0);\n }\n\n setFlow(flow: number, tank: number): void {\n this.emitter.frequency =\n flow < 0\n ? ParticleEmitterObjectPixiRenderer.frequencyMinimumValue\n : 1.0 / flow;\n this.emitter.emitterLifetime = ParticleEmitterObjectPixiRenderer.computeLifetime(\n flow,\n tank\n );\n }\n\n resetEmission(flow: number, tank: number): void {\n this.setFlow(flow, tank);\n const wasEmitting = this.emitter.emit;\n // The only way to recompute emitter lifetime is to start the emitter.\n this.start();\n if (!wasEmitting) this.stop();\n }\n\n isTextureNameValid(\n texture: string,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): boolean {\n const invalidPixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getInvalidPIXITexture();\n const pixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getPIXITexture(texture);\n return pixiTexture.valid && pixiTexture !== invalidPixiTexture;\n }\n\n setTextureName(\n texture: string,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): void {\n const invalidPixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getInvalidPIXITexture();\n const pixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getPIXITexture(texture);\n if (pixiTexture.valid && pixiTexture !== invalidPixiTexture) {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('textureSingle');\n behavior.texture = pixiTexture;\n }\n }\n\n getParticleCount(): integer {\n return this.emitter.particleCount;\n }\n\n stop(): void {\n this.emitter.emit = false;\n }\n\n start(): void {\n this.emitter.emit = true;\n }\n\n recreate(): void {\n this.emitter.cleanup();\n }\n\n destroy(): void {\n this.emitter.destroy();\n }\n\n hasStarted(): boolean {\n return this.started;\n }\n\n /**\n * @returns `true` at the end of emission or at the start if it's paused.\n * Returns false if there is no limit.\n */\n _mayHaveEndedEmission(): boolean {\n return (\n // No end can be reached if there is no flow.\n this.emitter.frequency >\n ParticleEmitterObjectPixiRenderer.frequencyMinimumValue &&\n // No end can be reached when there is no limit.\n this.emitter.emitterLifetime >= 0 &&\n // Pixi stops the emission at the end.\n !this.emitter.emit &&\n // Pixi reset `_emitterLife` to `emitterLifetime` at the end of emission\n // so there is no way to know if it is the end or the start.\n // @ts-ignore Use a private attribute.\n this.emitter._emitterLife === this.emitter.emitterLifetime\n );\n }\n\n static computeLifetime(flow: number, tank: number): float {\n if (tank < 0) return -1;\n else if (flow < 0) return 0.001;\n else return (tank + 0.1) / flow;\n }\n\n private static readonly frequencyMinimumValue = 0.0001;\n }\n\n // @ts-ignore - Register the class to let the engine use it.\n export const ParticleEmitterObjectRenderer = ParticleEmitterObjectPixiRenderer;\n export type ParticleEmitterObjectRenderer = ParticleEmitterObjectPixiRenderer;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nGDevelop - Particle System Extension\nCopyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)\nThis project is released under the MIT License.\n*/\nnamespace gdjs {\n const setBoundsValues = (list: any, startValue: float, endValue: float) => {\n const first = list.first;\n first.value = startValue;\n first.next = first.next || {\n time: 1,\n value: 0,\n };\n first.next.value = endValue;\n };\n\n export class ParticleEmitterObjectPixiRenderer {\n renderer: PIXI.Container;\n emitter: PIXI.particles.Emitter;\n started: boolean = false;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n runtimeObject: gdjs.RuntimeObject,\n objectData: any\n ) {\n const pixiRenderer = instanceContainer\n .getGame()\n .getRenderer()\n .getPIXIRenderer();\n const imageManager = instanceContainer\n .getGame()\n .getImageManager() as gdjs.PixiImageManager;\n let particleTexture: PIXI.Texture = PIXI.Texture.WHITE;\n if (pixiRenderer) {\n if (objectData.rendererType === 'Point') {\n particleTexture = imageManager.getOrCreateDiskTexture(\n objectData.rendererParam1,\n pixiRenderer\n );\n } else if (objectData.rendererType === 'Line') {\n particleTexture = imageManager.getOrCreateRectangleTexture(\n objectData.rendererParam1,\n objectData.rendererParam2,\n pixiRenderer\n );\n } else if (objectData.textureParticleName) {\n particleTexture = imageManager.getOrCreateScaledTexture(\n objectData.textureParticleName,\n objectData.rendererParam1,\n objectData.rendererParam2,\n pixiRenderer\n );\n } else {\n particleTexture = imageManager.getOrCreateRectangleTexture(\n objectData.rendererParam1,\n objectData.rendererParam2,\n pixiRenderer\n );\n }\n }\n\n const configuration = {\n ease: undefined,\n emit: undefined,\n lifetime: {\n min: objectData.particleLifeTimeMin,\n max: objectData.particleLifeTimeMax,\n },\n // A negative flow is \"infinite flow\" (all particles burst)\n frequency:\n objectData.flow < 0\n ? ParticleEmitterObjectPixiRenderer.frequencyMinimumValue\n : 1.0 / objectData.flow,\n spawnChance: 1,\n particlesPerWave: objectData.flow < 0 ? objectData.maxParticleNb : 1,\n maxParticles: objectData.maxParticleNb,\n // Lifetime can be computed from the tank (the number of particles available)\n // and the flow (number of particles emitted per seconds)\n emitterLifetime: ParticleEmitterObjectPixiRenderer.computeLifetime(\n objectData.flow,\n objectData.tank\n ),\n pos: { x: 0, y: 0 },\n addAtBack: false,\n behaviors: [\n {\n type: 'alpha',\n config: {\n alpha: {\n isStepped: false,\n list: [\n { time: 0, value: objectData.particleAlpha1 / 255.0 },\n { time: 1, value: objectData.particleAlpha2 / 255.0 },\n ],\n },\n },\n },\n {\n type: 'moveAcceleration',\n config: {\n accel: {\n x: objectData.particleGravityX,\n y: objectData.particleGravityY,\n },\n minStart: objectData.emitterForceMin,\n maxStart: objectData.emitterForceMax,\n // See _updateRotateFlagFromSpeed\n rotate:\n objectData.particleAngle1 === 0 &&\n objectData.particleAngle2 === 0 &&\n (objectData.particleGravityX !== 0 ||\n objectData.particleGravityY !== 0 ||\n objectData.emitterForceMin < 0 ||\n objectData.emitterForceMax < 0),\n },\n },\n {\n type: 'scale',\n config: {\n scale: {\n isStepped: false,\n list: [\n {\n time: 0,\n value:\n (objectData.particleSize1 / 100) *\n (1 + objectData.particleSizeRandomness1 / 100),\n },\n {\n time: 1,\n value:\n (objectData.particleSize2 / 100) *\n (1 + objectData.particleSizeRandomness2 / 100),\n },\n ],\n },\n },\n },\n {\n type: 'color',\n config: {\n color: {\n isStepped: false,\n list: [\n {\n time: 0,\n value: gdjs.rgbToHex(\n ...gdjs.rgbOrHexToRGBColor(objectData.particleColor1)\n ),\n },\n {\n time: 1,\n value: gdjs.rgbToHex(\n ...gdjs.rgbOrHexToRGBColor(objectData.particleColor2)\n ),\n },\n ],\n },\n },\n },\n {\n type: 'rotation',\n config: {\n accel: 0,\n // Angle of the spray cone\n minStart: -objectData.emitterAngleB / 2.0,\n maxStart: objectData.emitterAngleB / 2.0,\n // Rotation speed of the particles\n maxSpeed: objectData.particleAngle2,\n minSpeed: objectData.particleAngle1,\n },\n },\n {\n type: 'blendMode',\n config: {\n blendMode: objectData.additive ? 'ADD' : 'NORMAL',\n },\n },\n {\n type: 'textureSingle',\n config: {\n texture: particleTexture,\n },\n },\n {\n type: 'spawnShape',\n config: {\n type: 'torus',\n data: {\n affectRotation: false,\n innerRadius: 0,\n radius: objectData.zoneRadius,\n x: 0,\n y: 0,\n },\n },\n },\n ],\n };\n\n this.renderer = new PIXI.Container();\n // The embedded particle emitter is supposed to be the last minor version\n // of the version 5 of the particle emitter object\n // See source https://github.com/pixijs/particle-emitter/blob/v5.0.8/src/Emitter.ts\n this.emitter = new PIXI.particles.Emitter(this.renderer, configuration);\n this.start();\n const layer = instanceContainer.getLayer(runtimeObject.getLayer());\n if (layer) {\n layer\n .getRenderer()\n .addRendererObject(this.renderer, runtimeObject.getZOrder());\n }\n }\n\n getRendererObject() {\n return this.renderer;\n }\n\n update(delta: float): void {\n const wasEmitting = this.emitter.emit;\n this.emitter.update(delta);\n if (!this.started && wasEmitting) {\n this.started = true;\n }\n }\n\n setPosition(x: number, y: number): void {\n this.emitter.spawnPos.x = x;\n this.emitter.spawnPos.y = y;\n }\n\n setAngle(angle1: float, angle2: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('rotation');\n behavior.minStart = gdjs.toRad(angle1);\n behavior.maxStart = gdjs.toRad(angle2);\n }\n\n setForce(min: float, max: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('moveAcceleration');\n // If max force is zero, PIXI seems to not be able to compute correctly\n // the angle of the emitter, resulting in it staying at 0\u00B0 or 180\u00B0.\n // See https://github.com/4ian/GDevelop/issues/4312.\n behavior.maxStart = max || 0.000001;\n behavior.minStart = min;\n }\n\n setZoneRadius(radius: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('spawnShape');\n behavior.shape.radius = radius;\n }\n\n setLifeTime(min: float, max: float): void {\n this.emitter.minLifetime = min;\n this.emitter.maxLifetime = max;\n }\n\n setGravity(x: float, y: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('moveAcceleration');\n behavior.accel.x = x;\n behavior.accel.y = y;\n this._updateRotateFlagFromSpeed();\n }\n\n /**\n * When rotate from `moveAcceleration` is `true` the rotation is set\n * according to the speed direction. This is overriding the particle\n * rotation calculated by from `rotation`.\n */\n private _updateRotateFlagFromSpeed() {\n const rotation: any = this.emitter.getBehavior('rotation');\n const moveAcceleration: any = this.emitter.getBehavior(\n 'moveAcceleration'\n );\n moveAcceleration.rotate =\n rotation.minSpeed === 0 &&\n rotation.maxSpeed === 0 &&\n // This part is to avoid to do `atan` every frame when the object\n // direction doesn't change.\n (moveAcceleration.accel.x !== 0 ||\n moveAcceleration.accel.y !== 0 ||\n // Negative speeds need a 180\u00B0 rotation.\n moveAcceleration.minStart < 0 ||\n moveAcceleration.maxStart < 0);\n }\n\n setColor(color1: number, color2: number): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('color');\n const first = behavior.list.first;\n\n {\n const [r, g, b] = gdjs.hexNumberToRGBArray(color1);\n first.value.r = r;\n first.value.g = g;\n first.value.b = b;\n }\n\n first.next = first.next || {\n time: 1,\n value: {},\n };\n {\n const [r, g, b] = gdjs.hexNumberToRGBArray(color2);\n first.next.value.r = r;\n first.next.value.g = g;\n first.next.value.b = b;\n }\n }\n\n setSize(size1: float, size2: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('scale');\n setBoundsValues(behavior.list, size1 / 100.0, size2 / 100.0);\n }\n\n setParticleRotationSpeed(min: float, max: float): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('rotation');\n behavior.minSpeed = gdjs.toRad(min);\n behavior.maxSpeed = gdjs.toRad(max);\n this._updateRotateFlagFromSpeed();\n }\n\n setMaxParticlesCount(count: float): void {\n this.emitter.maxParticles = count;\n }\n\n setAdditiveRendering(enabled: boolean): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('blendMode');\n behavior.value = enabled ? 'ADD' : 'NORMAL';\n }\n\n setAlpha(alpha1: number, alpha2: number): void {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('alpha');\n setBoundsValues(behavior.list, alpha1 / 255.0, alpha2 / 255.0);\n }\n\n setFlow(flow: number, tank: number): void {\n this.emitter.frequency =\n flow < 0\n ? ParticleEmitterObjectPixiRenderer.frequencyMinimumValue\n : 1.0 / flow;\n this.emitter.emitterLifetime = ParticleEmitterObjectPixiRenderer.computeLifetime(\n flow,\n tank\n );\n }\n\n resetEmission(flow: number, tank: number): void {\n this.setFlow(flow, tank);\n const wasEmitting = this.emitter.emit;\n // The only way to recompute emitter lifetime is to start the emitter.\n this.start();\n if (!wasEmitting) this.stop();\n }\n\n isTextureNameValid(\n texture: string,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): boolean {\n const invalidPixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getInvalidPIXITexture();\n const pixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getPIXITexture(texture);\n return pixiTexture.valid && pixiTexture !== invalidPixiTexture;\n }\n\n setTextureName(\n texture: string,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): void {\n const invalidPixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getInvalidPIXITexture();\n const pixiTexture = instanceContainer\n .getGame()\n .getImageManager()\n .getPIXITexture(texture);\n if (pixiTexture.valid && pixiTexture !== invalidPixiTexture) {\n // Access private members of the behavior to apply changes right away.\n const behavior: any = this.emitter.getBehavior('textureSingle');\n behavior.texture = pixiTexture;\n }\n }\n\n getParticleCount(): integer {\n return this.emitter.particleCount;\n }\n\n stop(): void {\n this.emitter.emit = false;\n }\n\n start(): void {\n this.emitter.emit = true;\n }\n\n recreate(): void {\n this.emitter.cleanup();\n }\n\n destroy(): void {\n this.emitter.destroy();\n }\n\n hasStarted(): boolean {\n return this.started;\n }\n\n /**\n * @returns `true` at the end of emission or at the start if it's paused.\n * Returns false if there is no limit.\n */\n _mayHaveEndedEmission(): boolean {\n return (\n // No end can be reached if there is no flow.\n this.emitter.frequency >\n ParticleEmitterObjectPixiRenderer.frequencyMinimumValue &&\n // No end can be reached when there is no limit.\n this.emitter.emitterLifetime >= 0 &&\n // Pixi stops the emission at the end.\n !this.emitter.emit &&\n // Pixi reset `_emitterLife` to `emitterLifetime` at the end of emission\n // so there is no way to know if it is the end or the start.\n // @ts-ignore Use a private attribute.\n this.emitter._emitterLife === this.emitter.emitterLifetime\n );\n }\n\n static computeLifetime(flow: number, tank: number): float {\n if (tank < 0) return -1;\n else if (flow < 0) return 0.001;\n else return (tank + 0.1) / flow;\n }\n\n private static readonly frequencyMinimumValue = 0.0001;\n }\n\n // @ts-ignore - Register the class to let the engine use it.\n export const ParticleEmitterObjectRenderer = ParticleEmitterObjectPixiRenderer;\n export type ParticleEmitterObjectRenderer = ParticleEmitterObjectPixiRenderer;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(t){class s extends t.RuntimeObject{constructor(e,i){super(e,i);this._jumpForwardInTimeCompleted=!1;this._posDirty=!0;this._angleDirty=!0;this._forceDirty=!0;this._zoneRadiusDirty=!0;this._lifeTimeDirty=!0;this._gravityDirty=!0;this._colorDirty=!0;this._sizeDirty=!0;this._alphaDirty=!0;this._flowDirty=!0;this._tankDirty=!0;this._particleRotationSpeedDirty=!0;this._maxParticlesCountDirty=!0;this._additiveRenderingDirty=!0;this._isEmissionPaused=!1;this._renderer=new t.ParticleEmitterObjectRenderer(e,this,i),this.angleA=i.emitterAngleA,this.angleB=i.emitterAngleB,this.forceMin=i.emitterForceMin,this.forceMax=i.emitterForceMax,this.zoneRadius=i.zoneRadius,this.lifeTimeMin=i.particleLifeTimeMin,this.lifeTimeMax=i.particleLifeTimeMax,this.gravityX=i.particleGravityX,this.gravityY=i.particleGravityY,this.colorR1=i.particleRed1,this.colorR2=i.particleRed2,this.colorG1=i.particleGreen1,this.colorG2=i.particleGreen2,this.colorB1=i.particleBlue1,this.colorB2=i.particleBlue2,this.size1=i.particleSize1,this.size2=i.particleSize2,this.alpha1=i.particleAlpha1,this.alpha2=i.particleAlpha2,this.rendererType=i.rendererType,this.rendererParam1=i.rendererParam1,this.rendererParam2=i.rendererParam2,this.texture=i.textureParticleName,this.flow=i.flow,this.tank=i.tank,this.destroyWhenNoParticles=i.destroyWhenNoParticles,this.particleRotationMinSpeed=i.particleAngle1,this.particleRotationMaxSpeed=i.particleAngle2,this.maxParticlesCount=i.maxParticleNb,this.additiveRendering=i.additive,this.jumpForwardInTimeOnCreation=i.jumpForwardInTimeOnCreation,this._textureDirty=this.texture!=="",this.onCreated()}setX(e){this.x!==e&&(this._posDirty=!0),super.setX(e)}setY(e){this.y!==e&&(this._posDirty=!0),super.setY(e)}setAngle(e){this.angle!==e&&(this._angleDirty=!0),super.setAngle(e)}getRendererObject(){return this._renderer.getRendererObject()}updateFromObjectData(e,i){return e.emitterAngleA!==i.emitterAngleA&&this.setEmitterAngleA(i.emitterAngleA),e.emitterAngleB!==i.emitterAngleB&&this.setEmitterAngleB(i.emitterAngleB),e.emitterForceMin!==i.emitterForceMin&&this.setEmitterForceMin(i.emitterForceMin),e.particleAngle1!==i.particleAngle1&&this.setParticleRotationMinSpeed(i.particleAngle1),e.particleAngle2!==i.particleAngle2&&this.setParticleRotationMaxSpeed(i.particleAngle2),e.maxParticleNb!==i.maxParticleNb&&this.setMaxParticlesCount(i.maxParticleNb),e.additive!==i.additive&&this.setAdditiveRendering(i.additive),e.emitterForceMax!==i.emitterForceMax&&this.setEmitterForceMax(i.emitterForceMax),e.zoneRadius!==i.zoneRadius&&this.setZoneRadius(i.zoneRadius),e.particleLifeTimeMin!==i.particleLifeTimeMin&&this.setParticleLifeTimeMin(i.particleLifeTimeMin),e.particleLifeTimeMax!==i.particleLifeTimeMax&&this.setParticleLifeTimeMax(i.particleLifeTimeMax),e.particleGravityX!==i.particleGravityX&&this.setParticleGravityX(i.particleGravityX),e.particleGravityY!==i.particleGravityY&&this.setParticleGravityY(i.particleGravityY),e.particleRed1!==i.particleRed1&&this.setParticleRed1(i.particleRed1),e.particleRed2!==i.particleRed2&&this.setParticleRed2(i.particleRed2),e.particleGreen1!==i.particleGreen1&&this.setParticleGreen1(i.particleGreen1),e.particleGreen2!==i.particleGreen2&&this.setParticleGreen2(i.particleGreen2),e.particleBlue1!==i.particleBlue1&&this.setParticleBlue1(i.particleBlue1),e.particleBlue2!==i.particleBlue2&&this.setParticleBlue2(i.particleBlue2),e.particleSize1!==i.particleSize1&&this.setParticleSize1(i.particleSize1),e.particleSize2!==i.particleSize2&&this.setParticleSize2(i.particleSize2),e.particleAlpha1!==i.particleAlpha1&&this.setParticleAlpha1(i.particleAlpha1),e.particleAlpha2!==i.particleAlpha2&&this.setParticleAlpha2(i.particleAlpha2),e.textureParticleName!==i.textureParticleName&&this.setTexture(i.textureParticleName,this.getRuntimeScene()),e.flow!==i.flow&&this.setFlow(i.flow),e.tank!==i.tank&&this.setTank(i.tank),e.destroyWhenNoParticles!==i.destroyWhenNoParticles&&(this.destroyWhenNoParticles=i.destroyWhenNoParticles),(e.particleSizeRandomness1!==i.particleSizeRandomness1||e.particleSizeRandomness2!==i.particleSizeRandomness2||e.particleAngle1!==i.particleAngle1||e.particleAngle2!==i.particleAngle2||e.maxParticleNb!==i.maxParticleNb||e.additive!==i.additive||e.rendererType!==i.rendererType||e.rendererParam1!==i.rendererParam1||e.rendererParam2!==i.rendererParam2)&&(this.getInstanceContainer().getLayer(this.layer).getRenderer().removeRendererObject(this._renderer.getRendererObject()),this._renderer.destroy(),this._renderer=new t.ParticleEmitterObjectRenderer(this.getInstanceContainer(),this,i),this._posDirty=this._angleDirty=this._forceDirty=this._zoneRadiusDirty=!0,this._lifeTimeDirty=this._gravityDirty=this._colorDirty=this._sizeDirty=!0,this._alphaDirty=this._flowDirty=this._tankDirty=this._textureDirty=!0),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),prms:this.particleRotationMinSpeed,prmx:this.particleRotationMaxSpeed,mpc:this.maxParticlesCount,addr:this.additiveRendering,angb:this.angleB,formin:this.forceMin,formax:this.forceMax,zr:this.zoneRadius,ltmin:this.lifeTimeMin,ltmax:this.lifeTimeMax,gravx:this.gravityX,gravy:this.gravityY,colr1:this.colorR1,colr2:this.colorR2,colg1:this.colorG1,colg2:this.colorG2,colb1:this.colorB1,colb2:this.colorB2,size1:this.size1,size2:this.size2,alp1:this.alpha1,alp2:this.alpha2,flow:this.flow,tank:this.tank,text:this.texture,paused:this._isEmissionPaused}}updateFromNetworkSyncData(e){super.updateFromNetworkSyncData(e),e.x!==void 0&&this.setX(e.x),e.y!==void 0&&this.setY(e.y),e.a!==void 0&&this.setAngle(e.a),e.prms!==void 0&&this.setParticleRotationMinSpeed(e.prms),e.prmx!==void 0&&this.setParticleRotationMaxSpeed(e.prmx),e.mpc!==void 0&&this.setMaxParticlesCount(e.mpc),e.addr!==void 0&&this.setAdditiveRendering(e.addr),e.angb!==void 0&&this.setEmitterAngleB(e.angb),e.formin!==void 0&&this.setEmitterForceMin(e.formin),e.formax!==void 0&&this.setEmitterForceMax(e.formax),e.zr!==void 0&&this.setZoneRadius(e.zr),e.ltmin!==void 0&&this.setParticleLifeTimeMin(e.ltmin),e.ltmax!==void 0&&this.setParticleLifeTimeMax(e.ltmax),e.gravx!==void 0&&this.setParticleGravityX(e.gravx),e.gravy!==void 0&&this.setParticleGravityY(e.gravy),e.colr1!==void 0&&this.setParticleRed1(e.colr1),e.colr2!==void 0&&this.setParticleRed2(e.colr2),e.colg1!==void 0&&this.setParticleGreen1(e.colg1),e.colg2!==void 0&&this.setParticleGreen2(e.colg2),e.colb1!==void 0&&this.setParticleBlue1(e.colb1),e.colb2!==void 0&&this.setParticleBlue2(e.colb2),e.size1!==void 0&&this.setParticleSize1(e.size1),e.size2!==void 0&&this.setParticleSize2(e.size2),e.alp1!==void 0&&this.setParticleAlpha1(e.alp1),e.alp2!==void 0&&this.setParticleAlpha2(e.alp2),e.flow!==void 0&&this.setFlow(e.flow),e.tank!==void 0&&this.setTank(e.tank),e.text!==void 0&&this.setTexture(e.text,this.getRuntimeScene()),e.paused!==void 0&&(e.paused?this.stopEmission():this.startEmission())}update(e){if(this._posDirty&&this._renderer.setPosition(this.getX(),this.getY()),this._particleRotationSpeedDirty&&this._renderer.setParticleRotationSpeed(this.particleRotationMinSpeed,this.particleRotationMaxSpeed),this._maxParticlesCountDirty&&this._renderer.setMaxParticlesCount(this.maxParticlesCount),this._additiveRenderingDirty&&this._renderer.setAdditiveRendering(this.additiveRendering),this._angleDirty){const i=this.getAngle();this._renderer.setAngle(i-this.angleB/2,i+this.angleB/2)}this._forceDirty&&this._renderer.setForce(this.forceMin,this.forceMax),this._zoneRadiusDirty&&this._renderer.setZoneRadius(this.zoneRadius),this._lifeTimeDirty&&this._renderer.setLifeTime(this.lifeTimeMin,this.lifeTimeMax),this._gravityDirty&&this._renderer.setGravity(this.gravityX,this.gravityY),this._colorDirty&&this._renderer.setColor(this.colorR1,this.colorG1,this.colorB1,this.colorR2,this.colorG2,this.colorB2),this._sizeDirty&&this._renderer.setSize(this.size1,this.size2),this._alphaDirty&&this._renderer.setAlpha(this.alpha1,this.alpha2),(this._flowDirty||this._tankDirty)&&this._renderer.resetEmission(this.flow,this.tank),this._textureDirty&&this._renderer.setTextureName(this.texture,e),this._posDirty=this._angleDirty=this._forceDirty=this._zoneRadiusDirty=!1,this._lifeTimeDirty=this._gravityDirty=this._colorDirty=this._sizeDirty=!1,this._alphaDirty=this._flowDirty=this._textureDirty=this._tankDirty=!1,this._additiveRenderingDirty=this._maxParticlesCountDirty=this._particleRotationSpeedDirty=!1,this._renderer.update(this.getElapsedTime()/1e3),this.destroyWhenNoParticles&&this.getParticleCount()===0&&this._renderer.hasStarted()&&!this._isEmissionPaused&&this._renderer._mayHaveEndedEmission()&&this.deleteFromScene(e),this.jumpForwardInTimeOnCreation>0&&this._jumpForwardInTimeCompleted===!1&&(this._renderer.update(this.jumpForwardInTimeOnCreation),this._jumpForwardInTimeCompleted=!0)}onDestroyed(){this._renderer.destroy(),super.onDestroyed()}getEmitterForceMin(){return this.forceMin}setEmitterForceMin(e){e<0&&(e=0),this.forceMin!==e&&(this._forceDirty=!0,this.forceMin=e)}getEmitterForceMax(){return this.forceMax}setEmitterForceMax(e){e<0&&(e=0),this.forceMax!==e&&(this._forceDirty=!0,this.forceMax=e)}setParticleRotationMinSpeed(e){this.particleRotationMinSpeed!==e&&(this._particleRotationSpeedDirty=!0,this.particleRotationMinSpeed=e)}getParticleRotationMinSpeed(){return this.particleRotationMinSpeed}setParticleRotationMaxSpeed(e){this.particleRotationMaxSpeed!==e&&(this._particleRotationSpeedDirty=!0,this.particleRotationMaxSpeed=e)}getParticleRotationMaxSpeed(){return this.particleRotationMaxSpeed}setMaxParticlesCount(e){this.maxParticlesCount!==e&&(this._maxParticlesCountDirty=!0,this.maxParticlesCount=e)}getMaxParticlesCount(){return this.maxParticlesCount}setAdditiveRendering(e){this.additiveRendering!==e&&(this._additiveRenderingDirty=!0,this.additiveRendering=e)}getAdditiveRendering(){return this.additiveRendering}getEmitterAngle(){return(this.angleA+this.angleB)/2}setEmitterAngle(e){const i=this.getEmitterAngle();e!==i&&(this._angleDirty=!0,this.angleA+=e-i,this.angleB+=e-i)}getEmitterAngleA(){return this.angleA}setEmitterAngleA(e){this.angleA!==e&&(this._angleDirty=!0,this.angleA=e)}getEmitterAngleB(){return this.angleB}setEmitterAngleB(e){this.angleB!==e&&(this._angleDirty=!0,this.angleB=e)}getConeSprayAngle(){return this.getEmitterAngleB()}setConeSprayAngle(e){this.setEmitterAngleB(e)}getZoneRadius(){return this.zoneRadius}setZoneRadius(e){e<0&&(e=0),this.zoneRadius!==e&&e>0&&(this._zoneRadiusDirty=!0,this.zoneRadius=e)}getParticleLifeTimeMin(){return this.lifeTimeMin}setParticleLifeTimeMin(e){e<0&&(e=0),this.lifeTimeMin!==e&&(this._lifeTimeDirty=!0,this.lifeTimeMin=e)}getParticleLifeTimeMax(){return this.lifeTimeMax}setParticleLifeTimeMax(e){e<0&&(e=0),this.lifeTimeMax!==e&&(this._lifeTimeDirty=!0,this.lifeTimeMax=e)}getParticleGravityX(){return this.gravityX}setParticleGravityX(e){this.gravityX!==e&&(this._gravityDirty=!0,this.gravityX=e)}getParticleGravityY(){return this.gravityY}setParticleGravityY(e){this.gravityY!==e&&(this._gravityDirty=!0,this.gravityY=e)}getParticleGravityAngle(){return Math.atan2(this.gravityY,this.gravityX)*180/Math.PI}setParticleGravityAngle(e){if(this.getParticleGravityAngle()!==e){this._gravityDirty=!0;const r=this.getParticleGravityLength();this.gravityX=r*Math.cos(e*Math.PI/180),this.gravityY=r*Math.sin(e*Math.PI/180)}}getParticleGravityLength(){return Math.sqrt(this.gravityX*this.gravityX+this.gravityY*this.gravityY)}setParticleGravityLength(e){e<0&&(e=0);const i=this.getParticleGravityLength();i!==e&&(this._gravityDirty=!0,this.gravityX*=e/i,this.gravityY*=e/i)}getParticleRed1(){return this.colorR1}setParticleRed1(e){e<0&&(e=0),e>255&&(e=255),this.colorR1!==e&&(this._colorDirty=!0,this.colorR1=e)}getParticleRed2(){return this.colorR2}setParticleRed2(e){e<0&&(e=0),e>255&&(e=255),this.colorR2!==e&&(this._colorDirty=!0,this.colorR2=e)}getParticleGreen1(){return this.colorG1}setParticleGreen1(e){e<0&&(e=0),e>255&&(e=255),this.colorG1!==e&&(this._colorDirty=!0,this.colorG1=e)}getParticleGreen2(){return this.colorG2}setParticleGreen2(e){e<0&&(e=0),e>255&&(e=255),this.colorG2!==e&&(this._colorDirty=!0,this.colorG2=e)}getParticleBlue1(){return this.colorB1}setParticleBlue1(e){e<0&&(e=0),e>255&&(e=255),this.colorB1!==e&&(this._colorDirty=!0,this.colorB1=e)}getParticleBlue2(){return this.colorB2}setParticleBlue2(e){e<0&&(e=0),e>255&&(e=255),this.colorB2!==e&&(this._colorDirty=!0,this.colorB2=e)}setParticleColor1(e){const i=e.split(";");i.length<3||(this.setParticleRed1(parseInt(i[0],10)),this.setParticleGreen1(parseInt(i[1],10)),this.setParticleBlue1(parseInt(i[2],10)))}setParticleColor2(e){const i=e.split(";");i.length<3||(this.setParticleRed2(parseInt(i[0],10)),this.setParticleGreen2(parseInt(i[1],10)),this.setParticleBlue2(parseInt(i[2],10)))}getParticleSize1(){return this.size1}setParticleSize1(e){e<0&&(e=0),this.size1!==e&&(this._sizeDirty=!0,this.size1=e)}getParticleSize2(){return this.size2}setParticleSize2(e){this.size2!==e&&(this._sizeDirty=!0,this.size2=e)}getParticleAlpha1(){return this.alpha1}setParticleAlpha1(e){this.alpha1!==e&&(this._alphaDirty=!0,this.alpha1=e)}getParticleAlpha2(){return this.alpha2}setParticleAlpha2(e){this.alpha2!==e&&(this._alphaDirty=!0,this.alpha2=e)}startEmission(){this._isEmissionPaused=!1,this._renderer.start()}stopEmission(){this._isEmissionPaused=!0,this._renderer.stop()}isEmitting(){return this._renderer.emitter.emit}noMoreParticles(){return!this.isEmitting()}recreateParticleSystem(){this._renderer.recreate()}getFlow(){return this.flow}setFlow(e){this.flow!==e&&(this.flow=e,this._flowDirty=!0)}getParticleCount(){return this._renderer.getParticleCount()}getTank(){return this.tank}setTank(e){this.tank=e,this._tankDirty=!0}getTexture(){return this.texture}setTexture(e,i){this.texture!==e&&this._renderer.isTextureNameValid(e,i)&&(this.texture=e,this._textureDirty=!0)}jumpEmitterForwardInTime(e){this._renderer.update(e)}}t.ParticleEmitterObject=s,t.registerObject("ParticleSystem::ParticleEmitter",t.ParticleEmitterObject)})(gdjs||(gdjs={}));
1
+ var gdjs;(function(t){class s extends t.RuntimeObject{constructor(e,i){super(e,i);this._jumpForwardInTimeCompleted=!1;this._posDirty=!0;this._angleDirty=!0;this._forceDirty=!0;this._zoneRadiusDirty=!0;this._lifeTimeDirty=!0;this._gravityDirty=!0;this._colorDirty=!0;this._sizeDirty=!0;this._alphaDirty=!0;this._flowDirty=!0;this._tankDirty=!0;this._particleRotationSpeedDirty=!0;this._maxParticlesCountDirty=!0;this._additiveRenderingDirty=!0;this._isEmissionPaused=!1;this._renderer=new t.ParticleEmitterObjectRenderer(e,this,i),this.angleA=i.emitterAngleA,this.angleB=i.emitterAngleB,this.forceMin=i.emitterForceMin,this.forceMax=i.emitterForceMax,this.zoneRadius=i.zoneRadius,this.lifeTimeMin=i.particleLifeTimeMin,this.lifeTimeMax=i.particleLifeTimeMax,this.gravityX=i.particleGravityX,this.gravityY=i.particleGravityY,this.color1=t.rgbOrHexStringToNumber(i.particleColor1),this.color2=t.rgbOrHexStringToNumber(i.particleColor2),this.size1=i.particleSize1,this.size2=i.particleSize2,this.alpha1=i.particleAlpha1,this.alpha2=i.particleAlpha2,this.rendererType=i.rendererType,this.rendererParam1=i.rendererParam1,this.rendererParam2=i.rendererParam2,this.texture=i.textureParticleName,this.flow=i.flow,this.tank=i.tank,this.destroyWhenNoParticles=i.destroyWhenNoParticles,this.particleRotationMinSpeed=i.particleAngle1,this.particleRotationMaxSpeed=i.particleAngle2,this.maxParticlesCount=i.maxParticleNb,this.additiveRendering=i.additive,this.jumpForwardInTimeOnCreation=i.jumpForwardInTimeOnCreation,this._textureDirty=this.texture!=="",this.onCreated()}setX(e){this.x!==e&&(this._posDirty=!0),super.setX(e)}setY(e){this.y!==e&&(this._posDirty=!0),super.setY(e)}setAngle(e){this.angle!==e&&(this._angleDirty=!0),super.setAngle(e)}getRendererObject(){return this._renderer.getRendererObject()}updateFromObjectData(e,i){return e.emitterAngleA!==i.emitterAngleA&&this.setEmitterAngleA(i.emitterAngleA),e.emitterAngleB!==i.emitterAngleB&&this.setEmitterAngleB(i.emitterAngleB),e.emitterForceMin!==i.emitterForceMin&&this.setEmitterForceMin(i.emitterForceMin),e.particleAngle1!==i.particleAngle1&&this.setParticleRotationMinSpeed(i.particleAngle1),e.particleAngle2!==i.particleAngle2&&this.setParticleRotationMaxSpeed(i.particleAngle2),e.maxParticleNb!==i.maxParticleNb&&this.setMaxParticlesCount(i.maxParticleNb),e.additive!==i.additive&&this.setAdditiveRendering(i.additive),e.emitterForceMax!==i.emitterForceMax&&this.setEmitterForceMax(i.emitterForceMax),e.zoneRadius!==i.zoneRadius&&this.setZoneRadius(i.zoneRadius),e.particleLifeTimeMin!==i.particleLifeTimeMin&&this.setParticleLifeTimeMin(i.particleLifeTimeMin),e.particleLifeTimeMax!==i.particleLifeTimeMax&&this.setParticleLifeTimeMax(i.particleLifeTimeMax),e.particleGravityX!==i.particleGravityX&&this.setParticleGravityX(i.particleGravityX),e.particleGravityY!==i.particleGravityY&&this.setParticleGravityY(i.particleGravityY),e.particleColor1!==i.particleColor1&&this.setParticleColor1(i.particleColor1),e.particleColor2!==i.particleColor2&&this.setParticleColor2(i.particleColor2),e.particleSize1!==i.particleSize1&&this.setParticleSize1(i.particleSize1),e.particleSize2!==i.particleSize2&&this.setParticleSize2(i.particleSize2),e.particleAlpha1!==i.particleAlpha1&&this.setParticleAlpha1(i.particleAlpha1),e.particleAlpha2!==i.particleAlpha2&&this.setParticleAlpha2(i.particleAlpha2),e.textureParticleName!==i.textureParticleName&&this.setTexture(i.textureParticleName,this.getRuntimeScene()),e.flow!==i.flow&&this.setFlow(i.flow),e.tank!==i.tank&&this.setTank(i.tank),e.destroyWhenNoParticles!==i.destroyWhenNoParticles&&(this.destroyWhenNoParticles=i.destroyWhenNoParticles),(e.particleSizeRandomness1!==i.particleSizeRandomness1||e.particleSizeRandomness2!==i.particleSizeRandomness2||e.particleAngle1!==i.particleAngle1||e.particleAngle2!==i.particleAngle2||e.maxParticleNb!==i.maxParticleNb||e.additive!==i.additive||e.rendererType!==i.rendererType||e.rendererParam1!==i.rendererParam1||e.rendererParam2!==i.rendererParam2)&&(this.getInstanceContainer().getLayer(this.layer).getRenderer().removeRendererObject(this._renderer.getRendererObject()),this._renderer.destroy(),this._renderer=new t.ParticleEmitterObjectRenderer(this.getInstanceContainer(),this,i),this._posDirty=this._angleDirty=this._forceDirty=this._zoneRadiusDirty=!0,this._lifeTimeDirty=this._gravityDirty=this._colorDirty=this._sizeDirty=!0,this._alphaDirty=this._flowDirty=this._tankDirty=this._textureDirty=!0),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),prms:this.particleRotationMinSpeed,prmx:this.particleRotationMaxSpeed,mpc:this.maxParticlesCount,addr:this.additiveRendering,angb:this.angleB,formin:this.forceMin,formax:this.forceMax,zr:this.zoneRadius,ltmin:this.lifeTimeMin,ltmax:this.lifeTimeMax,gravx:this.gravityX,gravy:this.gravityY,color1:this.color1,color2:this.color2,size1:this.size1,size2:this.size2,alp1:this.alpha1,alp2:this.alpha2,flow:this.flow,tank:this.tank,text:this.texture,paused:this._isEmissionPaused}}updateFromNetworkSyncData(e){super.updateFromNetworkSyncData(e),e.x!==void 0&&this.setX(e.x),e.y!==void 0&&this.setY(e.y),e.a!==void 0&&this.setAngle(e.a),e.prms!==void 0&&this.setParticleRotationMinSpeed(e.prms),e.prmx!==void 0&&this.setParticleRotationMaxSpeed(e.prmx),e.mpc!==void 0&&this.setMaxParticlesCount(e.mpc),e.addr!==void 0&&this.setAdditiveRendering(e.addr),e.angb!==void 0&&this.setEmitterAngleB(e.angb),e.formin!==void 0&&this.setEmitterForceMin(e.formin),e.formax!==void 0&&this.setEmitterForceMax(e.formax),e.zr!==void 0&&this.setZoneRadius(e.zr),e.ltmin!==void 0&&this.setParticleLifeTimeMin(e.ltmin),e.ltmax!==void 0&&this.setParticleLifeTimeMax(e.ltmax),e.gravx!==void 0&&this.setParticleGravityX(e.gravx),e.gravy!==void 0&&this.setParticleGravityY(e.gravy),e.color1!==void 0&&this.setParticleColor1AsNumber(e.color1),e.color2!==void 0&&this.setParticleColor2AsNumber(e.color2),e.size1!==void 0&&this.setParticleSize1(e.size1),e.size2!==void 0&&this.setParticleSize2(e.size2),e.alp1!==void 0&&this.setParticleAlpha1(e.alp1),e.alp2!==void 0&&this.setParticleAlpha2(e.alp2),e.flow!==void 0&&this.setFlow(e.flow),e.tank!==void 0&&this.setTank(e.tank),e.text!==void 0&&this.setTexture(e.text,this.getRuntimeScene()),e.paused!==void 0&&(e.paused?this.stopEmission():this.startEmission())}update(e){if(this._posDirty&&this._renderer.setPosition(this.getX(),this.getY()),this._particleRotationSpeedDirty&&this._renderer.setParticleRotationSpeed(this.particleRotationMinSpeed,this.particleRotationMaxSpeed),this._maxParticlesCountDirty&&this._renderer.setMaxParticlesCount(this.maxParticlesCount),this._additiveRenderingDirty&&this._renderer.setAdditiveRendering(this.additiveRendering),this._angleDirty){const i=this.getAngle();this._renderer.setAngle(i-this.angleB/2,i+this.angleB/2)}this._forceDirty&&this._renderer.setForce(this.forceMin,this.forceMax),this._zoneRadiusDirty&&this._renderer.setZoneRadius(this.zoneRadius),this._lifeTimeDirty&&this._renderer.setLifeTime(this.lifeTimeMin,this.lifeTimeMax),this._gravityDirty&&this._renderer.setGravity(this.gravityX,this.gravityY),this._colorDirty&&this._renderer.setColor(this.color1,this.color2),this._sizeDirty&&this._renderer.setSize(this.size1,this.size2),this._alphaDirty&&this._renderer.setAlpha(this.alpha1,this.alpha2),(this._flowDirty||this._tankDirty)&&this._renderer.resetEmission(this.flow,this.tank),this._textureDirty&&this._renderer.setTextureName(this.texture,e),this._posDirty=this._angleDirty=this._forceDirty=this._zoneRadiusDirty=!1,this._lifeTimeDirty=this._gravityDirty=this._colorDirty=this._sizeDirty=!1,this._alphaDirty=this._flowDirty=this._textureDirty=this._tankDirty=!1,this._additiveRenderingDirty=this._maxParticlesCountDirty=this._particleRotationSpeedDirty=!1,this._renderer.update(this.getElapsedTime()/1e3),this.destroyWhenNoParticles&&this.getParticleCount()===0&&this._renderer.hasStarted()&&!this._isEmissionPaused&&this._renderer._mayHaveEndedEmission()&&this.deleteFromScene(e),this.jumpForwardInTimeOnCreation>0&&this._jumpForwardInTimeCompleted===!1&&(this._renderer.update(this.jumpForwardInTimeOnCreation),this._jumpForwardInTimeCompleted=!0)}onDestroyed(){this._renderer.destroy(),super.onDestroyed()}getEmitterForceMin(){return this.forceMin}setEmitterForceMin(e){e<0&&(e=0),this.forceMin!==e&&(this._forceDirty=!0,this.forceMin=e)}getEmitterForceMax(){return this.forceMax}setEmitterForceMax(e){e<0&&(e=0),this.forceMax!==e&&(this._forceDirty=!0,this.forceMax=e)}setParticleRotationMinSpeed(e){this.particleRotationMinSpeed!==e&&(this._particleRotationSpeedDirty=!0,this.particleRotationMinSpeed=e)}getParticleRotationMinSpeed(){return this.particleRotationMinSpeed}setParticleRotationMaxSpeed(e){this.particleRotationMaxSpeed!==e&&(this._particleRotationSpeedDirty=!0,this.particleRotationMaxSpeed=e)}getParticleRotationMaxSpeed(){return this.particleRotationMaxSpeed}setMaxParticlesCount(e){this.maxParticlesCount!==e&&(this._maxParticlesCountDirty=!0,this.maxParticlesCount=e)}getMaxParticlesCount(){return this.maxParticlesCount}setAdditiveRendering(e){this.additiveRendering!==e&&(this._additiveRenderingDirty=!0,this.additiveRendering=e)}getAdditiveRendering(){return this.additiveRendering}getEmitterAngle(){return(this.angleA+this.angleB)/2}setEmitterAngle(e){const i=this.getEmitterAngle();e!==i&&(this._angleDirty=!0,this.angleA+=e-i,this.angleB+=e-i)}getEmitterAngleA(){return this.angleA}setEmitterAngleA(e){this.angleA!==e&&(this._angleDirty=!0,this.angleA=e)}getEmitterAngleB(){return this.angleB}setEmitterAngleB(e){this.angleB!==e&&(this._angleDirty=!0,this.angleB=e)}getConeSprayAngle(){return this.getEmitterAngleB()}setConeSprayAngle(e){this.setEmitterAngleB(e)}getZoneRadius(){return this.zoneRadius}setZoneRadius(e){e<0&&(e=0),this.zoneRadius!==e&&e>0&&(this._zoneRadiusDirty=!0,this.zoneRadius=e)}getParticleLifeTimeMin(){return this.lifeTimeMin}setParticleLifeTimeMin(e){e<0&&(e=0),this.lifeTimeMin!==e&&(this._lifeTimeDirty=!0,this.lifeTimeMin=e)}getParticleLifeTimeMax(){return this.lifeTimeMax}setParticleLifeTimeMax(e){e<0&&(e=0),this.lifeTimeMax!==e&&(this._lifeTimeDirty=!0,this.lifeTimeMax=e)}getParticleGravityX(){return this.gravityX}setParticleGravityX(e){this.gravityX!==e&&(this._gravityDirty=!0,this.gravityX=e)}getParticleGravityY(){return this.gravityY}setParticleGravityY(e){this.gravityY!==e&&(this._gravityDirty=!0,this.gravityY=e)}getParticleGravityAngle(){return Math.atan2(this.gravityY,this.gravityX)*180/Math.PI}setParticleGravityAngle(e){if(this.getParticleGravityAngle()!==e){this._gravityDirty=!0;const r=this.getParticleGravityLength();this.gravityX=r*Math.cos(e*Math.PI/180),this.gravityY=r*Math.sin(e*Math.PI/180)}}getParticleGravityLength(){return Math.sqrt(this.gravityX*this.gravityX+this.gravityY*this.gravityY)}setParticleGravityLength(e){e<0&&(e=0);const i=this.getParticleGravityLength();i!==e&&(this._gravityDirty=!0,this.gravityX*=e/i,this.gravityY*=e/i)}getParticleRed1(){return t.hexNumberToRGBArray(this.color1)[0]}setParticleRed1(e){e<0&&(e=0),e>255&&(e=255);const i=t.hexNumberToRGBArray(this.color1);this.setParticleColor1AsNumber(t.rgbToHexNumber(e,i[1],i[2]))}getParticleRed2(){return t.hexNumberToRGBArray(this.color2)[0]}setParticleRed2(e){e<0&&(e=0),e>255&&(e=255);const i=t.hexNumberToRGBArray(this.color2);this.setParticleColor2AsNumber(t.rgbToHexNumber(e,i[1],i[2]))}getParticleGreen1(){return t.hexNumberToRGBArray(this.color1)[1]}setParticleGreen1(e){e<0&&(e=0),e>255&&(e=255);const i=t.hexNumberToRGBArray(this.color1);this.setParticleColor1AsNumber(t.rgbToHexNumber(i[0],e,i[2]))}getParticleGreen2(){return t.hexNumberToRGBArray(this.color2)[1]}setParticleGreen2(e){e<0&&(e=0),e>255&&(e=255);const i=t.hexNumberToRGBArray(this.color2);this.setParticleColor2AsNumber(t.rgbToHexNumber(i[0],e,i[2]))}getParticleBlue1(){return t.hexNumberToRGBArray(this.color1)[2]}setParticleBlue1(e){e<0&&(e=0),e>255&&(e=255);const i=t.hexNumberToRGBArray(this.color1);this.setParticleColor1AsNumber(t.rgbToHexNumber(i[0],i[1],e))}getParticleBlue2(){return t.hexNumberToRGBArray(this.color2)[2]}setParticleBlue2(e){e<0&&(e=0),e>255&&(e=255);const i=t.hexNumberToRGBArray(this.color2);this.setParticleColor2AsNumber(t.rgbToHexNumber(i[0],i[1],e))}setParticleColor1AsNumber(e){this.color1=e,this._colorDirty=!0}setParticleColor1(e){this.setParticleColor1AsNumber(t.rgbOrHexStringToNumber(e))}setParticleColor2AsNumber(e){this.color2=e,this._colorDirty=!0}setParticleColor2(e){this.setParticleColor2AsNumber(t.rgbOrHexStringToNumber(e))}getParticleSize1(){return this.size1}setParticleSize1(e){e<0&&(e=0),this.size1!==e&&(this._sizeDirty=!0,this.size1=e)}getParticleSize2(){return this.size2}setParticleSize2(e){this.size2!==e&&(this._sizeDirty=!0,this.size2=e)}getParticleAlpha1(){return this.alpha1}setParticleAlpha1(e){this.alpha1!==e&&(this._alphaDirty=!0,this.alpha1=e)}getParticleAlpha2(){return this.alpha2}setParticleAlpha2(e){this.alpha2!==e&&(this._alphaDirty=!0,this.alpha2=e)}startEmission(){this._isEmissionPaused=!1,this._renderer.start()}stopEmission(){this._isEmissionPaused=!0,this._renderer.stop()}isEmitting(){return this._renderer.emitter.emit}noMoreParticles(){return!this.isEmitting()}recreateParticleSystem(){this._renderer.recreate()}getFlow(){return this.flow}setFlow(e){this.flow!==e&&(this.flow=e,this._flowDirty=!0)}getParticleCount(){return this._renderer.getParticleCount()}getTank(){return this.tank}setTank(e){this.tank=e,this._tankDirty=!0}getTexture(){return this.texture}setTexture(e,i){this.texture!==e&&this._renderer.isTextureNameValid(e,i)&&(this.texture=e,this._textureDirty=!0)}jumpEmitterForwardInTime(e){this._renderer.update(e)}}t.ParticleEmitterObject=s,t.registerObject("ParticleSystem::ParticleEmitter",t.ParticleEmitterObject)})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=particleemitterobject.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/ParticleSystem/particleemitterobject.ts"],
4
- "sourcesContent": ["/*\n * GDevelop - Particle System Extension\n * Copyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)\n * This project is released under the MIT License.\n */\n\nnamespace gdjs {\n export type ParticleEmitterObjectDataType = {\n /**\n * @deprecated Data not used\n */\n emitterAngleA: number;\n emitterForceMin: number;\n /**\n * Cone spray angle (degrees)\n */\n emitterAngleB: number;\n zoneRadius: number;\n emitterForceMax: number;\n particleLifeTimeMax: number;\n particleLifeTimeMin: number;\n particleGravityY: number;\n particleGravityX: number;\n particleRed2: number;\n particleRed1: number;\n particleGreen2: number;\n particleGreen1: number;\n particleBlue2: number;\n particleBlue1: number;\n particleSize2: number;\n particleSize1: number;\n /**\n * Particle max rotation speed (degrees/second)\n */\n particleAngle2: number;\n /**\n * Particle min rotation speed (degrees/second)\n */\n particleAngle1: number;\n particleAlpha1: number;\n rendererType: string;\n particleAlpha2: number;\n rendererParam2: number;\n rendererParam1: number;\n particleSizeRandomness1: number;\n particleSizeRandomness2: number;\n maxParticleNb: number;\n additive: boolean;\n /** Resource name for image in particle */\n textureParticleName: string;\n tank: number;\n flow: number;\n /** Destroy the object when there is no particles? */\n destroyWhenNoParticles: boolean;\n jumpForwardInTimeOnCreation: number;\n };\n\n export type ParticleEmitterObjectData = ObjectData &\n ParticleEmitterObjectDataType;\n\n export type ParticleEmitterObjectNetworkSyncDataType = {\n // Technically, all attributes can change at runtime, so we sync as many as possible.\n // TODO: ensure we only send props that change to optimize the sync.\n // dirty attributes are not synced, they are defined by the update method if the value has changed.\n // Particle Rotation Speed\n prms: number;\n prmx: number;\n // Max Particles Count\n mpc: number;\n // Additive Rendering\n addr: boolean;\n // Angle\n angb: number;\n // Force\n formin: number;\n formax: number;\n // Zone Radius\n zr: number;\n // Life Time\n ltmin: number;\n ltmax: number;\n // Gravity\n gravx: number;\n gravy: number;\n // Color\n colr1: number;\n colr2: number;\n colg1: number;\n colg2: number;\n colb1: number;\n colb2: number;\n // Size\n size1: number;\n size2: number;\n // Alpha\n alp1: number;\n alp2: number;\n // Flow\n flow: number;\n // Tank\n tank: number;\n // Texture\n text: string;\n // Pause\n paused: boolean;\n };\n\n export type ParticleEmitterObjectNetworkSyncData = ObjectNetworkSyncData &\n ParticleEmitterObjectNetworkSyncDataType;\n\n /**\n * Displays particles.\n */\n export class ParticleEmitterObject extends gdjs.RuntimeObject {\n /**\n * @deprecated Data not used\n */\n angleA: number;\n angleB: number;\n forceMin: number;\n forceMax: float;\n zoneRadius: number;\n lifeTimeMin: number;\n lifeTimeMax: float;\n gravityX: number;\n gravityY: number;\n colorR1: number;\n colorR2: number;\n colorG1: number;\n colorG2: number;\n colorB1: number;\n colorB2: number;\n size1: number;\n size2: number;\n alpha1: number;\n alpha2: number;\n rendererType: string;\n rendererParam1: number;\n rendererParam2: number;\n texture: string;\n flow: number;\n tank: number;\n destroyWhenNoParticles: boolean;\n particleRotationMinSpeed: number;\n particleRotationMaxSpeed: number;\n maxParticlesCount: number;\n additiveRendering: boolean;\n jumpForwardInTimeOnCreation: number;\n _jumpForwardInTimeCompleted: boolean = false;\n _posDirty: boolean = true;\n _angleDirty: boolean = true;\n _forceDirty: boolean = true;\n _zoneRadiusDirty: boolean = true;\n _lifeTimeDirty: boolean = true;\n _gravityDirty: boolean = true;\n _colorDirty: boolean = true;\n _sizeDirty: boolean = true;\n _alphaDirty: boolean = true;\n _flowDirty: boolean = true;\n _tankDirty: boolean = true;\n _particleRotationSpeedDirty: boolean = true;\n _maxParticlesCountDirty: boolean = true;\n _additiveRenderingDirty: boolean = true;\n // Don't mark texture as dirty if not using one.\n _textureDirty: boolean;\n /**\n * `true` only when the emission is paused by events.\n * It allows to tell the end of emission apart from it.\n */\n _isEmissionPaused: boolean = false;\n\n // @ts-ignore\n _renderer: gdjs.ParticleEmitterObjectRenderer;\n\n /**\n * @param instanceContainer the container the object belongs to\n * @param particleObjectData The initial properties of the object\n */\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n particleObjectData: ParticleEmitterObjectData\n ) {\n super(instanceContainer, particleObjectData);\n this._renderer = new gdjs.ParticleEmitterObjectRenderer(\n instanceContainer,\n this,\n particleObjectData\n );\n this.angleA = particleObjectData.emitterAngleA;\n this.angleB = particleObjectData.emitterAngleB;\n this.forceMin = particleObjectData.emitterForceMin;\n this.forceMax = particleObjectData.emitterForceMax;\n this.zoneRadius = particleObjectData.zoneRadius;\n this.lifeTimeMin = particleObjectData.particleLifeTimeMin;\n this.lifeTimeMax = particleObjectData.particleLifeTimeMax;\n this.gravityX = particleObjectData.particleGravityX;\n this.gravityY = particleObjectData.particleGravityY;\n this.colorR1 = particleObjectData.particleRed1;\n this.colorR2 = particleObjectData.particleRed2;\n this.colorG1 = particleObjectData.particleGreen1;\n this.colorG2 = particleObjectData.particleGreen2;\n this.colorB1 = particleObjectData.particleBlue1;\n this.colorB2 = particleObjectData.particleBlue2;\n this.size1 = particleObjectData.particleSize1;\n this.size2 = particleObjectData.particleSize2;\n this.alpha1 = particleObjectData.particleAlpha1;\n this.alpha2 = particleObjectData.particleAlpha2;\n this.rendererType = particleObjectData.rendererType;\n this.rendererParam1 = particleObjectData.rendererParam1;\n this.rendererParam2 = particleObjectData.rendererParam2;\n this.texture = particleObjectData.textureParticleName;\n this.flow = particleObjectData.flow;\n this.tank = particleObjectData.tank;\n this.destroyWhenNoParticles = particleObjectData.destroyWhenNoParticles;\n this.particleRotationMinSpeed = particleObjectData.particleAngle1;\n this.particleRotationMaxSpeed = particleObjectData.particleAngle2;\n this.maxParticlesCount = particleObjectData.maxParticleNb;\n this.additiveRendering = particleObjectData.additive;\n this.jumpForwardInTimeOnCreation =\n particleObjectData.jumpForwardInTimeOnCreation;\n this._textureDirty = this.texture !== '';\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n setX(x: number): void {\n if (this.x !== x) {\n this._posDirty = true;\n }\n super.setX(x);\n }\n\n setY(y: number): void {\n if (this.y !== y) {\n this._posDirty = true;\n }\n super.setY(y);\n }\n\n setAngle(angle): void {\n if (this.angle !== angle) {\n this._angleDirty = true;\n }\n super.setAngle(angle);\n }\n\n getRendererObject() {\n return this._renderer.getRendererObject();\n }\n\n updateFromObjectData(\n oldObjectData: ParticleEmitterObjectData,\n newObjectData: ParticleEmitterObjectData\n ): boolean {\n if (oldObjectData.emitterAngleA !== newObjectData.emitterAngleA) {\n this.setEmitterAngleA(newObjectData.emitterAngleA);\n }\n if (oldObjectData.emitterAngleB !== newObjectData.emitterAngleB) {\n this.setEmitterAngleB(newObjectData.emitterAngleB);\n }\n if (oldObjectData.emitterForceMin !== newObjectData.emitterForceMin) {\n this.setEmitterForceMin(newObjectData.emitterForceMin);\n }\n if (oldObjectData.particleAngle1 !== newObjectData.particleAngle1) {\n this.setParticleRotationMinSpeed(newObjectData.particleAngle1);\n }\n if (oldObjectData.particleAngle2 !== newObjectData.particleAngle2) {\n this.setParticleRotationMaxSpeed(newObjectData.particleAngle2);\n }\n if (oldObjectData.maxParticleNb !== newObjectData.maxParticleNb) {\n this.setMaxParticlesCount(newObjectData.maxParticleNb);\n }\n if (oldObjectData.additive !== newObjectData.additive) {\n this.setAdditiveRendering(newObjectData.additive);\n }\n if (oldObjectData.emitterForceMax !== newObjectData.emitterForceMax) {\n this.setEmitterForceMax(newObjectData.emitterForceMax);\n }\n if (oldObjectData.zoneRadius !== newObjectData.zoneRadius) {\n this.setZoneRadius(newObjectData.zoneRadius);\n }\n if (\n oldObjectData.particleLifeTimeMin !== newObjectData.particleLifeTimeMin\n ) {\n this.setParticleLifeTimeMin(newObjectData.particleLifeTimeMin);\n }\n if (\n oldObjectData.particleLifeTimeMax !== newObjectData.particleLifeTimeMax\n ) {\n this.setParticleLifeTimeMax(newObjectData.particleLifeTimeMax);\n }\n if (oldObjectData.particleGravityX !== newObjectData.particleGravityX) {\n this.setParticleGravityX(newObjectData.particleGravityX);\n }\n if (oldObjectData.particleGravityY !== newObjectData.particleGravityY) {\n this.setParticleGravityY(newObjectData.particleGravityY);\n }\n if (oldObjectData.particleRed1 !== newObjectData.particleRed1) {\n this.setParticleRed1(newObjectData.particleRed1);\n }\n if (oldObjectData.particleRed2 !== newObjectData.particleRed2) {\n this.setParticleRed2(newObjectData.particleRed2);\n }\n if (oldObjectData.particleGreen1 !== newObjectData.particleGreen1) {\n this.setParticleGreen1(newObjectData.particleGreen1);\n }\n if (oldObjectData.particleGreen2 !== newObjectData.particleGreen2) {\n this.setParticleGreen2(newObjectData.particleGreen2);\n }\n if (oldObjectData.particleBlue1 !== newObjectData.particleBlue1) {\n this.setParticleBlue1(newObjectData.particleBlue1);\n }\n if (oldObjectData.particleBlue2 !== newObjectData.particleBlue2) {\n this.setParticleBlue2(newObjectData.particleBlue2);\n }\n if (oldObjectData.particleSize1 !== newObjectData.particleSize1) {\n this.setParticleSize1(newObjectData.particleSize1);\n }\n if (oldObjectData.particleSize2 !== newObjectData.particleSize2) {\n this.setParticleSize2(newObjectData.particleSize2);\n }\n if (oldObjectData.particleAlpha1 !== newObjectData.particleAlpha1) {\n this.setParticleAlpha1(newObjectData.particleAlpha1);\n }\n if (oldObjectData.particleAlpha2 !== newObjectData.particleAlpha2) {\n this.setParticleAlpha2(newObjectData.particleAlpha2);\n }\n if (\n oldObjectData.textureParticleName !== newObjectData.textureParticleName\n ) {\n this.setTexture(\n newObjectData.textureParticleName,\n this.getRuntimeScene()\n );\n }\n if (oldObjectData.flow !== newObjectData.flow) {\n this.setFlow(newObjectData.flow);\n }\n if (oldObjectData.tank !== newObjectData.tank) {\n this.setTank(newObjectData.tank);\n }\n if (\n oldObjectData.destroyWhenNoParticles !==\n newObjectData.destroyWhenNoParticles\n ) {\n this.destroyWhenNoParticles = newObjectData.destroyWhenNoParticles;\n }\n if (\n oldObjectData.particleSizeRandomness1 !==\n newObjectData.particleSizeRandomness1 ||\n oldObjectData.particleSizeRandomness2 !==\n newObjectData.particleSizeRandomness2 ||\n oldObjectData.particleAngle1 !== newObjectData.particleAngle1 ||\n oldObjectData.particleAngle2 !== newObjectData.particleAngle2 ||\n oldObjectData.maxParticleNb !== newObjectData.maxParticleNb ||\n oldObjectData.additive !== newObjectData.additive ||\n oldObjectData.rendererType !== newObjectData.rendererType ||\n oldObjectData.rendererParam1 !== newObjectData.rendererParam1 ||\n oldObjectData.rendererParam2 !== newObjectData.rendererParam2\n ) {\n // Destroy the renderer, ensure it's removed from the layer.\n const layer = this.getInstanceContainer().getLayer(this.layer);\n layer\n .getRenderer()\n .removeRendererObject(this._renderer.getRendererObject());\n this._renderer.destroy();\n\n // and recreate the renderer, which will add itself to the layer.\n this._renderer = new gdjs.ParticleEmitterObjectRenderer(\n this.getInstanceContainer(),\n this,\n newObjectData\n );\n\n // Consider every state dirty as the renderer was just re-created, so it needs\n // to be repositioned, angle updated, etc...\n this._posDirty = this._angleDirty = this._forceDirty = this._zoneRadiusDirty = true;\n this._lifeTimeDirty = this._gravityDirty = this._colorDirty = this._sizeDirty = true;\n this._alphaDirty = this._flowDirty = this._tankDirty = this._textureDirty = true;\n }\n return true;\n }\n\n getNetworkSyncData(): ParticleEmitterObjectNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n prms: this.particleRotationMinSpeed,\n prmx: this.particleRotationMaxSpeed,\n mpc: this.maxParticlesCount,\n addr: this.additiveRendering,\n angb: this.angleB,\n formin: this.forceMin,\n formax: this.forceMax,\n zr: this.zoneRadius,\n ltmin: this.lifeTimeMin,\n ltmax: this.lifeTimeMax,\n gravx: this.gravityX,\n gravy: this.gravityY,\n colr1: this.colorR1,\n colr2: this.colorR2,\n colg1: this.colorG1,\n colg2: this.colorG2,\n colb1: this.colorB1,\n colb2: this.colorB2,\n size1: this.size1,\n size2: this.size2,\n alp1: this.alpha1,\n alp2: this.alpha2,\n flow: this.flow,\n tank: this.tank,\n text: this.texture,\n paused: this._isEmissionPaused,\n };\n }\n\n updateFromNetworkSyncData(\n syncData: ParticleEmitterObjectNetworkSyncData\n ): void {\n super.updateFromNetworkSyncData(syncData);\n if (syncData.x !== undefined) {\n this.setX(syncData.x);\n }\n if (syncData.y !== undefined) {\n this.setY(syncData.y);\n }\n if (syncData.a !== undefined) {\n this.setAngle(syncData.a);\n }\n if (syncData.prms !== undefined) {\n this.setParticleRotationMinSpeed(syncData.prms);\n }\n if (syncData.prmx !== undefined) {\n this.setParticleRotationMaxSpeed(syncData.prmx);\n }\n if (syncData.mpc !== undefined) {\n this.setMaxParticlesCount(syncData.mpc);\n }\n if (syncData.addr !== undefined) {\n this.setAdditiveRendering(syncData.addr);\n }\n if (syncData.angb !== undefined) {\n this.setEmitterAngleB(syncData.angb);\n }\n if (syncData.formin !== undefined) {\n this.setEmitterForceMin(syncData.formin);\n }\n if (syncData.formax !== undefined) {\n this.setEmitterForceMax(syncData.formax);\n }\n if (syncData.zr !== undefined) {\n this.setZoneRadius(syncData.zr);\n }\n if (syncData.ltmin !== undefined) {\n this.setParticleLifeTimeMin(syncData.ltmin);\n }\n if (syncData.ltmax !== undefined) {\n this.setParticleLifeTimeMax(syncData.ltmax);\n }\n if (syncData.gravx !== undefined) {\n this.setParticleGravityX(syncData.gravx);\n }\n if (syncData.gravy !== undefined) {\n this.setParticleGravityY(syncData.gravy);\n }\n if (syncData.colr1 !== undefined) {\n this.setParticleRed1(syncData.colr1);\n }\n if (syncData.colr2 !== undefined) {\n this.setParticleRed2(syncData.colr2);\n }\n if (syncData.colg1 !== undefined) {\n this.setParticleGreen1(syncData.colg1);\n }\n if (syncData.colg2 !== undefined) {\n this.setParticleGreen2(syncData.colg2);\n }\n if (syncData.colb1 !== undefined) {\n this.setParticleBlue1(syncData.colb1);\n }\n if (syncData.colb2 !== undefined) {\n this.setParticleBlue2(syncData.colb2);\n }\n if (syncData.size1 !== undefined) {\n this.setParticleSize1(syncData.size1);\n }\n if (syncData.size2 !== undefined) {\n this.setParticleSize2(syncData.size2);\n }\n if (syncData.alp1 !== undefined) {\n this.setParticleAlpha1(syncData.alp1);\n }\n if (syncData.alp2 !== undefined) {\n this.setParticleAlpha2(syncData.alp2);\n }\n if (syncData.flow !== undefined) {\n this.setFlow(syncData.flow);\n }\n if (syncData.tank !== undefined) {\n this.setTank(syncData.tank);\n }\n if (syncData.text !== undefined) {\n this.setTexture(syncData.text, this.getRuntimeScene());\n }\n if (syncData.paused !== undefined) {\n if (syncData.paused) {\n this.stopEmission();\n } else {\n this.startEmission();\n }\n }\n }\n\n update(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n if (this._posDirty) {\n this._renderer.setPosition(this.getX(), this.getY());\n }\n if (this._particleRotationSpeedDirty) {\n this._renderer.setParticleRotationSpeed(\n this.particleRotationMinSpeed,\n this.particleRotationMaxSpeed\n );\n }\n if (this._maxParticlesCountDirty) {\n this._renderer.setMaxParticlesCount(this.maxParticlesCount);\n }\n if (this._additiveRenderingDirty) {\n this._renderer.setAdditiveRendering(this.additiveRendering);\n }\n if (this._angleDirty) {\n const angle = this.getAngle();\n this._renderer.setAngle(\n angle - this.angleB / 2.0,\n angle + this.angleB / 2.0\n );\n }\n if (this._forceDirty) {\n this._renderer.setForce(this.forceMin, this.forceMax);\n }\n if (this._zoneRadiusDirty) {\n this._renderer.setZoneRadius(this.zoneRadius);\n }\n if (this._lifeTimeDirty) {\n this._renderer.setLifeTime(this.lifeTimeMin, this.lifeTimeMax);\n }\n if (this._gravityDirty) {\n this._renderer.setGravity(this.gravityX, this.gravityY);\n }\n if (this._colorDirty) {\n this._renderer.setColor(\n this.colorR1,\n this.colorG1,\n this.colorB1,\n this.colorR2,\n this.colorG2,\n this.colorB2\n );\n }\n if (this._sizeDirty) {\n this._renderer.setSize(this.size1, this.size2);\n }\n if (this._alphaDirty) {\n this._renderer.setAlpha(this.alpha1, this.alpha2);\n }\n if (this._flowDirty || this._tankDirty) {\n this._renderer.resetEmission(this.flow, this.tank);\n }\n if (this._textureDirty) {\n this._renderer.setTextureName(this.texture, instanceContainer);\n }\n this._posDirty = this._angleDirty = this._forceDirty = this._zoneRadiusDirty = false;\n this._lifeTimeDirty = this._gravityDirty = this._colorDirty = this._sizeDirty = false;\n this._alphaDirty = this._flowDirty = this._textureDirty = this._tankDirty = false;\n this._additiveRenderingDirty = this._maxParticlesCountDirty = this._particleRotationSpeedDirty = false;\n this._renderer.update(this.getElapsedTime() / 1000.0);\n if (\n this.destroyWhenNoParticles &&\n this.getParticleCount() === 0 &&\n this._renderer.hasStarted() &&\n !this._isEmissionPaused &&\n this._renderer._mayHaveEndedEmission()\n ) {\n this.deleteFromScene(instanceContainer);\n }\n if (\n this.jumpForwardInTimeOnCreation > 0 &&\n this._jumpForwardInTimeCompleted === false\n ) {\n this._renderer.update(this.jumpForwardInTimeOnCreation);\n this._jumpForwardInTimeCompleted = true;\n }\n }\n\n onDestroyed(): void {\n this._renderer.destroy();\n super.onDestroyed();\n }\n\n getEmitterForceMin(): number {\n return this.forceMin;\n }\n\n setEmitterForceMin(force: float): void {\n if (force < 0) {\n force = 0;\n }\n if (this.forceMin !== force) {\n this._forceDirty = true;\n this.forceMin = force;\n }\n }\n\n getEmitterForceMax(): number {\n return this.forceMax;\n }\n\n setEmitterForceMax(force: float): void {\n if (force < 0) {\n force = 0;\n }\n if (this.forceMax !== force) {\n this._forceDirty = true;\n this.forceMax = force;\n }\n }\n\n setParticleRotationMinSpeed(speed: number): void {\n if (this.particleRotationMinSpeed !== speed) {\n this._particleRotationSpeedDirty = true;\n this.particleRotationMinSpeed = speed;\n }\n }\n\n getParticleRotationMinSpeed(): number {\n return this.particleRotationMinSpeed;\n }\n\n setParticleRotationMaxSpeed(speed: number): void {\n if (this.particleRotationMaxSpeed !== speed) {\n this._particleRotationSpeedDirty = true;\n this.particleRotationMaxSpeed = speed;\n }\n }\n\n getParticleRotationMaxSpeed(): number {\n return this.particleRotationMaxSpeed;\n }\n\n setMaxParticlesCount(count: number): void {\n if (this.maxParticlesCount !== count) {\n this._maxParticlesCountDirty = true;\n this.maxParticlesCount = count;\n }\n }\n\n getMaxParticlesCount(): number {\n return this.maxParticlesCount;\n }\n\n setAdditiveRendering(enabled: boolean) {\n if (this.additiveRendering !== enabled) {\n this._additiveRenderingDirty = true;\n this.additiveRendering = enabled;\n }\n }\n\n getAdditiveRendering(): boolean {\n return this.additiveRendering;\n }\n\n /**\n * @deprecated Prefer using getAngle\n */\n getEmitterAngle(): float {\n return (this.angleA + this.angleB) / 2.0;\n }\n\n /**\n * @deprecated Prefer using setAngle\n */\n setEmitterAngle(angle: float): void {\n const oldAngle = this.getEmitterAngle();\n if (angle !== oldAngle) {\n this._angleDirty = true;\n this.angleA += angle - oldAngle;\n this.angleB += angle - oldAngle;\n }\n }\n\n /**\n * @deprecated This function returns data that is not used.\n */\n getEmitterAngleA(): float {\n return this.angleA;\n }\n\n /**\n * @deprecated This function sets data that is not used.\n */\n setEmitterAngleA(angle: float): void {\n if (this.angleA !== angle) {\n this._angleDirty = true;\n this.angleA = angle;\n }\n }\n\n getEmitterAngleB(): float {\n return this.angleB;\n }\n\n setEmitterAngleB(angle: float): void {\n if (this.angleB !== angle) {\n this._angleDirty = true;\n this.angleB = angle;\n }\n }\n\n getConeSprayAngle(): float {\n return this.getEmitterAngleB();\n }\n\n setConeSprayAngle(angle: float): void {\n this.setEmitterAngleB(angle);\n }\n\n getZoneRadius(): float {\n return this.zoneRadius;\n }\n\n setZoneRadius(radius: float): void {\n if (radius < 0) {\n radius = 0;\n }\n if (this.zoneRadius !== radius && radius > 0) {\n this._zoneRadiusDirty = true;\n this.zoneRadius = radius;\n }\n }\n\n getParticleLifeTimeMin(): float {\n return this.lifeTimeMin;\n }\n\n setParticleLifeTimeMin(lifeTime: float): void {\n if (lifeTime < 0) {\n lifeTime = 0;\n }\n if (this.lifeTimeMin !== lifeTime) {\n this._lifeTimeDirty = true;\n this.lifeTimeMin = lifeTime;\n }\n }\n\n getParticleLifeTimeMax(): float {\n return this.lifeTimeMax;\n }\n\n setParticleLifeTimeMax(lifeTime: float): void {\n if (lifeTime < 0) {\n lifeTime = 0;\n }\n if (this.lifeTimeMax !== lifeTime) {\n this._lifeTimeDirty = true;\n this.lifeTimeMax = lifeTime;\n }\n }\n\n getParticleGravityX(): float {\n return this.gravityX;\n }\n\n setParticleGravityX(x: float): void {\n if (this.gravityX !== x) {\n this._gravityDirty = true;\n this.gravityX = x;\n }\n }\n\n getParticleGravityY(): float {\n return this.gravityY;\n }\n\n setParticleGravityY(y: float): void {\n if (this.gravityY !== y) {\n this._gravityDirty = true;\n this.gravityY = y;\n }\n }\n\n getParticleGravityAngle(): float {\n return (Math.atan2(this.gravityY, this.gravityX) * 180.0) / Math.PI;\n }\n\n setParticleGravityAngle(angle: float): void {\n const oldAngle = this.getParticleGravityAngle();\n if (oldAngle !== angle) {\n this._gravityDirty = true;\n const length = this.getParticleGravityLength();\n this.gravityX = length * Math.cos((angle * Math.PI) / 180.0);\n this.gravityY = length * Math.sin((angle * Math.PI) / 180.0);\n }\n }\n\n getParticleGravityLength(): float {\n return Math.sqrt(\n this.gravityX * this.gravityX + this.gravityY * this.gravityY\n );\n }\n\n setParticleGravityLength(length: float): void {\n if (length < 0) {\n length = 0;\n }\n const oldLength = this.getParticleGravityLength();\n if (oldLength !== length) {\n this._gravityDirty = true;\n this.gravityX *= length / oldLength;\n this.gravityY *= length / oldLength;\n }\n }\n\n getParticleRed1(): number {\n return this.colorR1;\n }\n\n setParticleRed1(red: number): void {\n if (red < 0) {\n red = 0;\n }\n if (red > 255) {\n red = 255;\n }\n if (this.colorR1 !== red) {\n this._colorDirty = true;\n this.colorR1 = red;\n }\n }\n\n getParticleRed2(): number {\n return this.colorR2;\n }\n\n setParticleRed2(red: number): void {\n if (red < 0) {\n red = 0;\n }\n if (red > 255) {\n red = 255;\n }\n if (this.colorR2 !== red) {\n this._colorDirty = true;\n this.colorR2 = red;\n }\n }\n\n getParticleGreen1(): number {\n return this.colorG1;\n }\n\n setParticleGreen1(green: number): void {\n if (green < 0) {\n green = 0;\n }\n if (green > 255) {\n green = 255;\n }\n if (this.colorG1 !== green) {\n this._colorDirty = true;\n this.colorG1 = green;\n }\n }\n\n getParticleGreen2(): number {\n return this.colorG2;\n }\n\n setParticleGreen2(green: number): void {\n if (green < 0) {\n green = 0;\n }\n if (green > 255) {\n green = 255;\n }\n if (this.colorG2 !== green) {\n this._colorDirty = true;\n this.colorG2 = green;\n }\n }\n\n getParticleBlue1(): number {\n return this.colorB1;\n }\n\n setParticleBlue1(blue: number): void {\n if (blue < 0) {\n blue = 0;\n }\n if (blue > 255) {\n blue = 255;\n }\n if (this.colorB1 !== blue) {\n this._colorDirty = true;\n this.colorB1 = blue;\n }\n }\n\n getParticleBlue2(): number {\n return this.colorB2;\n }\n\n setParticleBlue2(blue: number): void {\n if (blue < 0) {\n blue = 0;\n }\n if (blue > 255) {\n blue = 255;\n }\n if (this.colorB2 !== blue) {\n this._colorDirty = true;\n this.colorB2 = blue;\n }\n }\n\n setParticleColor1(rgbColor: string): void {\n const colors = rgbColor.split(';');\n if (colors.length < 3) {\n return;\n }\n this.setParticleRed1(parseInt(colors[0], 10));\n this.setParticleGreen1(parseInt(colors[1], 10));\n this.setParticleBlue1(parseInt(colors[2], 10));\n }\n\n setParticleColor2(rgbColor: string): void {\n const colors = rgbColor.split(';');\n if (colors.length < 3) {\n return;\n }\n this.setParticleRed2(parseInt(colors[0], 10));\n this.setParticleGreen2(parseInt(colors[1], 10));\n this.setParticleBlue2(parseInt(colors[2], 10));\n }\n\n getParticleSize1(): float {\n return this.size1;\n }\n\n setParticleSize1(size: float): void {\n if (size < 0) {\n size = 0;\n }\n if (this.size1 !== size) {\n this._sizeDirty = true;\n this.size1 = size;\n }\n }\n\n getParticleSize2(): float {\n return this.size2;\n }\n\n setParticleSize2(size: float): void {\n if (this.size2 !== size) {\n this._sizeDirty = true;\n this.size2 = size;\n }\n }\n\n getParticleAlpha1(): number {\n return this.alpha1;\n }\n\n setParticleAlpha1(alpha: number): void {\n if (this.alpha1 !== alpha) {\n this._alphaDirty = true;\n this.alpha1 = alpha;\n }\n }\n\n getParticleAlpha2(): number {\n return this.alpha2;\n }\n\n setParticleAlpha2(alpha: number): void {\n if (this.alpha2 !== alpha) {\n this._alphaDirty = true;\n this.alpha2 = alpha;\n }\n }\n\n startEmission(): void {\n this._isEmissionPaused = false;\n this._renderer.start();\n }\n\n stopEmission(): void {\n this._isEmissionPaused = true;\n this._renderer.stop();\n }\n\n isEmitting(): boolean {\n return this._renderer.emitter.emit;\n }\n\n noMoreParticles(): boolean {\n return !this.isEmitting();\n }\n\n recreateParticleSystem(): void {\n this._renderer.recreate();\n }\n\n getFlow(): number {\n return this.flow;\n }\n\n setFlow(flow: number): void {\n if (this.flow !== flow) {\n this.flow = flow;\n this._flowDirty = true;\n }\n }\n\n getParticleCount(): number {\n return this._renderer.getParticleCount();\n }\n\n getTank(): number {\n return this.tank;\n }\n\n setTank(tank: number): void {\n this.tank = tank;\n this._tankDirty = true;\n }\n\n getTexture(): string {\n return this.texture;\n }\n\n setTexture(\n texture: string,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): void {\n if (this.texture !== texture) {\n if (this._renderer.isTextureNameValid(texture, instanceContainer)) {\n this.texture = texture;\n this._textureDirty = true;\n }\n }\n }\n\n jumpEmitterForwardInTime(timeSkipped: number): void {\n this._renderer.update(timeSkipped);\n }\n }\n gdjs.registerObject(\n 'ParticleSystem::ParticleEmitter',\n gdjs.ParticleEmitterObject\n );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * GDevelop - Particle System Extension\n * Copyright (c) 2010-2016 Florian Rival (Florian.Rival@gmail.com)\n * This project is released under the MIT License.\n */\n\nnamespace gdjs {\n export type ParticleEmitterObjectDataType = {\n /**\n * @deprecated Data not used\n */\n emitterAngleA: number;\n emitterForceMin: number;\n /**\n * Cone spray angle (degrees)\n */\n emitterAngleB: number;\n zoneRadius: number;\n emitterForceMax: number;\n particleLifeTimeMax: number;\n particleLifeTimeMin: number;\n particleGravityY: number;\n particleGravityX: number;\n particleColor2: string;\n particleColor1: string;\n particleSize2: number;\n particleSize1: number;\n /**\n * Particle max rotation speed (degrees/second)\n */\n particleAngle2: number;\n /**\n * Particle min rotation speed (degrees/second)\n */\n particleAngle1: number;\n particleAlpha1: number;\n rendererType: string;\n particleAlpha2: number;\n rendererParam2: number;\n rendererParam1: number;\n particleSizeRandomness1: number;\n particleSizeRandomness2: number;\n maxParticleNb: number;\n additive: boolean;\n /** Resource name for image in particle */\n textureParticleName: string;\n tank: number;\n flow: number;\n /** Destroy the object when there is no particles? */\n destroyWhenNoParticles: boolean;\n jumpForwardInTimeOnCreation: number;\n };\n\n export type ParticleEmitterObjectData = ObjectData &\n ParticleEmitterObjectDataType;\n\n export type ParticleEmitterObjectNetworkSyncDataType = {\n // Technically, all attributes can change at runtime, so we sync as many as possible.\n // TODO: ensure we only send props that change to optimize the sync.\n // dirty attributes are not synced, they are defined by the update method if the value has changed.\n // Particle Rotation Speed\n prms: number;\n prmx: number;\n // Max Particles Count\n mpc: number;\n // Additive Rendering\n addr: boolean;\n // Angle\n angb: number;\n // Force\n formin: number;\n formax: number;\n // Zone Radius\n zr: number;\n // Life Time\n ltmin: number;\n ltmax: number;\n // Gravity\n gravx: number;\n gravy: number;\n // Color\n color1: number;\n color2: number;\n // Size\n size1: number;\n size2: number;\n // Alpha\n alp1: number;\n alp2: number;\n // Flow\n flow: number;\n // Tank\n tank: number;\n // Texture\n text: string;\n // Pause\n paused: boolean;\n };\n\n export type ParticleEmitterObjectNetworkSyncData = ObjectNetworkSyncData &\n ParticleEmitterObjectNetworkSyncDataType;\n\n /**\n * Displays particles.\n */\n export class ParticleEmitterObject extends gdjs.RuntimeObject {\n /**\n * @deprecated Data not used\n */\n angleA: number;\n angleB: number;\n forceMin: number;\n forceMax: float;\n zoneRadius: number;\n lifeTimeMin: number;\n lifeTimeMax: float;\n gravityX: number;\n gravityY: number;\n color1: number;\n color2: number;\n size1: number;\n size2: number;\n alpha1: number;\n alpha2: number;\n rendererType: string;\n rendererParam1: number;\n rendererParam2: number;\n texture: string;\n flow: number;\n tank: number;\n destroyWhenNoParticles: boolean;\n particleRotationMinSpeed: number;\n particleRotationMaxSpeed: number;\n maxParticlesCount: number;\n additiveRendering: boolean;\n jumpForwardInTimeOnCreation: number;\n _jumpForwardInTimeCompleted: boolean = false;\n _posDirty: boolean = true;\n _angleDirty: boolean = true;\n _forceDirty: boolean = true;\n _zoneRadiusDirty: boolean = true;\n _lifeTimeDirty: boolean = true;\n _gravityDirty: boolean = true;\n _colorDirty: boolean = true;\n _sizeDirty: boolean = true;\n _alphaDirty: boolean = true;\n _flowDirty: boolean = true;\n _tankDirty: boolean = true;\n _particleRotationSpeedDirty: boolean = true;\n _maxParticlesCountDirty: boolean = true;\n _additiveRenderingDirty: boolean = true;\n // Don't mark texture as dirty if not using one.\n _textureDirty: boolean;\n /**\n * `true` only when the emission is paused by events.\n * It allows to tell the end of emission apart from it.\n */\n _isEmissionPaused: boolean = false;\n\n // @ts-ignore\n _renderer: gdjs.ParticleEmitterObjectRenderer;\n\n /**\n * @param instanceContainer the container the object belongs to\n * @param particleObjectData The initial properties of the object\n */\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n particleObjectData: ParticleEmitterObjectData\n ) {\n super(instanceContainer, particleObjectData);\n this._renderer = new gdjs.ParticleEmitterObjectRenderer(\n instanceContainer,\n this,\n particleObjectData\n );\n this.angleA = particleObjectData.emitterAngleA;\n this.angleB = particleObjectData.emitterAngleB;\n this.forceMin = particleObjectData.emitterForceMin;\n this.forceMax = particleObjectData.emitterForceMax;\n this.zoneRadius = particleObjectData.zoneRadius;\n this.lifeTimeMin = particleObjectData.particleLifeTimeMin;\n this.lifeTimeMax = particleObjectData.particleLifeTimeMax;\n this.gravityX = particleObjectData.particleGravityX;\n this.gravityY = particleObjectData.particleGravityY;\n this.color1 = gdjs.rgbOrHexStringToNumber(\n particleObjectData.particleColor1\n );\n this.color2 = gdjs.rgbOrHexStringToNumber(\n particleObjectData.particleColor2\n );\n this.size1 = particleObjectData.particleSize1;\n this.size2 = particleObjectData.particleSize2;\n this.alpha1 = particleObjectData.particleAlpha1;\n this.alpha2 = particleObjectData.particleAlpha2;\n this.rendererType = particleObjectData.rendererType;\n this.rendererParam1 = particleObjectData.rendererParam1;\n this.rendererParam2 = particleObjectData.rendererParam2;\n this.texture = particleObjectData.textureParticleName;\n this.flow = particleObjectData.flow;\n this.tank = particleObjectData.tank;\n this.destroyWhenNoParticles = particleObjectData.destroyWhenNoParticles;\n this.particleRotationMinSpeed = particleObjectData.particleAngle1;\n this.particleRotationMaxSpeed = particleObjectData.particleAngle2;\n this.maxParticlesCount = particleObjectData.maxParticleNb;\n this.additiveRendering = particleObjectData.additive;\n this.jumpForwardInTimeOnCreation =\n particleObjectData.jumpForwardInTimeOnCreation;\n this._textureDirty = this.texture !== '';\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n setX(x: number): void {\n if (this.x !== x) {\n this._posDirty = true;\n }\n super.setX(x);\n }\n\n setY(y: number): void {\n if (this.y !== y) {\n this._posDirty = true;\n }\n super.setY(y);\n }\n\n setAngle(angle): void {\n if (this.angle !== angle) {\n this._angleDirty = true;\n }\n super.setAngle(angle);\n }\n\n getRendererObject() {\n return this._renderer.getRendererObject();\n }\n\n updateFromObjectData(\n oldObjectData: ParticleEmitterObjectData,\n newObjectData: ParticleEmitterObjectData\n ): boolean {\n if (oldObjectData.emitterAngleA !== newObjectData.emitterAngleA) {\n this.setEmitterAngleA(newObjectData.emitterAngleA);\n }\n if (oldObjectData.emitterAngleB !== newObjectData.emitterAngleB) {\n this.setEmitterAngleB(newObjectData.emitterAngleB);\n }\n if (oldObjectData.emitterForceMin !== newObjectData.emitterForceMin) {\n this.setEmitterForceMin(newObjectData.emitterForceMin);\n }\n if (oldObjectData.particleAngle1 !== newObjectData.particleAngle1) {\n this.setParticleRotationMinSpeed(newObjectData.particleAngle1);\n }\n if (oldObjectData.particleAngle2 !== newObjectData.particleAngle2) {\n this.setParticleRotationMaxSpeed(newObjectData.particleAngle2);\n }\n if (oldObjectData.maxParticleNb !== newObjectData.maxParticleNb) {\n this.setMaxParticlesCount(newObjectData.maxParticleNb);\n }\n if (oldObjectData.additive !== newObjectData.additive) {\n this.setAdditiveRendering(newObjectData.additive);\n }\n if (oldObjectData.emitterForceMax !== newObjectData.emitterForceMax) {\n this.setEmitterForceMax(newObjectData.emitterForceMax);\n }\n if (oldObjectData.zoneRadius !== newObjectData.zoneRadius) {\n this.setZoneRadius(newObjectData.zoneRadius);\n }\n if (\n oldObjectData.particleLifeTimeMin !== newObjectData.particleLifeTimeMin\n ) {\n this.setParticleLifeTimeMin(newObjectData.particleLifeTimeMin);\n }\n if (\n oldObjectData.particleLifeTimeMax !== newObjectData.particleLifeTimeMax\n ) {\n this.setParticleLifeTimeMax(newObjectData.particleLifeTimeMax);\n }\n if (oldObjectData.particleGravityX !== newObjectData.particleGravityX) {\n this.setParticleGravityX(newObjectData.particleGravityX);\n }\n if (oldObjectData.particleGravityY !== newObjectData.particleGravityY) {\n this.setParticleGravityY(newObjectData.particleGravityY);\n }\n if (oldObjectData.particleColor1 !== newObjectData.particleColor1) {\n this.setParticleColor1(newObjectData.particleColor1);\n }\n if (oldObjectData.particleColor2 !== newObjectData.particleColor2) {\n this.setParticleColor2(newObjectData.particleColor2);\n }\n if (oldObjectData.particleSize1 !== newObjectData.particleSize1) {\n this.setParticleSize1(newObjectData.particleSize1);\n }\n if (oldObjectData.particleSize2 !== newObjectData.particleSize2) {\n this.setParticleSize2(newObjectData.particleSize2);\n }\n if (oldObjectData.particleAlpha1 !== newObjectData.particleAlpha1) {\n this.setParticleAlpha1(newObjectData.particleAlpha1);\n }\n if (oldObjectData.particleAlpha2 !== newObjectData.particleAlpha2) {\n this.setParticleAlpha2(newObjectData.particleAlpha2);\n }\n if (\n oldObjectData.textureParticleName !== newObjectData.textureParticleName\n ) {\n this.setTexture(\n newObjectData.textureParticleName,\n this.getRuntimeScene()\n );\n }\n if (oldObjectData.flow !== newObjectData.flow) {\n this.setFlow(newObjectData.flow);\n }\n if (oldObjectData.tank !== newObjectData.tank) {\n this.setTank(newObjectData.tank);\n }\n if (\n oldObjectData.destroyWhenNoParticles !==\n newObjectData.destroyWhenNoParticles\n ) {\n this.destroyWhenNoParticles = newObjectData.destroyWhenNoParticles;\n }\n if (\n oldObjectData.particleSizeRandomness1 !==\n newObjectData.particleSizeRandomness1 ||\n oldObjectData.particleSizeRandomness2 !==\n newObjectData.particleSizeRandomness2 ||\n oldObjectData.particleAngle1 !== newObjectData.particleAngle1 ||\n oldObjectData.particleAngle2 !== newObjectData.particleAngle2 ||\n oldObjectData.maxParticleNb !== newObjectData.maxParticleNb ||\n oldObjectData.additive !== newObjectData.additive ||\n oldObjectData.rendererType !== newObjectData.rendererType ||\n oldObjectData.rendererParam1 !== newObjectData.rendererParam1 ||\n oldObjectData.rendererParam2 !== newObjectData.rendererParam2\n ) {\n // Destroy the renderer, ensure it's removed from the layer.\n const layer = this.getInstanceContainer().getLayer(this.layer);\n layer\n .getRenderer()\n .removeRendererObject(this._renderer.getRendererObject());\n this._renderer.destroy();\n\n // and recreate the renderer, which will add itself to the layer.\n this._renderer = new gdjs.ParticleEmitterObjectRenderer(\n this.getInstanceContainer(),\n this,\n newObjectData\n );\n\n // Consider every state dirty as the renderer was just re-created, so it needs\n // to be repositioned, angle updated, etc...\n this._posDirty = this._angleDirty = this._forceDirty = this._zoneRadiusDirty = true;\n this._lifeTimeDirty = this._gravityDirty = this._colorDirty = this._sizeDirty = true;\n this._alphaDirty = this._flowDirty = this._tankDirty = this._textureDirty = true;\n }\n return true;\n }\n\n getNetworkSyncData(): ParticleEmitterObjectNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n prms: this.particleRotationMinSpeed,\n prmx: this.particleRotationMaxSpeed,\n mpc: this.maxParticlesCount,\n addr: this.additiveRendering,\n angb: this.angleB,\n formin: this.forceMin,\n formax: this.forceMax,\n zr: this.zoneRadius,\n ltmin: this.lifeTimeMin,\n ltmax: this.lifeTimeMax,\n gravx: this.gravityX,\n gravy: this.gravityY,\n color1: this.color1,\n color2: this.color2,\n size1: this.size1,\n size2: this.size2,\n alp1: this.alpha1,\n alp2: this.alpha2,\n flow: this.flow,\n tank: this.tank,\n text: this.texture,\n paused: this._isEmissionPaused,\n };\n }\n\n updateFromNetworkSyncData(\n syncData: ParticleEmitterObjectNetworkSyncData\n ): void {\n super.updateFromNetworkSyncData(syncData);\n if (syncData.x !== undefined) {\n this.setX(syncData.x);\n }\n if (syncData.y !== undefined) {\n this.setY(syncData.y);\n }\n if (syncData.a !== undefined) {\n this.setAngle(syncData.a);\n }\n if (syncData.prms !== undefined) {\n this.setParticleRotationMinSpeed(syncData.prms);\n }\n if (syncData.prmx !== undefined) {\n this.setParticleRotationMaxSpeed(syncData.prmx);\n }\n if (syncData.mpc !== undefined) {\n this.setMaxParticlesCount(syncData.mpc);\n }\n if (syncData.addr !== undefined) {\n this.setAdditiveRendering(syncData.addr);\n }\n if (syncData.angb !== undefined) {\n this.setEmitterAngleB(syncData.angb);\n }\n if (syncData.formin !== undefined) {\n this.setEmitterForceMin(syncData.formin);\n }\n if (syncData.formax !== undefined) {\n this.setEmitterForceMax(syncData.formax);\n }\n if (syncData.zr !== undefined) {\n this.setZoneRadius(syncData.zr);\n }\n if (syncData.ltmin !== undefined) {\n this.setParticleLifeTimeMin(syncData.ltmin);\n }\n if (syncData.ltmax !== undefined) {\n this.setParticleLifeTimeMax(syncData.ltmax);\n }\n if (syncData.gravx !== undefined) {\n this.setParticleGravityX(syncData.gravx);\n }\n if (syncData.gravy !== undefined) {\n this.setParticleGravityY(syncData.gravy);\n }\n if (syncData.color1 !== undefined) {\n this.setParticleColor1AsNumber(syncData.color1);\n }\n if (syncData.color2 !== undefined) {\n this.setParticleColor2AsNumber(syncData.color2);\n }\n if (syncData.size1 !== undefined) {\n this.setParticleSize1(syncData.size1);\n }\n if (syncData.size2 !== undefined) {\n this.setParticleSize2(syncData.size2);\n }\n if (syncData.alp1 !== undefined) {\n this.setParticleAlpha1(syncData.alp1);\n }\n if (syncData.alp2 !== undefined) {\n this.setParticleAlpha2(syncData.alp2);\n }\n if (syncData.flow !== undefined) {\n this.setFlow(syncData.flow);\n }\n if (syncData.tank !== undefined) {\n this.setTank(syncData.tank);\n }\n if (syncData.text !== undefined) {\n this.setTexture(syncData.text, this.getRuntimeScene());\n }\n if (syncData.paused !== undefined) {\n if (syncData.paused) {\n this.stopEmission();\n } else {\n this.startEmission();\n }\n }\n }\n\n update(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n if (this._posDirty) {\n this._renderer.setPosition(this.getX(), this.getY());\n }\n if (this._particleRotationSpeedDirty) {\n this._renderer.setParticleRotationSpeed(\n this.particleRotationMinSpeed,\n this.particleRotationMaxSpeed\n );\n }\n if (this._maxParticlesCountDirty) {\n this._renderer.setMaxParticlesCount(this.maxParticlesCount);\n }\n if (this._additiveRenderingDirty) {\n this._renderer.setAdditiveRendering(this.additiveRendering);\n }\n if (this._angleDirty) {\n const angle = this.getAngle();\n this._renderer.setAngle(\n angle - this.angleB / 2.0,\n angle + this.angleB / 2.0\n );\n }\n if (this._forceDirty) {\n this._renderer.setForce(this.forceMin, this.forceMax);\n }\n if (this._zoneRadiusDirty) {\n this._renderer.setZoneRadius(this.zoneRadius);\n }\n if (this._lifeTimeDirty) {\n this._renderer.setLifeTime(this.lifeTimeMin, this.lifeTimeMax);\n }\n if (this._gravityDirty) {\n this._renderer.setGravity(this.gravityX, this.gravityY);\n }\n if (this._colorDirty) {\n this._renderer.setColor(this.color1, this.color2);\n }\n if (this._sizeDirty) {\n this._renderer.setSize(this.size1, this.size2);\n }\n if (this._alphaDirty) {\n this._renderer.setAlpha(this.alpha1, this.alpha2);\n }\n if (this._flowDirty || this._tankDirty) {\n this._renderer.resetEmission(this.flow, this.tank);\n }\n if (this._textureDirty) {\n this._renderer.setTextureName(this.texture, instanceContainer);\n }\n this._posDirty = this._angleDirty = this._forceDirty = this._zoneRadiusDirty = false;\n this._lifeTimeDirty = this._gravityDirty = this._colorDirty = this._sizeDirty = false;\n this._alphaDirty = this._flowDirty = this._textureDirty = this._tankDirty = false;\n this._additiveRenderingDirty = this._maxParticlesCountDirty = this._particleRotationSpeedDirty = false;\n this._renderer.update(this.getElapsedTime() / 1000.0);\n if (\n this.destroyWhenNoParticles &&\n this.getParticleCount() === 0 &&\n this._renderer.hasStarted() &&\n !this._isEmissionPaused &&\n this._renderer._mayHaveEndedEmission()\n ) {\n this.deleteFromScene(instanceContainer);\n }\n if (\n this.jumpForwardInTimeOnCreation > 0 &&\n this._jumpForwardInTimeCompleted === false\n ) {\n this._renderer.update(this.jumpForwardInTimeOnCreation);\n this._jumpForwardInTimeCompleted = true;\n }\n }\n\n onDestroyed(): void {\n this._renderer.destroy();\n super.onDestroyed();\n }\n\n getEmitterForceMin(): number {\n return this.forceMin;\n }\n\n setEmitterForceMin(force: float): void {\n if (force < 0) {\n force = 0;\n }\n if (this.forceMin !== force) {\n this._forceDirty = true;\n this.forceMin = force;\n }\n }\n\n getEmitterForceMax(): number {\n return this.forceMax;\n }\n\n setEmitterForceMax(force: float): void {\n if (force < 0) {\n force = 0;\n }\n if (this.forceMax !== force) {\n this._forceDirty = true;\n this.forceMax = force;\n }\n }\n\n setParticleRotationMinSpeed(speed: number): void {\n if (this.particleRotationMinSpeed !== speed) {\n this._particleRotationSpeedDirty = true;\n this.particleRotationMinSpeed = speed;\n }\n }\n\n getParticleRotationMinSpeed(): number {\n return this.particleRotationMinSpeed;\n }\n\n setParticleRotationMaxSpeed(speed: number): void {\n if (this.particleRotationMaxSpeed !== speed) {\n this._particleRotationSpeedDirty = true;\n this.particleRotationMaxSpeed = speed;\n }\n }\n\n getParticleRotationMaxSpeed(): number {\n return this.particleRotationMaxSpeed;\n }\n\n setMaxParticlesCount(count: number): void {\n if (this.maxParticlesCount !== count) {\n this._maxParticlesCountDirty = true;\n this.maxParticlesCount = count;\n }\n }\n\n getMaxParticlesCount(): number {\n return this.maxParticlesCount;\n }\n\n setAdditiveRendering(enabled: boolean) {\n if (this.additiveRendering !== enabled) {\n this._additiveRenderingDirty = true;\n this.additiveRendering = enabled;\n }\n }\n\n getAdditiveRendering(): boolean {\n return this.additiveRendering;\n }\n\n /**\n * @deprecated Prefer using getAngle\n */\n getEmitterAngle(): float {\n return (this.angleA + this.angleB) / 2.0;\n }\n\n /**\n * @deprecated Prefer using setAngle\n */\n setEmitterAngle(angle: float): void {\n const oldAngle = this.getEmitterAngle();\n if (angle !== oldAngle) {\n this._angleDirty = true;\n this.angleA += angle - oldAngle;\n this.angleB += angle - oldAngle;\n }\n }\n\n /**\n * @deprecated This function returns data that is not used.\n */\n getEmitterAngleA(): float {\n return this.angleA;\n }\n\n /**\n * @deprecated This function sets data that is not used.\n */\n setEmitterAngleA(angle: float): void {\n if (this.angleA !== angle) {\n this._angleDirty = true;\n this.angleA = angle;\n }\n }\n\n getEmitterAngleB(): float {\n return this.angleB;\n }\n\n setEmitterAngleB(angle: float): void {\n if (this.angleB !== angle) {\n this._angleDirty = true;\n this.angleB = angle;\n }\n }\n\n getConeSprayAngle(): float {\n return this.getEmitterAngleB();\n }\n\n setConeSprayAngle(angle: float): void {\n this.setEmitterAngleB(angle);\n }\n\n getZoneRadius(): float {\n return this.zoneRadius;\n }\n\n setZoneRadius(radius: float): void {\n if (radius < 0) {\n radius = 0;\n }\n if (this.zoneRadius !== radius && radius > 0) {\n this._zoneRadiusDirty = true;\n this.zoneRadius = radius;\n }\n }\n\n getParticleLifeTimeMin(): float {\n return this.lifeTimeMin;\n }\n\n setParticleLifeTimeMin(lifeTime: float): void {\n if (lifeTime < 0) {\n lifeTime = 0;\n }\n if (this.lifeTimeMin !== lifeTime) {\n this._lifeTimeDirty = true;\n this.lifeTimeMin = lifeTime;\n }\n }\n\n getParticleLifeTimeMax(): float {\n return this.lifeTimeMax;\n }\n\n setParticleLifeTimeMax(lifeTime: float): void {\n if (lifeTime < 0) {\n lifeTime = 0;\n }\n if (this.lifeTimeMax !== lifeTime) {\n this._lifeTimeDirty = true;\n this.lifeTimeMax = lifeTime;\n }\n }\n\n getParticleGravityX(): float {\n return this.gravityX;\n }\n\n setParticleGravityX(x: float): void {\n if (this.gravityX !== x) {\n this._gravityDirty = true;\n this.gravityX = x;\n }\n }\n\n getParticleGravityY(): float {\n return this.gravityY;\n }\n\n setParticleGravityY(y: float): void {\n if (this.gravityY !== y) {\n this._gravityDirty = true;\n this.gravityY = y;\n }\n }\n\n getParticleGravityAngle(): float {\n return (Math.atan2(this.gravityY, this.gravityX) * 180.0) / Math.PI;\n }\n\n setParticleGravityAngle(angle: float): void {\n const oldAngle = this.getParticleGravityAngle();\n if (oldAngle !== angle) {\n this._gravityDirty = true;\n const length = this.getParticleGravityLength();\n this.gravityX = length * Math.cos((angle * Math.PI) / 180.0);\n this.gravityY = length * Math.sin((angle * Math.PI) / 180.0);\n }\n }\n\n getParticleGravityLength(): float {\n return Math.sqrt(\n this.gravityX * this.gravityX + this.gravityY * this.gravityY\n );\n }\n\n setParticleGravityLength(length: float): void {\n if (length < 0) {\n length = 0;\n }\n const oldLength = this.getParticleGravityLength();\n if (oldLength !== length) {\n this._gravityDirty = true;\n this.gravityX *= length / oldLength;\n this.gravityY *= length / oldLength;\n }\n }\n\n getParticleRed1(): number {\n return gdjs.hexNumberToRGBArray(this.color1)[0];\n }\n\n setParticleRed1(red: number): void {\n if (red < 0) {\n red = 0;\n }\n if (red > 255) {\n red = 255;\n }\n const existingColor = gdjs.hexNumberToRGBArray(this.color1);\n this.setParticleColor1AsNumber(\n gdjs.rgbToHexNumber(red, existingColor[1], existingColor[2])\n );\n }\n\n getParticleRed2(): number {\n return gdjs.hexNumberToRGBArray(this.color2)[0];\n }\n\n setParticleRed2(red: number): void {\n if (red < 0) {\n red = 0;\n }\n if (red > 255) {\n red = 255;\n }\n const existingColor = gdjs.hexNumberToRGBArray(this.color2);\n this.setParticleColor2AsNumber(\n gdjs.rgbToHexNumber(red, existingColor[1], existingColor[2])\n );\n }\n\n getParticleGreen1(): number {\n return gdjs.hexNumberToRGBArray(this.color1)[1];\n }\n\n setParticleGreen1(green: number): void {\n if (green < 0) {\n green = 0;\n }\n if (green > 255) {\n green = 255;\n }\n const existingColor = gdjs.hexNumberToRGBArray(this.color1);\n this.setParticleColor1AsNumber(\n gdjs.rgbToHexNumber(existingColor[0], green, existingColor[2])\n );\n }\n\n getParticleGreen2(): number {\n return gdjs.hexNumberToRGBArray(this.color2)[1];\n }\n\n setParticleGreen2(green: number): void {\n if (green < 0) {\n green = 0;\n }\n if (green > 255) {\n green = 255;\n }\n const existingColor = gdjs.hexNumberToRGBArray(this.color2);\n this.setParticleColor2AsNumber(\n gdjs.rgbToHexNumber(existingColor[0], green, existingColor[2])\n );\n }\n\n getParticleBlue1(): number {\n return gdjs.hexNumberToRGBArray(this.color1)[2];\n }\n\n setParticleBlue1(blue: number): void {\n if (blue < 0) {\n blue = 0;\n }\n if (blue > 255) {\n blue = 255;\n }\n const existingColor = gdjs.hexNumberToRGBArray(this.color1);\n this.setParticleColor1AsNumber(\n gdjs.rgbToHexNumber(existingColor[0], existingColor[1], blue)\n );\n }\n\n getParticleBlue2(): number {\n return gdjs.hexNumberToRGBArray(this.color2)[2];\n }\n\n setParticleBlue2(blue: number): void {\n if (blue < 0) {\n blue = 0;\n }\n if (blue > 255) {\n blue = 255;\n }\n const existingColor = gdjs.hexNumberToRGBArray(this.color2);\n this.setParticleColor2AsNumber(\n gdjs.rgbToHexNumber(existingColor[0], existingColor[1], blue)\n );\n }\n\n setParticleColor1AsNumber(color: number): void {\n this.color1 = color;\n this._colorDirty = true;\n }\n\n setParticleColor1(rgbOrHexColor: string): void {\n this.setParticleColor1AsNumber(\n gdjs.rgbOrHexStringToNumber(rgbOrHexColor)\n );\n }\n\n setParticleColor2AsNumber(color: number): void {\n this.color2 = color;\n this._colorDirty = true;\n }\n\n setParticleColor2(rgbOrHexColor: string): void {\n this.setParticleColor2AsNumber(\n gdjs.rgbOrHexStringToNumber(rgbOrHexColor)\n );\n }\n\n getParticleSize1(): float {\n return this.size1;\n }\n\n setParticleSize1(size: float): void {\n if (size < 0) {\n size = 0;\n }\n if (this.size1 !== size) {\n this._sizeDirty = true;\n this.size1 = size;\n }\n }\n\n getParticleSize2(): float {\n return this.size2;\n }\n\n setParticleSize2(size: float): void {\n if (this.size2 !== size) {\n this._sizeDirty = true;\n this.size2 = size;\n }\n }\n\n getParticleAlpha1(): number {\n return this.alpha1;\n }\n\n setParticleAlpha1(alpha: number): void {\n if (this.alpha1 !== alpha) {\n this._alphaDirty = true;\n this.alpha1 = alpha;\n }\n }\n\n getParticleAlpha2(): number {\n return this.alpha2;\n }\n\n setParticleAlpha2(alpha: number): void {\n if (this.alpha2 !== alpha) {\n this._alphaDirty = true;\n this.alpha2 = alpha;\n }\n }\n\n startEmission(): void {\n this._isEmissionPaused = false;\n this._renderer.start();\n }\n\n stopEmission(): void {\n this._isEmissionPaused = true;\n this._renderer.stop();\n }\n\n isEmitting(): boolean {\n return this._renderer.emitter.emit;\n }\n\n noMoreParticles(): boolean {\n return !this.isEmitting();\n }\n\n recreateParticleSystem(): void {\n this._renderer.recreate();\n }\n\n getFlow(): number {\n return this.flow;\n }\n\n setFlow(flow: number): void {\n if (this.flow !== flow) {\n this.flow = flow;\n this._flowDirty = true;\n }\n }\n\n getParticleCount(): number {\n return this._renderer.getParticleCount();\n }\n\n getTank(): number {\n return this.tank;\n }\n\n setTank(tank: number): void {\n this.tank = tank;\n this._tankDirty = true;\n }\n\n getTexture(): string {\n return this.texture;\n }\n\n setTexture(\n texture: string,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): void {\n if (this.texture !== texture) {\n if (this._renderer.isTextureNameValid(texture, instanceContainer)) {\n this.texture = texture;\n this._textureDirty = true;\n }\n }\n }\n\n jumpEmitterForwardInTime(timeSkipped: number): void {\n this._renderer.update(timeSkipped);\n }\n }\n gdjs.registerObject(\n 'ParticleSystem::ParticleEmitter',\n gdjs.ParticleEmitterObject\n );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }