gdcore-tools 2.0.0-beta6 → 2.0.0-beta8

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 (139) 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/AdvancedWindow/electron-advancedwindowtools.js +1 -1
  25. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js.map +2 -2
  26. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
  27. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
  28. package/dist/Runtime/Extensions/BBText/JsExtension.js +45 -42
  29. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
  30. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
  31. package/dist/Runtime/Extensions/BitmapText/JsExtension.js +40 -49
  32. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
  33. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
  34. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js +1 -1
  35. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js.map +2 -2
  36. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js +1 -1
  37. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js.map +2 -2
  38. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js +1 -1
  39. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js.map +2 -2
  40. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js +1 -1
  41. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js.map +2 -2
  42. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js +1 -1
  43. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js.map +2 -2
  44. package/dist/Runtime/Extensions/ExampleJsExtension/JsExtension.js +18 -21
  45. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js +1 -1
  46. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js.map +2 -2
  47. package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +8 -2
  48. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js +1 -1
  49. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js.map +2 -2
  50. package/dist/Runtime/Extensions/Lighting/JsExtension.js +50 -38
  51. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js +1 -1
  52. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js.map +2 -2
  53. package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +15 -0
  54. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
  55. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
  56. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
  57. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
  58. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
  59. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js +1 -1
  60. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js.map +2 -2
  61. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
  62. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
  63. package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +76 -24
  64. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
  65. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
  66. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js +1 -1
  67. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js.map +2 -2
  68. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js +1 -1
  69. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
  70. package/dist/Runtime/Extensions/Spine/JsExtension.js +45 -36
  71. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
  72. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
  73. package/dist/Runtime/Extensions/TextInput/JsExtension.js +52 -55
  74. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
  75. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
  76. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
  77. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
  78. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js +1 -1
  79. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js.map +2 -2
  80. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js +1 -1
  81. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js.map +2 -2
  82. package/dist/Runtime/Extensions/TileMap/JsExtension.js +430 -261
  83. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js +1 -1
  84. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js.map +2 -2
  85. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
  86. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
  87. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
  88. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
  89. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
  90. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +1 -0
  91. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
  92. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
  93. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
  94. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js +1 -1
  95. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js.map +2 -2
  96. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js +1 -1
  97. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
  98. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
  99. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
  100. package/dist/Runtime/Extensions/Video/JsExtension.js +35 -44
  101. package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
  102. package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
  103. package/dist/Runtime/ResourceLoader.js +1 -1
  104. package/dist/Runtime/ResourceLoader.js.map +2 -2
  105. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  106. package/dist/Runtime/debugger-client/hot-reloader.js +2 -2
  107. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  108. package/dist/Runtime/events-tools/inputtools.js +1 -1
  109. package/dist/Runtime/events-tools/inputtools.js.map +2 -2
  110. package/dist/Runtime/events-tools/objecttools.js +1 -1
  111. package/dist/Runtime/events-tools/objecttools.js.map +2 -2
  112. package/dist/Runtime/gd.js +1 -1
  113. package/dist/Runtime/gd.js.map +2 -2
  114. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js +1 -1
  115. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js.map +2 -2
  116. package/dist/Runtime/inputmanager.js +1 -1
  117. package/dist/Runtime/inputmanager.js.map +2 -2
  118. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +1 -1
  119. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js.map +2 -2
  120. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js +1 -1
  121. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js.map +2 -2
  122. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js +1 -1
  123. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js.map +2 -2
  124. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
  125. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
  126. package/dist/Runtime/runtimegame.js +1 -1
  127. package/dist/Runtime/runtimegame.js.map +1 -1
  128. package/dist/Runtime/runtimeobject.js +1 -1
  129. package/dist/Runtime/runtimeobject.js.map +2 -2
  130. package/dist/Runtime/spriteruntimeobject.js +1 -1
  131. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  132. package/dist/Runtime/types/project-data.d.ts +5 -0
  133. package/dist/lib/libGD.cjs +1 -1
  134. package/dist/lib/libGD.d.cts +5 -0
  135. package/dist/lib/libGD.wasm +0 -0
  136. package/dist/loaders.cjs +3 -1
  137. package/dist/loaders.d.cts +2 -0
  138. package/gd.d.ts +74 -30
  139. package/package.json +3 -3
@@ -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
  }
@@ -136,7 +136,7 @@ module.exports = {
136
136
  }
137
137
 
138
138
  if (propertyName === 'linearDamping') {
139
- const newValueAsNumber = parseFloat(newValue);
139
+ const newValueAsNumber = Math.max(0, parseFloat(newValue));
140
140
  if (newValueAsNumber !== newValueAsNumber) return false;
141
141
  behaviorContent
142
142
  .getChild('linearDamping')
@@ -145,7 +145,7 @@ module.exports = {
145
145
  }
146
146
 
147
147
  if (propertyName === 'angularDamping') {
148
- const newValueAsNumber = parseFloat(newValue);
148
+ const newValueAsNumber = Math.max(0, parseFloat(newValue));
149
149
  if (newValueAsNumber !== newValueAsNumber) return false;
150
150
  behaviorContent
151
151
  .getChild('angularDamping')
@@ -185,7 +185,12 @@ module.exports = {
185
185
  .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
186
186
  .addExtraInfo('Static')
187
187
  .addExtraInfo('Dynamic')
188
- .addExtraInfo('Kinematic');
188
+ .addExtraInfo('Kinematic')
189
+ .setDescription(
190
+ _(
191
+ "A static object won't move (perfect for obstacles). Dynamic objects can move. Kinematic will move according to forces applied to it only (useful for characters or specific mechanisms)."
192
+ )
193
+ );
189
194
  behaviorProperties
190
195
  .getOrCreate('bullet')
191
196
  .setValue(
@@ -193,7 +198,14 @@ module.exports = {
193
198
  )
194
199
  .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
195
200
  .setType('Boolean')
196
- .setLabel('Bullet');
201
+ .setLabel(_('Considered as a bullet'))
202
+ .setDescription(
203
+ _(
204
+ 'Useful for fast moving objects which requires a more accurate collision detection.'
205
+ )
206
+ )
207
+ .setGroup(_('Physics body advanced settings'))
208
+ .setAdvanced(true);
197
209
  behaviorProperties
198
210
  .getOrCreate('fixedRotation')
199
211
  .setValue(
@@ -203,7 +215,13 @@ module.exports = {
203
215
  )
204
216
  .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
205
217
  .setType('Boolean')
206
- .setLabel('Fixed Rotation');
218
+ .setLabel('Fixed Rotation')
219
+ .setDescription(
220
+ _(
221
+ "If enabled, the object won't rotate and will stay at the same angle. Useful for characters for example."
222
+ )
223
+ )
224
+ .setGroup(_('Movement'));
207
225
  behaviorProperties
208
226
  .getOrCreate('canSleep')
209
227
  .setValue(
@@ -211,7 +229,14 @@ module.exports = {
211
229
  )
212
230
  .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
213
231
  .setType('Boolean')
214
- .setLabel('Can Sleep');
232
+ .setLabel(_('Can be put to sleep by the engine'))
233
+ .setDescription(
234
+ _(
235
+ "Allows the physics engine to stop computing interaction with the object when it's not touched. It's recommended to keep this on."
236
+ )
237
+ )
238
+ .setGroup(_('Physics body advanced settings'))
239
+ .setAdvanced(true);
215
240
  behaviorProperties
216
241
  .getOrCreate('shape')
217
242
  .setValue(behaviorContent.getChild('shape').getStringValue())
@@ -233,7 +258,8 @@ module.exports = {
233
258
  .setType('Number')
234
259
  .setMeasurementUnit(gd.MeasurementUnit.getPixel())
235
260
  .setLabel('Shape Dimension A')
236
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
261
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
262
+ .setHidden(true); // Hidden as required to be changed in the full editor.
237
263
  behaviorProperties
238
264
  .getOrCreate('shapeDimensionB')
239
265
  .setValue(
@@ -245,7 +271,8 @@ module.exports = {
245
271
  .setType('Number')
246
272
  .setMeasurementUnit(gd.MeasurementUnit.getPixel())
247
273
  .setLabel('Shape Dimension B')
248
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
274
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
275
+ .setHidden(true); // Hidden as required to be changed in the full editor.
249
276
  behaviorProperties
250
277
  .getOrCreate('shapeOffsetX')
251
278
  .setValue(
@@ -254,7 +281,8 @@ module.exports = {
254
281
  .setType('Number')
255
282
  .setMeasurementUnit(gd.MeasurementUnit.getPixel())
256
283
  .setLabel('Shape Offset X')
257
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
284
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
285
+ .setHidden(true); // Hidden as required to be changed in the full editor.
258
286
  behaviorProperties
259
287
  .getOrCreate('shapeOffsetY')
260
288
  .setValue(
@@ -263,7 +291,8 @@ module.exports = {
263
291
  .setType('Number')
264
292
  .setMeasurementUnit(gd.MeasurementUnit.getPixel())
265
293
  .setLabel('Shape Offset Y')
266
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
294
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
295
+ .setHidden(true); // Hidden as required to be changed in the full editor.
267
296
  behaviorProperties
268
297
  .getOrCreate('polygonOrigin')
269
298
  .setValue(
@@ -276,7 +305,8 @@ module.exports = {
276
305
  .addExtraInfo('Center')
277
306
  .addExtraInfo('Origin')
278
307
  .addExtraInfo('TopLeft')
279
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
308
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
309
+ .setHidden(true); // Hidden as required to be changed in the full editor.
280
310
  behaviorProperties
281
311
  .getOrCreate('vertices')
282
312
  .setValue(
@@ -285,28 +315,44 @@ module.exports = {
285
315
  : '[]'
286
316
  )
287
317
  .setLabel('Vertices')
288
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
318
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
319
+ .setHidden(true); // Hidden as required to be changed in the full editor.
289
320
  behaviorProperties
290
321
  .getOrCreate('density')
291
322
  .setValue(
292
323
  behaviorContent.getChild('density').getDoubleValue().toString(10)
293
324
  )
294
325
  .setType('Number')
295
- .setLabel('Density');
326
+ .setLabel(_('Density'))
327
+ .setDescription(
328
+ _(
329
+ 'Define the weight of the object, according to its size. The biggeer the density, the heavier the object.'
330
+ )
331
+ );
296
332
  behaviorProperties
297
333
  .getOrCreate('friction')
298
334
  .setValue(
299
335
  behaviorContent.getChild('friction').getDoubleValue().toString(10)
300
336
  )
301
337
  .setType('Number')
302
- .setLabel('Friction');
338
+ .setLabel(_('Friction'))
339
+ .setDescription(
340
+ _(
341
+ 'The friction applied when touching other objects. The higher the value, the more friction.'
342
+ )
343
+ );
303
344
  behaviorProperties
304
345
  .getOrCreate('restitution')
305
346
  .setValue(
306
347
  behaviorContent.getChild('restitution').getDoubleValue().toString(10)
307
348
  )
308
349
  .setType('Number')
309
- .setLabel('Restitution');
350
+ .setLabel(_('Restitution'))
351
+ .setDescription(
352
+ _(
353
+ 'The "bounciness" of the object. The higher the value, the more other objects will bounce against it.'
354
+ )
355
+ );
310
356
  behaviorProperties
311
357
  .getOrCreate('linearDamping')
312
358
  .setValue(
@@ -316,7 +362,9 @@ module.exports = {
316
362
  .toString(10)
317
363
  )
318
364
  .setType('Number')
319
- .setLabel('Linear Damping');
365
+ .setLabel(_('Linear Damping'))
366
+ .setGroup(_('Movement'));
367
+
320
368
  behaviorProperties
321
369
  .getOrCreate('angularDamping')
322
370
  .setValue(
@@ -326,8 +374,9 @@ module.exports = {
326
374
  .toString(10)
327
375
  )
328
376
  .setType('Number')
329
- .setLabel('Angular Damping')
330
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
377
+ .setLabel(_('Angular Damping'))
378
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
379
+ .setGroup(_('Movement'));
331
380
  behaviorProperties
332
381
  .getOrCreate('gravityScale')
333
382
  .setValue(
@@ -335,19 +384,23 @@ module.exports = {
335
384
  )
336
385
  .setType('Number')
337
386
  .setLabel('Gravity Scale')
338
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
387
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
388
+ .setGroup(_('Gravity'))
389
+ .setAdvanced(true);
339
390
  behaviorProperties
340
391
  .getOrCreate('layers')
341
392
  .setValue(behaviorContent.getChild('layers').getIntValue().toString(10))
342
393
  .setType('Number')
343
394
  .setLabel('Layers')
344
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
395
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
396
+ .setHidden(true); // Hidden as required to be changed in the full editor.
345
397
  behaviorProperties
346
398
  .getOrCreate('masks')
347
399
  .setValue(behaviorContent.getChild('masks').getIntValue().toString(10))
348
400
  .setType('Number')
349
401
  .setLabel('Masks')
350
- .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden);
402
+ .setQuickCustomizationVisibility(gd.QuickCustomization.Hidden)
403
+ .setHidden(true); // Hidden as required to be changed in the full editor.
351
404
 
352
405
  return behaviorProperties;
353
406
  };
@@ -474,9 +527,8 @@ module.exports = {
474
527
  )
475
528
  .setIncludeFile('Extensions/Physics2Behavior/physics2runtimebehavior.js')
476
529
  .addIncludeFile('Extensions/Physics2Behavior/Box2D_v2.3.1_min.wasm.js')
477
- .addRequiredFile(
478
- 'Extensions/Physics2Behavior/Box2D_v2.3.1_min.wasm.wasm'
479
- );
530
+ .addRequiredFile('Extensions/Physics2Behavior/Box2D_v2.3.1_min.wasm.wasm')
531
+ .setOpenFullEditorLabel(_('Edit shape and advanced settings'));
480
532
 
481
533
  // Global
482
534
  aut