gdcore-tools 2.0.0-beta2 → 2.0.0-beta4

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 (320) hide show
  1. package/dist/Runtime/AsyncTasksManager.js +2 -2
  2. package/dist/Runtime/AsyncTasksManager.js.map +2 -2
  3. package/dist/Runtime/Cordova/config.xml +23 -1
  4. package/dist/Runtime/Cordova/www/LICENSE.GDevelop.txt +2 -0
  5. package/dist/Runtime/Cordova/www/index.html +1 -1
  6. package/dist/Runtime/CustomRuntimeObject.js +1 -1
  7. package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
  8. package/dist/Runtime/CustomRuntimeObject2D.js +2 -0
  9. package/dist/Runtime/CustomRuntimeObject2D.js.map +7 -0
  10. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
  11. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
  12. package/dist/Runtime/Electron/LICENSE.GDevelop.txt +2 -0
  13. package/dist/Runtime/Electron/package.json +3 -0
  14. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js +1 -1
  15. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js.map +2 -2
  16. package/dist/Runtime/Extensions/3D/A_RuntimeObject3DRenderer.js +1 -1
  17. package/dist/Runtime/Extensions/3D/A_RuntimeObject3DRenderer.js.map +2 -2
  18. package/dist/Runtime/Extensions/3D/AmbientLight.js +1 -1
  19. package/dist/Runtime/Extensions/3D/AmbientLight.js.map +2 -2
  20. package/dist/Runtime/Extensions/3D/Base3DBehavior.js +1 -1
  21. package/dist/Runtime/Extensions/3D/Base3DBehavior.js.map +2 -2
  22. package/dist/Runtime/Extensions/3D/BloomEffect.js +1 -1
  23. package/dist/Runtime/Extensions/3D/BloomEffect.js.map +2 -2
  24. package/dist/Runtime/Extensions/3D/BrightnessAndContrastEffect.js +1 -1
  25. package/dist/Runtime/Extensions/3D/BrightnessAndContrastEffect.js.map +2 -2
  26. package/dist/Runtime/Extensions/3D/CMakeLists.txt +23 -0
  27. package/dist/Runtime/Extensions/3D/Cube3DRuntimeObject.js +1 -1
  28. package/dist/Runtime/Extensions/3D/Cube3DRuntimeObject.js.map +2 -2
  29. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +2 -0
  30. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +7 -0
  31. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3DRenderer.js +2 -0
  32. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3DRenderer.js.map +7 -0
  33. package/dist/Runtime/Extensions/3D/DirectionalLight.js +1 -1
  34. package/dist/Runtime/Extensions/3D/DirectionalLight.js.map +2 -2
  35. package/dist/Runtime/Extensions/3D/ExponentialFog.js +1 -1
  36. package/dist/Runtime/Extensions/3D/ExponentialFog.js.map +2 -2
  37. package/dist/Runtime/Extensions/3D/ExposureEffect.js +1 -1
  38. package/dist/Runtime/Extensions/3D/ExposureEffect.js.map +2 -2
  39. package/dist/Runtime/Extensions/3D/HemisphereLight.js +1 -1
  40. package/dist/Runtime/Extensions/3D/HemisphereLight.js.map +2 -2
  41. package/dist/Runtime/Extensions/3D/HueAndSaturationEffect.js +1 -1
  42. package/dist/Runtime/Extensions/3D/HueAndSaturationEffect.js.map +2 -2
  43. package/dist/Runtime/Extensions/3D/JsExtension.js +56 -24
  44. package/dist/Runtime/Extensions/3D/LinearFog.js +1 -1
  45. package/dist/Runtime/Extensions/3D/LinearFog.js.map +2 -2
  46. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js +1 -1
  47. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js.map +2 -2
  48. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject3DRenderer.js +1 -1
  49. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject3DRenderer.js.map +2 -2
  50. package/dist/Runtime/Extensions/AdMob/JsExtension.js +11 -10
  51. package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
  52. package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
  53. package/dist/Runtime/Extensions/AnchorBehavior/CMakeLists.txt +23 -0
  54. package/dist/Runtime/Extensions/BBText/JsExtension.js +20 -11
  55. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
  56. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
  57. package/dist/Runtime/Extensions/BitmapText/JsExtension.js +2 -8
  58. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
  59. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
  60. package/dist/Runtime/Extensions/CMakeLists.txt +35 -0
  61. package/dist/Runtime/Extensions/CMakeUtils.txt +81 -0
  62. package/dist/Runtime/Extensions/DestroyOutsideBehavior/CMakeLists.txt +23 -0
  63. package/dist/Runtime/Extensions/DestroyOutsideBehavior/destroyoutsideruntimebehavior.js.map +2 -2
  64. package/dist/Runtime/Extensions/DialogueTree/bondage.js/version.txt +5 -0
  65. package/dist/Runtime/Extensions/DraggableBehavior/CMakeLists.txt +23 -0
  66. package/dist/Runtime/Extensions/Effects/adjustment-pixi-filter.js +1 -1
  67. package/dist/Runtime/Extensions/Effects/adjustment-pixi-filter.js.map +2 -2
  68. package/dist/Runtime/Extensions/Effects/advanced-bloom-pixi-filter.js +1 -1
  69. package/dist/Runtime/Extensions/Effects/advanced-bloom-pixi-filter.js.map +2 -2
  70. package/dist/Runtime/Extensions/Effects/ascii-pixi-filter.js +1 -1
  71. package/dist/Runtime/Extensions/Effects/ascii-pixi-filter.js.map +2 -2
  72. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js +1 -1
  73. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js.map +2 -2
  74. package/dist/Runtime/Extensions/Effects/black-and-white-pixi-filter.js +1 -1
  75. package/dist/Runtime/Extensions/Effects/black-and-white-pixi-filter.js.map +2 -2
  76. package/dist/Runtime/Extensions/Effects/blending-mode-pixi-filter.js +1 -1
  77. package/dist/Runtime/Extensions/Effects/blending-mode-pixi-filter.js.map +2 -2
  78. package/dist/Runtime/Extensions/Effects/blur-pixi-filter.js +1 -1
  79. package/dist/Runtime/Extensions/Effects/blur-pixi-filter.js.map +2 -2
  80. package/dist/Runtime/Extensions/Effects/brightness-pixi-filter.js +1 -1
  81. package/dist/Runtime/Extensions/Effects/brightness-pixi-filter.js.map +2 -2
  82. package/dist/Runtime/Extensions/Effects/bulge-pinch-pixi-filter.js +1 -1
  83. package/dist/Runtime/Extensions/Effects/bulge-pinch-pixi-filter.js.map +2 -2
  84. package/dist/Runtime/Extensions/Effects/color-map-pixi-filter.js +1 -1
  85. package/dist/Runtime/Extensions/Effects/color-map-pixi-filter.js.map +2 -2
  86. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js +1 -1
  87. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js.map +2 -2
  88. package/dist/Runtime/Extensions/Effects/crt-pixi-filter.js +1 -1
  89. package/dist/Runtime/Extensions/Effects/crt-pixi-filter.js.map +2 -2
  90. package/dist/Runtime/Extensions/Effects/displacement-pixi-filter.js +1 -1
  91. package/dist/Runtime/Extensions/Effects/displacement-pixi-filter.js.map +2 -2
  92. package/dist/Runtime/Extensions/Effects/dot-pixi-filter.js +1 -1
  93. package/dist/Runtime/Extensions/Effects/dot-pixi-filter.js.map +2 -2
  94. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js +1 -1
  95. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js.map +2 -2
  96. package/dist/Runtime/Extensions/Effects/glitch-pixi-filter.js +1 -1
  97. package/dist/Runtime/Extensions/Effects/glitch-pixi-filter.js.map +2 -2
  98. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js +1 -1
  99. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js.map +2 -2
  100. package/dist/Runtime/Extensions/Effects/godray-pixi-filter.js +1 -1
  101. package/dist/Runtime/Extensions/Effects/godray-pixi-filter.js.map +2 -2
  102. package/dist/Runtime/Extensions/Effects/hsl-adjustment-pixi-filter.js +1 -1
  103. package/dist/Runtime/Extensions/Effects/hsl-adjustment-pixi-filter.js.map +2 -2
  104. package/dist/Runtime/Extensions/Effects/kawase-blur-pixi-filter.js +1 -1
  105. package/dist/Runtime/Extensions/Effects/kawase-blur-pixi-filter.js.map +2 -2
  106. package/dist/Runtime/Extensions/Effects/light-night-pixi-filter.js +2 -2
  107. package/dist/Runtime/Extensions/Effects/light-night-pixi-filter.js.map +2 -2
  108. package/dist/Runtime/Extensions/Effects/motion-blur-pixi-filter.js +1 -1
  109. package/dist/Runtime/Extensions/Effects/motion-blur-pixi-filter.js.map +2 -2
  110. package/dist/Runtime/Extensions/Effects/night-pixi-filter.js +2 -2
  111. package/dist/Runtime/Extensions/Effects/night-pixi-filter.js.map +2 -2
  112. package/dist/Runtime/Extensions/Effects/noise-pixi-filter.js +1 -1
  113. package/dist/Runtime/Extensions/Effects/noise-pixi-filter.js.map +2 -2
  114. package/dist/Runtime/Extensions/Effects/old-film-pixi-filter.js +1 -1
  115. package/dist/Runtime/Extensions/Effects/old-film-pixi-filter.js.map +2 -2
  116. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js +1 -1
  117. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js.map +2 -2
  118. package/dist/Runtime/Extensions/Effects/pixelate-pixi-filter.js +1 -1
  119. package/dist/Runtime/Extensions/Effects/pixelate-pixi-filter.js.map +2 -2
  120. package/dist/Runtime/Extensions/Effects/radial-blur-pixi-filter.js +1 -1
  121. package/dist/Runtime/Extensions/Effects/radial-blur-pixi-filter.js.map +2 -2
  122. package/dist/Runtime/Extensions/Effects/reflection-pixi-filter.js +1 -1
  123. package/dist/Runtime/Extensions/Effects/reflection-pixi-filter.js.map +2 -2
  124. package/dist/Runtime/Extensions/Effects/rgb-split-pixi-filter.js +1 -1
  125. package/dist/Runtime/Extensions/Effects/rgb-split-pixi-filter.js.map +2 -2
  126. package/dist/Runtime/Extensions/Effects/sepia-pixi-filter.js +1 -1
  127. package/dist/Runtime/Extensions/Effects/sepia-pixi-filter.js.map +2 -2
  128. package/dist/Runtime/Extensions/Effects/shockwave-pixi-filter.js +1 -1
  129. package/dist/Runtime/Extensions/Effects/shockwave-pixi-filter.js.map +2 -2
  130. package/dist/Runtime/Extensions/Effects/tilt-shift-pixi-filter.js +1 -1
  131. package/dist/Runtime/Extensions/Effects/tilt-shift-pixi-filter.js.map +2 -2
  132. package/dist/Runtime/Extensions/Effects/twist-pixi-filter.js +1 -1
  133. package/dist/Runtime/Extensions/Effects/twist-pixi-filter.js.map +2 -2
  134. package/dist/Runtime/Extensions/Effects/zoom-blur-pixi-filter.js +1 -1
  135. package/dist/Runtime/Extensions/Effects/zoom-blur-pixi-filter.js.map +2 -2
  136. package/dist/Runtime/Extensions/ExampleJsExtension/JsExtension.js +2 -11
  137. package/dist/Runtime/Extensions/ExampleJsExtension/dummyeffect.js +1 -1
  138. package/dist/Runtime/Extensions/ExampleJsExtension/dummyeffect.js.map +2 -2
  139. package/dist/Runtime/Extensions/FileSystem/JsExtension.js +22 -0
  140. package/dist/Runtime/Extensions/FileSystem/filesystemtools.js +1 -1
  141. package/dist/Runtime/Extensions/FileSystem/filesystemtools.js.map +2 -2
  142. package/dist/Runtime/Extensions/Firebase/A_firebasejs/NOTICE.txt +6 -0
  143. package/dist/Runtime/Extensions/Inventory/CMakeLists.txt +23 -0
  144. package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +13 -4
  145. package/dist/Runtime/Extensions/Leaderboards/JsExtension.js +42 -1
  146. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js +1 -1
  147. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js.map +2 -2
  148. package/dist/Runtime/Extensions/Lighting/JsExtension.js +2 -11
  149. package/dist/Runtime/Extensions/Lighting/lightruntimeobject.js +1 -1
  150. package/dist/Runtime/Extensions/Lighting/lightruntimeobject.js.map +2 -2
  151. package/dist/Runtime/Extensions/LinkedObjects/CMakeLists.txt +23 -0
  152. package/dist/Runtime/Extensions/LinkedObjects/linkedobjects.js +1 -1
  153. package/dist/Runtime/Extensions/LinkedObjects/linkedobjects.js.map +2 -2
  154. package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +1130 -0
  155. package/dist/Runtime/Extensions/Multiplayer/messageManager.js +2 -0
  156. package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +7 -0
  157. package/dist/Runtime/Extensions/Multiplayer/multiplayerVariablesManager.js +2 -0
  158. package/dist/Runtime/Extensions/Multiplayer/multiplayerVariablesManager.js.map +7 -0
  159. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +2 -0
  160. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +7 -0
  161. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +2 -0
  162. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +7 -0
  163. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +2 -0
  164. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +7 -0
  165. package/dist/Runtime/Extensions/Multiplayer/peer.js +10 -0
  166. package/dist/Runtime/Extensions/Multiplayer/peer.js.map +1 -0
  167. package/dist/Runtime/Extensions/Multiplayer/peerJsHelper.js +2 -0
  168. package/dist/Runtime/Extensions/Multiplayer/peerJsHelper.js.map +7 -0
  169. package/dist/Runtime/Extensions/Multiplayer/peerjs.d.ts +509 -0
  170. package/dist/Runtime/Extensions/P2P/A_peer.js +8 -2
  171. package/dist/Runtime/Extensions/P2P/A_peer.js.map +1 -1
  172. package/dist/Runtime/Extensions/P2P/B_p2ptools.js +1 -1
  173. package/dist/Runtime/Extensions/P2P/B_p2ptools.js.map +2 -2
  174. package/dist/Runtime/Extensions/P2P/JsExtension.js +27 -0
  175. package/dist/Runtime/Extensions/PanelSpriteObject/CMakeLists.txt +23 -0
  176. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
  177. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
  178. package/dist/Runtime/Extensions/ParticleSystem/CMakeLists.txt +23 -0
  179. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js +1 -1
  180. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js.map +2 -2
  181. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
  182. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
  183. package/dist/Runtime/Extensions/PathfindingBehavior/CMakeLists.txt +23 -0
  184. package/dist/Runtime/Extensions/PathfindingBehavior/pathfindingruntimebehavior.js +1 -1
  185. package/dist/Runtime/Extensions/PathfindingBehavior/pathfindingruntimebehavior.js.map +2 -2
  186. package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +47 -4
  187. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
  188. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
  189. package/dist/Runtime/Extensions/PhysicsBehavior/CMakeLists.txt +23 -0
  190. package/dist/Runtime/Extensions/PlatformBehavior/CMakeLists.txt +23 -0
  191. package/dist/Runtime/Extensions/PlatformBehavior/platformerobjectruntimebehavior.js +1 -1
  192. package/dist/Runtime/Extensions/PlatformBehavior/platformerobjectruntimebehavior.js.map +2 -2
  193. package/dist/Runtime/Extensions/PlatformBehavior/platformruntimebehavior.js +1 -1
  194. package/dist/Runtime/Extensions/PlatformBehavior/platformruntimebehavior.js.map +2 -2
  195. package/dist/Runtime/Extensions/PlayerAuthentication/JsExtension.js +6 -3
  196. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationcomponents.js +4 -4
  197. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationcomponents.js.map +2 -2
  198. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js +1 -1
  199. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js.map +2 -2
  200. package/dist/Runtime/Extensions/PrimitiveDrawing/CMakeLists.txt +23 -0
  201. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject-pixi-renderer.js +1 -1
  202. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject-pixi-renderer.js.map +2 -2
  203. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js +1 -1
  204. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
  205. package/dist/Runtime/Extensions/Shopify/CMakeLists.txt +26 -0
  206. package/dist/Runtime/Extensions/Spine/CMakeLists.txt +20 -0
  207. package/dist/Runtime/Extensions/Spine/JsExtension.js +11 -2
  208. package/dist/Runtime/Extensions/Spine/managers/pixi-spine-atlas-manager.js +1 -1
  209. package/dist/Runtime/Extensions/Spine/managers/pixi-spine-atlas-manager.js.map +2 -2
  210. package/dist/Runtime/Extensions/Spine/managers/pixi-spine-manager.js +1 -1
  211. package/dist/Runtime/Extensions/Spine/managers/pixi-spine-manager.js.map +2 -2
  212. package/dist/Runtime/Extensions/Spine/pixi-spine/Spine-Runtimes-License-Agreement.txt +11 -0
  213. package/dist/Runtime/Extensions/Spine/pixi-spine/pixi-spine.js +5 -3
  214. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
  215. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
  216. package/dist/Runtime/Extensions/SystemInfo/CMakeLists.txt +23 -0
  217. package/dist/Runtime/Extensions/TextEntryObject/CMakeLists.txt +23 -0
  218. package/dist/Runtime/Extensions/TextInput/JsExtension.js +3 -10
  219. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
  220. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
  221. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
  222. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
  223. package/dist/Runtime/Extensions/TextObject/CMakeLists.txt +23 -0
  224. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js +1 -1
  225. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js.map +2 -2
  226. package/dist/Runtime/Extensions/TileMap/JsExtension.js +834 -23
  227. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js +1 -1
  228. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js.map +2 -2
  229. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
  230. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
  231. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.d.ts +2 -0
  232. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
  233. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
  234. package/dist/Runtime/Extensions/TileMap/helper/dts/model/CommonTypes.d.ts +12 -0
  235. package/dist/Runtime/Extensions/TileMap/helper/dts/model/CommonTypes.d.ts.map +1 -1
  236. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +119 -5
  237. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
  238. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts +25 -0
  239. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
  240. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +16 -1
  241. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
  242. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +2 -0
  243. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +7 -0
  244. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js +1 -1
  245. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js.map +2 -2
  246. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
  247. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
  248. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js +1 -1
  249. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
  250. package/dist/Runtime/Extensions/TiledSpriteObject/CMakeLists.txt +23 -0
  251. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
  252. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
  253. package/dist/Runtime/Extensions/TopDownMovementBehavior/CMakeLists.txt +23 -0
  254. package/dist/Runtime/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.js +1 -1
  255. package/dist/Runtime/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.js.map +2 -2
  256. package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +2 -2
  257. package/dist/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js +1 -1
  258. package/dist/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js.map +2 -2
  259. package/dist/Runtime/Extensions/Video/JsExtension.js +2 -11
  260. package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
  261. package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
  262. package/dist/Runtime/RuntimeInstanceContainer.js +1 -1
  263. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  264. package/dist/Runtime/SpriteAnimator.js +2 -0
  265. package/dist/Runtime/SpriteAnimator.js.map +7 -0
  266. package/dist/Runtime/debugger-client/hot-reloader.js +1 -1
  267. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  268. package/dist/Runtime/events-tools/objecttools.js +1 -1
  269. package/dist/Runtime/events-tools/objecttools.js.map +2 -2
  270. package/dist/Runtime/events-tools/runtimescenetools.js +1 -1
  271. package/dist/Runtime/events-tools/runtimescenetools.js.map +2 -2
  272. package/dist/Runtime/force.js +1 -1
  273. package/dist/Runtime/force.js.map +2 -2
  274. package/dist/Runtime/object-capabilities/TextContainerBehavior.js.map +1 -1
  275. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +2 -0
  276. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js.map +7 -0
  277. package/dist/Runtime/pixi-renderers/DebuggerPixiRenderer.js +1 -1
  278. package/dist/Runtime/pixi-renderers/DebuggerPixiRenderer.js.map +2 -2
  279. package/dist/Runtime/pixi-renderers/layer-pixi-renderer.js +2 -2
  280. package/dist/Runtime/pixi-renderers/layer-pixi-renderer.js.map +2 -2
  281. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js +1 -1
  282. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js.map +2 -2
  283. package/dist/Runtime/pixi-renderers/pixi-image-manager.js.map +2 -2
  284. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js +1 -1
  285. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js.map +2 -2
  286. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
  287. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
  288. package/dist/Runtime/polygon.js +1 -1
  289. package/dist/Runtime/polygon.js.map +2 -2
  290. package/dist/Runtime/runtimebehavior.js +1 -1
  291. package/dist/Runtime/runtimebehavior.js.map +2 -2
  292. package/dist/Runtime/runtimegame.js +1 -1
  293. package/dist/Runtime/runtimegame.js.map +2 -2
  294. package/dist/Runtime/runtimeobject.js +1 -1
  295. package/dist/Runtime/runtimeobject.js.map +2 -2
  296. package/dist/Runtime/runtimescene.js +1 -1
  297. package/dist/Runtime/runtimescene.js.map +2 -2
  298. package/dist/Runtime/scenestack.js +1 -1
  299. package/dist/Runtime/scenestack.js.map +2 -2
  300. package/dist/Runtime/spriteruntimeobject.js +1 -1
  301. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  302. package/dist/Runtime/timer.js +1 -1
  303. package/dist/Runtime/timer.js.map +2 -2
  304. package/dist/Runtime/types/project-data.d.ts +115 -0
  305. package/dist/Runtime/variable.js +1 -1
  306. package/dist/Runtime/variable.js.map +2 -2
  307. package/dist/Runtime/variablescontainer.js +1 -1
  308. package/dist/Runtime/variablescontainer.js.map +2 -2
  309. package/dist/lib/libGD.cjs +2 -1
  310. package/dist/lib/libGD.wasm +0 -0
  311. package/dist/loaders.cjs +2 -1
  312. package/gd.d.ts +217 -223
  313. package/package.json +15 -7
  314. package/src/index.js +2 -0
  315. package/src/open_project.js +1 -1
  316. package/types/index.d.ts +2 -2
  317. package/types/open_project.d.ts +5 -5
  318. package/dist/Runtime/Extensions/Spine/pixi-spine/pixi-spine.js.map +0 -7
  319. package/dist/Runtime/pixi-renderers/CustomObjectPixiRenderer.js +0 -2
  320. package/dist/Runtime/pixi-renderers/CustomObjectPixiRenderer.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../GDevelop/GDJS/Runtime/events-tools/runtimescenetools.ts"],
4
- "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n export namespace evtTools {\n export namespace runtimeScene {\n export const sceneJustBegins = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return runtimeScene.getScene().getTimeManager().isFirstFrame();\n };\n\n export const sceneJustResumed = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return runtimeScene.getScene().sceneJustResumed();\n };\n\n export const getSceneName = function (runtimeScene: gdjs.RuntimeScene) {\n return runtimeScene.getScene().getName();\n };\n\n export const setBackgroundColor = function (\n runtimeScene: gdjs.RuntimeScene,\n rgbColor: string\n ) {\n const colors = rgbColor.split(';');\n if (colors.length < 3) {\n return;\n }\n runtimeScene\n .getScene()\n .setBackgroundColor(\n parseInt(colors[0]),\n parseInt(colors[1]),\n parseInt(colors[2])\n );\n };\n\n export const getElapsedTimeInSeconds = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return runtimeScene.getScene().getTimeManager().getElapsedTime() / 1000;\n };\n\n export const setTimeScale = function (\n runtimeScene: gdjs.RuntimeScene,\n timeScale: float\n ) {\n return runtimeScene.getScene().getTimeManager().setTimeScale(timeScale);\n };\n\n export const getTimeScale = function (runtimeScene: gdjs.RuntimeScene) {\n return runtimeScene.getScene().getTimeManager().getTimeScale();\n };\n\n /**\n * Test a timer elapsed time, if the timer doesn't exist it is created.\n *\n * @deprecated prefer using getTimerElapsedTimeInSecondsOrNaN\n *\n * @param runtimeScene The scene owning the timer\n * @param timeInSeconds The time value to check in seconds\n * @param timerName The timer name\n * @return True if the timer exists and its value is greater than or equal than the given time, false otherwise\n */\n export const timerElapsedTime = function (\n runtimeScene: gdjs.RuntimeScene,\n timeInSeconds: float,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n return false;\n }\n return (\n timeManager.getTimer(timerName).getTime() / 1000 >= timeInSeconds\n );\n };\n\n export const timerPaused = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n return false;\n }\n return timeManager.getTimer(timerName).isPaused();\n };\n\n export const resetTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n } else {\n timeManager.getTimer(timerName).reset();\n }\n };\n\n export const pauseTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n }\n timeManager.getTimer(timerName).setPaused(true);\n };\n\n export const unpauseTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n }\n return timeManager.getTimer(timerName).setPaused(false);\n };\n\n export const removeTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n timeManager.removeTimer(timerName);\n };\n\n export class WaitTask extends gdjs.AsyncTask {\n private duration: float;\n private timeElapsedOnScene = 0;\n\n constructor(durationInMilliseconds: float) {\n super();\n this.duration = durationInMilliseconds;\n }\n\n update(runtimeScene: RuntimeScene): boolean {\n this.timeElapsedOnScene += runtimeScene\n .getScene()\n .getTimeManager()\n .getElapsedTime();\n return this.timeElapsedOnScene >= this.duration;\n }\n }\n\n export const wait = (durationInSeconds: float): AsyncTask =>\n new WaitTask(\n durationInSeconds * 1000 /* Convert from seconds to milliseconds */\n );\n\n /**\n * This is used by expressions to return 0 when a timer doesn't exist,\n * because numeric expressions must always return a number.\n *\n * @param runtimeScene The scene owning the timer.\n * @param timerName The timer name.\n * @returns The timer elapsed time in seconds or 0 if the timer doesn't exist.\n */\n export const getTimerElapsedTimeInSeconds = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n return 0;\n }\n return timeManager.getTimer(timerName).getTime() / 1000;\n };\n\n /**\n * This is used by conditions to return false when a timer doesn't exist,\n * no matter the relational operator.\n *\n * @param runtimeScene The scene owning the timer.\n * @param timerName The timer name.\n * @returns The timer elapsed time in seconds or NaN if the timer doesn't exist.\n */\n export const getTimerElapsedTimeInSecondsOrNaN = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n return Number.NaN;\n }\n return timeManager.getTimer(timerName).getTime() / 1000;\n };\n\n export const getTimeFromStartInSeconds = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return (\n runtimeScene.getScene().getTimeManager().getTimeFromStart() / 1000\n );\n };\n\n export const getTime = function (\n runtimeScene: gdjs.RuntimeScene,\n what: string\n ) {\n if (what === 'timestamp') {\n return Date.now();\n }\n const now = new Date();\n if (what === 'hour') {\n return now.getHours();\n } else if (what === 'min') {\n return now.getMinutes();\n } else if (what === 'sec') {\n return now.getSeconds();\n } else if (what === 'mday') {\n return now.getDate();\n } else if (what === 'mon') {\n return now.getMonth();\n } else if (what === 'year') {\n //Conform to the C way of returning years.\n return now.getFullYear() - 1900;\n } else if (what === 'wday') {\n return now.getDay();\n } else if (what === 'yday') {\n const start = new Date(now.getFullYear(), 0, 0);\n const diff = now.getTime() - start.getTime();\n const oneDay = 1000 * 60 * 60 * 24;\n return Math.floor(diff / oneDay);\n }\n return 0;\n };\n\n export const replaceScene = function (\n runtimeScene: gdjs.RuntimeScene,\n newSceneName: string,\n clearOthers: boolean\n ) {\n if (!runtimeScene.getGame().getSceneData(newSceneName)) {\n return;\n }\n runtimeScene\n .getScene()\n .requestChange(\n clearOthers\n ? gdjs.SceneChangeRequest.CLEAR_SCENES\n : gdjs.SceneChangeRequest.REPLACE_SCENE,\n newSceneName\n );\n };\n\n export const pushScene = function (\n runtimeScene: gdjs.RuntimeScene,\n newSceneName: string\n ) {\n if (!runtimeScene.getGame().getSceneData(newSceneName)) {\n return;\n }\n runtimeScene\n .getScene()\n .requestChange(gdjs.SceneChangeRequest.PUSH_SCENE, newSceneName);\n };\n\n export const popScene = function (runtimeScene: gdjs.RuntimeScene) {\n runtimeScene\n .getScene()\n .requestChange(gdjs.SceneChangeRequest.POP_SCENE);\n };\n\n export const stopGame = function (runtimeScene: gdjs.RuntimeScene) {\n runtimeScene\n .getScene()\n .requestChange(gdjs.SceneChangeRequest.STOP_GAME);\n };\n\n export const createObjectsFromExternalLayout = function (\n scene: gdjs.RuntimeInstanceContainer,\n externalLayout: string,\n xPos: float,\n yPos: float,\n zPos: float\n ) {\n const externalLayoutData = scene\n .getGame()\n .getExternalLayoutData(externalLayout);\n if (externalLayoutData === null) {\n return;\n }\n\n // trackByPersistentUuid is set to false as we don't want external layouts\n // instantiated at runtime to be hot-reloaded.\n scene.getScene().createObjectsFrom(\n externalLayoutData.instances,\n xPos,\n yPos,\n /**\n * When 3D was introduced, zPos argument was added to the signature.\n * Existing calls (in JS events) to createObjectsFromExternalLayout will\n * have zPos undefined. So it is set to 0 in that case.\n */\n zPos || 0,\n /*trackByPersistentUuid=*/\n false\n );\n };\n\n /**\n * Check if the game has just resumed from being hidden\n */\n export const hasGameJustResumed = (\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): boolean => {\n return instanceContainer.getGame().hasJustResumed();\n };\n\n /**\n * Check if a scene exists.\n */\n export const doesSceneExist = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): boolean => {\n return runtimeScene.getGame().hasScene(sceneName);\n };\n\n /**\n * Preload a scene assets as soon as possible in background.\n */\n export const prioritizeLoadingOfScene = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): void => {\n runtimeScene.getGame().prioritizeLoadingOfScene(sceneName);\n };\n\n /**\n * @return The progress of assets loading in background for a scene (between 0 and 1).\n */\n export const getSceneLoadingProgress = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): float => {\n return runtimeScene.getGame().getSceneLoadingProgress(sceneName);\n };\n\n /**\n * Check if scene assets have finished to load in background.\n */\n export const areSceneAssetsLoaded = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): boolean => {\n return runtimeScene.getGame().areSceneAssetsLoaded(sceneName);\n };\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n export namespace evtTools {\n export namespace runtimeScene {\n export const sceneJustBegins = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return runtimeScene.getScene().getTimeManager().isFirstFrame();\n };\n\n export const sceneJustResumed = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return runtimeScene.getScene().sceneJustResumed();\n };\n\n export const getSceneName = function (runtimeScene: gdjs.RuntimeScene) {\n return runtimeScene.getScene().getName();\n };\n\n export const setBackgroundColor = function (\n runtimeScene: gdjs.RuntimeScene,\n rgbColor: string\n ) {\n const colors = rgbColor.split(';');\n if (colors.length < 3) {\n return;\n }\n runtimeScene\n .getScene()\n .setBackgroundColor(\n parseInt(colors[0]),\n parseInt(colors[1]),\n parseInt(colors[2])\n );\n };\n\n export const getElapsedTimeInSeconds = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return runtimeScene.getScene().getTimeManager().getElapsedTime() / 1000;\n };\n\n export const setTimeScale = function (\n runtimeScene: gdjs.RuntimeScene,\n timeScale: float\n ) {\n return runtimeScene.getScene().getTimeManager().setTimeScale(timeScale);\n };\n\n export const getTimeScale = function (runtimeScene: gdjs.RuntimeScene) {\n return runtimeScene.getScene().getTimeManager().getTimeScale();\n };\n\n /**\n * Test a timer elapsed time, if the timer doesn't exist it is created.\n *\n * @deprecated prefer using getTimerElapsedTimeInSecondsOrNaN\n *\n * @param runtimeScene The scene owning the timer\n * @param timeInSeconds The time value to check in seconds\n * @param timerName The timer name\n * @return True if the timer exists and its value is greater than or equal than the given time, false otherwise\n */\n export const timerElapsedTime = function (\n runtimeScene: gdjs.RuntimeScene,\n timeInSeconds: float,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n return false;\n }\n return (\n timeManager.getTimer(timerName).getTime() / 1000 >= timeInSeconds\n );\n };\n\n export const timerPaused = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n return false;\n }\n return timeManager.getTimer(timerName).isPaused();\n };\n\n export const resetTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n } else {\n timeManager.getTimer(timerName).reset();\n }\n };\n\n export const pauseTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n }\n timeManager.getTimer(timerName).setPaused(true);\n };\n\n export const unpauseTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n timeManager.addTimer(timerName);\n }\n return timeManager.getTimer(timerName).setPaused(false);\n };\n\n export const removeTimer = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n timeManager.removeTimer(timerName);\n };\n\n export class WaitTask extends gdjs.AsyncTask {\n private duration: float;\n private timeElapsedOnScene = 0;\n\n constructor(durationInMilliseconds: float) {\n super();\n this.duration = durationInMilliseconds;\n }\n\n update(runtimeScene: RuntimeScene): boolean {\n this.timeElapsedOnScene += runtimeScene\n .getScene()\n .getTimeManager()\n .getElapsedTime();\n return this.timeElapsedOnScene >= this.duration;\n }\n }\n\n export const wait = (durationInSeconds: float): AsyncTask =>\n new WaitTask(\n durationInSeconds * 1000 /* Convert from seconds to milliseconds */\n );\n\n /**\n * This is used by expressions to return 0 when a timer doesn't exist,\n * because numeric expressions must always return a number.\n *\n * @param runtimeScene The scene owning the timer.\n * @param timerName The timer name.\n * @returns The timer elapsed time in seconds or 0 if the timer doesn't exist.\n */\n export const getTimerElapsedTimeInSeconds = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n return 0;\n }\n return timeManager.getTimer(timerName).getTime() / 1000;\n };\n\n /**\n * This is used by conditions to return false when a timer doesn't exist,\n * no matter the relational operator.\n *\n * @param runtimeScene The scene owning the timer.\n * @param timerName The timer name.\n * @returns The timer elapsed time in seconds or NaN if the timer doesn't exist.\n */\n export const getTimerElapsedTimeInSecondsOrNaN = function (\n runtimeScene: gdjs.RuntimeScene,\n timerName: string\n ) {\n const timeManager = runtimeScene.getScene().getTimeManager();\n if (!timeManager.hasTimer(timerName)) {\n return Number.NaN;\n }\n return timeManager.getTimer(timerName).getTime() / 1000;\n };\n\n export const getTimeFromStartInSeconds = function (\n runtimeScene: gdjs.RuntimeScene\n ) {\n return (\n runtimeScene.getScene().getTimeManager().getTimeFromStart() / 1000\n );\n };\n\n export const getTime = function (\n runtimeScene: gdjs.RuntimeScene,\n what: string\n ) {\n if (what === 'timestamp') {\n return Date.now();\n }\n const now = new Date();\n if (what === 'hour') {\n return now.getHours();\n } else if (what === 'min') {\n return now.getMinutes();\n } else if (what === 'sec') {\n return now.getSeconds();\n } else if (what === 'mday') {\n return now.getDate();\n } else if (what === 'mon') {\n return now.getMonth();\n } else if (what === 'year') {\n //Conform to the C way of returning years.\n return now.getFullYear() - 1900;\n } else if (what === 'wday') {\n return now.getDay();\n } else if (what === 'yday') {\n const start = new Date(now.getFullYear(), 0, 0);\n const diff = now.getTime() - start.getTime();\n const oneDay = 1000 * 60 * 60 * 24;\n return Math.floor(diff / oneDay);\n }\n return 0;\n };\n\n export const replaceScene = function (\n runtimeScene: gdjs.RuntimeScene,\n newSceneName: string,\n clearOthers: boolean\n ) {\n if (!runtimeScene.getGame().getSceneAndExtensionsData(newSceneName)) {\n return;\n }\n runtimeScene\n .getScene()\n .requestChange(\n clearOthers\n ? gdjs.SceneChangeRequest.CLEAR_SCENES\n : gdjs.SceneChangeRequest.REPLACE_SCENE,\n newSceneName\n );\n };\n\n export const pushScene = function (\n runtimeScene: gdjs.RuntimeScene,\n newSceneName: string\n ) {\n if (!runtimeScene.getGame().getSceneAndExtensionsData(newSceneName)) {\n return;\n }\n runtimeScene\n .getScene()\n .requestChange(gdjs.SceneChangeRequest.PUSH_SCENE, newSceneName);\n };\n\n export const popScene = function (runtimeScene: gdjs.RuntimeScene) {\n runtimeScene\n .getScene()\n .requestChange(gdjs.SceneChangeRequest.POP_SCENE);\n };\n\n export const stopGame = function (runtimeScene: gdjs.RuntimeScene) {\n runtimeScene\n .getScene()\n .requestChange(gdjs.SceneChangeRequest.STOP_GAME);\n };\n\n export const createObjectsFromExternalLayout = function (\n scene: gdjs.RuntimeInstanceContainer,\n externalLayout: string,\n xPos: float,\n yPos: float,\n zPos: float\n ) {\n const externalLayoutData = scene\n .getGame()\n .getExternalLayoutData(externalLayout);\n if (externalLayoutData === null) {\n return;\n }\n\n // trackByPersistentUuid is set to false as we don't want external layouts\n // instantiated at runtime to be hot-reloaded.\n scene.getScene().createObjectsFrom(\n externalLayoutData.instances,\n xPos,\n yPos,\n /**\n * When 3D was introduced, zPos argument was added to the signature.\n * Existing calls (in JS events) to createObjectsFromExternalLayout will\n * have zPos undefined. So it is set to 0 in that case.\n */\n zPos || 0,\n /*trackByPersistentUuid=*/\n false\n );\n };\n\n /**\n * Check if the game has just resumed from being hidden\n */\n export const hasGameJustResumed = (\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): boolean => {\n return instanceContainer.getGame().hasJustResumed();\n };\n\n /**\n * Check if a scene exists.\n */\n export const doesSceneExist = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): boolean => {\n return runtimeScene.getGame().hasScene(sceneName);\n };\n\n /**\n * Preload a scene assets as soon as possible in background.\n */\n export const prioritizeLoadingOfScene = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): void => {\n runtimeScene.getGame().prioritizeLoadingOfScene(sceneName);\n };\n\n /**\n * @return The progress of assets loading in background for a scene (between 0 and 1).\n */\n export const getSceneLoadingProgress = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): float => {\n return runtimeScene.getGame().getSceneLoadingProgress(sceneName);\n };\n\n /**\n * Check if scene assets have finished to load in background.\n */\n export const areSceneAssetsLoaded = (\n runtimeScene: gdjs.RuntimeScene,\n sceneName: string\n ): boolean => {\n return runtimeScene.getGame().areSceneAssetsLoaded(sceneName);\n };\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(_){class s{constructor(t,i,h){this._dirty=!1;this._x=t||0,this._y=i||0,this._angle=Math.atan2(i,t)*180/Math.PI,this._length=Math.sqrt(t*t+i*i),this._multiplier=h}getX(){return this._x}getY(){return this._y}setX(t){this._x=t,this._dirty=!0}setY(t){this._y=t,this._dirty=!0}clear(){this._x=0,this._y=0,this._length=0,this._dirty=!1}addForce(t){this._x+=t._x,this._y+=t._y,this._dirty=!0}add(t,i){this._x+=t,this._y+=i,this._dirty=!0}setAngle(t){this._dirty&&(this._length=Math.sqrt(this._x*this._x+this._y*this._y),this._dirty=!1),this._angle=t;const i=t/180*Math.PI;this._x=Math.cos(i)*this._length,this._y=Math.sin(i)*this._length}setLength(t){this._dirty&&(this._angle=Math.atan2(this._y,this._x)*180/Math.PI,this._dirty=!1),this._length=t;const i=this._angle/180*Math.PI;this._x=Math.cos(i)*this._length,this._y=Math.sin(i)*this._length}getAngle(){return this._dirty&&(this._angle=Math.atan2(this._y,this._x)*180/Math.PI,this._length=Math.sqrt(this._x*this._x+this._y*this._y),this._dirty=!1),this._angle}getLength(){return this._dirty&&(this._angle=Math.atan2(this._y,this._x)*180/Math.PI,this._length=Math.sqrt(this._x*this._x+this._y*this._y),this._dirty=!1),this._length}getMultiplier(){return this._multiplier}setMultiplier(t){this._multiplier=t}}_.Force=s})(gdjs||(gdjs={}));
1
+ var gdjs;(function(e){class s{constructor(t,i,h){this._dirty=!1;this._x=t||0,this._y=i||0,this._angle=Math.atan2(i,t)*180/Math.PI,this._length=Math.sqrt(t*t+i*i),this._multiplier=h}getX(){return this._x}getY(){return this._y}setX(t){this._x=t,this._dirty=!0}setY(t){this._y=t,this._dirty=!0}clear(){this._x=0,this._y=0,this._length=0,this._dirty=!1}addForce(t){this._x+=t._x,this._y+=t._y,this._dirty=!0}add(t,i){this._x+=t,this._y+=i,this._dirty=!0}setAngle(t){this._dirty&&(this._length=Math.sqrt(this._x*this._x+this._y*this._y),this._dirty=!1),this._angle=t;const i=t/180*Math.PI;this._x=Math.cos(i)*this._length,this._y=Math.sin(i)*this._length}setLength(t){this._dirty&&(this._angle=Math.atan2(this._y,this._x)*180/Math.PI,this._dirty=!1),this._length=t;const i=this._angle/180*Math.PI;this._x=Math.cos(i)*this._length,this._y=Math.sin(i)*this._length}getAngle(){return this._dirty&&(this._angle=Math.atan2(this._y,this._x)*180/Math.PI,this._length=Math.sqrt(this._x*this._x+this._y*this._y),this._dirty=!1),this._angle}getLength(){return this._dirty&&(this._angle=Math.atan2(this._y,this._x)*180/Math.PI,this._length=Math.sqrt(this._x*this._x+this._y*this._y),this._dirty=!1),this._length}getMultiplier(){return this._multiplier}setMultiplier(t){this._multiplier=t}getNetworkSyncData(){return{x:this._x,y:this._y,a:this._angle,l:this._length,m:this._multiplier}}updateFromNetworkSyncData(t){this._x=t.x,this._y=t.y,this._angle=t.a,this._length=t.l,this._multiplier=t.m}}e.Force=s})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=force.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../GDevelop/GDJS/Runtime/force.ts"],
4
- "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n /**\n * A vector used to move objects.\n */\n export class Force {\n _x: float;\n _y: float;\n _angle: float;\n _length: float;\n _dirty: boolean = false;\n _multiplier: integer;\n\n /**\n * @param x The initial x component\n * @param y The initial y component\n * @param multiplier The multiplier (0 for a force that disappear on next frame, 1 for a permanent force)\n */\n constructor(x: float, y: float, multiplier: integer) {\n this._x = x || 0;\n this._y = y || 0;\n this._angle = (Math.atan2(y, x) * 180) / Math.PI;\n this._length = Math.sqrt(x * x + y * y);\n this._multiplier = multiplier;\n }\n\n /**\n * Returns the X component of the force.\n */\n getX(): float {\n return this._x;\n }\n\n /**\n * Returns the Y component of the force.\n */\n getY(): float {\n return this._y;\n }\n\n /**\n * Set the x component of the force.\n * @param x The new X component\n */\n setX(x: float): void {\n this._x = x;\n this._dirty = true;\n }\n\n /**\n * Set the y component of the force.\n * @param y The new Y component\n */\n setY(y: float): void {\n this._y = y;\n this._dirty = true;\n }\n\n clear() {\n this._x = 0;\n this._y = 0;\n this._length = 0;\n this._dirty = false;\n }\n\n addForce(force: Force) {\n this._x += force._x;\n this._y += force._y;\n this._dirty = true;\n }\n\n add(x: float, y: float) {\n this._x += x;\n this._y += y;\n this._dirty = true;\n }\n\n /**\n * Set the angle of the force.\n * @param angle The new angle\n */\n setAngle(angle: float): void {\n if (this._dirty) {\n this._length = Math.sqrt(this._x * this._x + this._y * this._y);\n this._dirty = false;\n }\n this._angle = angle;\n const angleInRadians = (angle / 180) * Math.PI;\n this._x = Math.cos(angleInRadians) * this._length;\n this._y = Math.sin(angleInRadians) * this._length;\n }\n\n /**\n * Set the length of the force.\n * @param len The length\n */\n setLength(len: number): void {\n if (this._dirty) {\n this._angle = (Math.atan2(this._y, this._x) * 180) / Math.PI;\n this._dirty = false;\n }\n this._length = len;\n const angleInRadians = (this._angle / 180) * Math.PI;\n this._x = Math.cos(angleInRadians) * this._length;\n this._y = Math.sin(angleInRadians) * this._length;\n }\n\n /**\n * Get the angle of the force\n */\n getAngle(): float {\n if (this._dirty) {\n this._angle = (Math.atan2(this._y, this._x) * 180) / Math.PI;\n this._length = Math.sqrt(this._x * this._x + this._y * this._y);\n this._dirty = false;\n }\n return this._angle;\n }\n\n /**\n * Get the length of the force\n */\n getLength(): float {\n if (this._dirty) {\n this._angle = (Math.atan2(this._y, this._x) * 180) / Math.PI;\n this._length = Math.sqrt(this._x * this._x + this._y * this._y);\n this._dirty = false;\n }\n return this._length;\n }\n\n /**\n * Return 1 (true) if the force is permanent, 0 (false) if it is instant.\n */\n getMultiplier(): integer {\n return this._multiplier;\n }\n\n /**\n * Set if the force multiplier.\n * @param multiplier The new value\n */\n setMultiplier(multiplier: integer): void {\n this._multiplier = multiplier;\n }\n }\n}\n"],
5
- "mappings": "AAKA,GAAU,MAAV,UAAU,EAAV,CAIS,OAAY,CAajB,YAAY,EAAU,EAAU,EAAqB,CARrD,YAAkB,GAShB,KAAK,GAAK,GAAK,EACf,KAAK,GAAK,GAAK,EACf,KAAK,OAAU,KAAK,MAAM,EAAG,GAAK,IAAO,KAAK,GAC9C,KAAK,QAAU,KAAK,KAAK,EAAI,EAAI,EAAI,GACrC,KAAK,YAAc,EAMrB,MAAc,CACZ,MAAO,MAAK,GAMd,MAAc,CACZ,MAAO,MAAK,GAOd,KAAK,EAAgB,CACnB,KAAK,GAAK,EACV,KAAK,OAAS,GAOhB,KAAK,EAAgB,CACnB,KAAK,GAAK,EACV,KAAK,OAAS,GAGhB,OAAQ,CACN,KAAK,GAAK,EACV,KAAK,GAAK,EACV,KAAK,QAAU,EACf,KAAK,OAAS,GAGhB,SAAS,EAAc,CACrB,KAAK,IAAM,EAAM,GACjB,KAAK,IAAM,EAAM,GACjB,KAAK,OAAS,GAGhB,IAAI,EAAU,EAAU,CACtB,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,OAAS,GAOhB,SAAS,EAAoB,CAC3B,AAAI,KAAK,QACP,MAAK,QAAU,KAAK,KAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,IAC5D,KAAK,OAAS,IAEhB,KAAK,OAAS,EACd,KAAM,GAAkB,EAAQ,IAAO,KAAK,GAC5C,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAC1C,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAO5C,UAAU,EAAmB,CAC3B,AAAI,KAAK,QACP,MAAK,OAAU,KAAK,MAAM,KAAK,GAAI,KAAK,IAAM,IAAO,KAAK,GAC1D,KAAK,OAAS,IAEhB,KAAK,QAAU,EACf,KAAM,GAAkB,KAAK,OAAS,IAAO,KAAK,GAClD,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAC1C,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAM5C,UAAkB,CAChB,MAAI,MAAK,QACP,MAAK,OAAU,KAAK,MAAM,KAAK,GAAI,KAAK,IAAM,IAAO,KAAK,GAC1D,KAAK,QAAU,KAAK,KAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,IAC5D,KAAK,OAAS,IAET,KAAK,OAMd,WAAmB,CACjB,MAAI,MAAK,QACP,MAAK,OAAU,KAAK,MAAM,KAAK,GAAI,KAAK,IAAM,IAAO,KAAK,GAC1D,KAAK,QAAU,KAAK,KAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,IAC5D,KAAK,OAAS,IAET,KAAK,QAMd,eAAyB,CACvB,MAAO,MAAK,YAOd,cAAc,EAA2B,CACvC,KAAK,YAAc,GA1IhB,EAAM,UAJL",
4
+ "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n /**\n * A vector used to move objects.\n */\n export class Force {\n _x: float;\n _y: float;\n _angle: float;\n _length: float;\n _dirty: boolean = false;\n _multiplier: integer;\n\n /**\n * @param x The initial x component\n * @param y The initial y component\n * @param multiplier The multiplier (0 for a force that disappear on next frame, 1 for a permanent force)\n */\n constructor(x: float, y: float, multiplier: integer) {\n this._x = x || 0;\n this._y = y || 0;\n this._angle = (Math.atan2(y, x) * 180) / Math.PI;\n this._length = Math.sqrt(x * x + y * y);\n this._multiplier = multiplier;\n }\n\n /**\n * Returns the X component of the force.\n */\n getX(): float {\n return this._x;\n }\n\n /**\n * Returns the Y component of the force.\n */\n getY(): float {\n return this._y;\n }\n\n /**\n * Set the x component of the force.\n * @param x The new X component\n */\n setX(x: float): void {\n this._x = x;\n this._dirty = true;\n }\n\n /**\n * Set the y component of the force.\n * @param y The new Y component\n */\n setY(y: float): void {\n this._y = y;\n this._dirty = true;\n }\n\n clear() {\n this._x = 0;\n this._y = 0;\n this._length = 0;\n this._dirty = false;\n }\n\n addForce(force: Force) {\n this._x += force._x;\n this._y += force._y;\n this._dirty = true;\n }\n\n add(x: float, y: float) {\n this._x += x;\n this._y += y;\n this._dirty = true;\n }\n\n /**\n * Set the angle of the force.\n * @param angle The new angle\n */\n setAngle(angle: float): void {\n if (this._dirty) {\n this._length = Math.sqrt(this._x * this._x + this._y * this._y);\n this._dirty = false;\n }\n this._angle = angle;\n const angleInRadians = (angle / 180) * Math.PI;\n this._x = Math.cos(angleInRadians) * this._length;\n this._y = Math.sin(angleInRadians) * this._length;\n }\n\n /**\n * Set the length of the force.\n * @param len The length\n */\n setLength(len: number): void {\n if (this._dirty) {\n this._angle = (Math.atan2(this._y, this._x) * 180) / Math.PI;\n this._dirty = false;\n }\n this._length = len;\n const angleInRadians = (this._angle / 180) * Math.PI;\n this._x = Math.cos(angleInRadians) * this._length;\n this._y = Math.sin(angleInRadians) * this._length;\n }\n\n /**\n * Get the angle of the force\n */\n getAngle(): float {\n if (this._dirty) {\n this._angle = (Math.atan2(this._y, this._x) * 180) / Math.PI;\n this._length = Math.sqrt(this._x * this._x + this._y * this._y);\n this._dirty = false;\n }\n return this._angle;\n }\n\n /**\n * Get the length of the force\n */\n getLength(): float {\n if (this._dirty) {\n this._angle = (Math.atan2(this._y, this._x) * 180) / Math.PI;\n this._length = Math.sqrt(this._x * this._x + this._y * this._y);\n this._dirty = false;\n }\n return this._length;\n }\n\n /**\n * Return 1 (true) if the force is permanent, 0 (false) if it is instant.\n */\n getMultiplier(): integer {\n return this._multiplier;\n }\n\n /**\n * Set if the force multiplier.\n * @param multiplier The new value\n */\n setMultiplier(multiplier: integer): void {\n this._multiplier = multiplier;\n }\n\n getNetworkSyncData(): ForceNetworkSyncData {\n return {\n x: this._x,\n y: this._y,\n a: this._angle,\n l: this._length,\n m: this._multiplier,\n };\n }\n\n updateFromNetworkSyncData(syncData: ForceNetworkSyncData) {\n this._x = syncData.x;\n this._y = syncData.y;\n this._angle = syncData.a;\n this._length = syncData.l;\n this._multiplier = syncData.m;\n }\n }\n}\n"],
5
+ "mappings": "AAKA,GAAU,MAAV,UAAU,EAAV,CAIS,OAAY,CAajB,YAAY,EAAU,EAAU,EAAqB,CARrD,YAAkB,GAShB,KAAK,GAAK,GAAK,EACf,KAAK,GAAK,GAAK,EACf,KAAK,OAAU,KAAK,MAAM,EAAG,GAAK,IAAO,KAAK,GAC9C,KAAK,QAAU,KAAK,KAAK,EAAI,EAAI,EAAI,GACrC,KAAK,YAAc,EAMrB,MAAc,CACZ,MAAO,MAAK,GAMd,MAAc,CACZ,MAAO,MAAK,GAOd,KAAK,EAAgB,CACnB,KAAK,GAAK,EACV,KAAK,OAAS,GAOhB,KAAK,EAAgB,CACnB,KAAK,GAAK,EACV,KAAK,OAAS,GAGhB,OAAQ,CACN,KAAK,GAAK,EACV,KAAK,GAAK,EACV,KAAK,QAAU,EACf,KAAK,OAAS,GAGhB,SAAS,EAAc,CACrB,KAAK,IAAM,EAAM,GACjB,KAAK,IAAM,EAAM,GACjB,KAAK,OAAS,GAGhB,IAAI,EAAU,EAAU,CACtB,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,OAAS,GAOhB,SAAS,EAAoB,CAC3B,AAAI,KAAK,QACP,MAAK,QAAU,KAAK,KAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,IAC5D,KAAK,OAAS,IAEhB,KAAK,OAAS,EACd,KAAM,GAAkB,EAAQ,IAAO,KAAK,GAC5C,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAC1C,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAO5C,UAAU,EAAmB,CAC3B,AAAI,KAAK,QACP,MAAK,OAAU,KAAK,MAAM,KAAK,GAAI,KAAK,IAAM,IAAO,KAAK,GAC1D,KAAK,OAAS,IAEhB,KAAK,QAAU,EACf,KAAM,GAAkB,KAAK,OAAS,IAAO,KAAK,GAClD,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAC1C,KAAK,GAAK,KAAK,IAAI,GAAkB,KAAK,QAM5C,UAAkB,CAChB,MAAI,MAAK,QACP,MAAK,OAAU,KAAK,MAAM,KAAK,GAAI,KAAK,IAAM,IAAO,KAAK,GAC1D,KAAK,QAAU,KAAK,KAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,IAC5D,KAAK,OAAS,IAET,KAAK,OAMd,WAAmB,CACjB,MAAI,MAAK,QACP,MAAK,OAAU,KAAK,MAAM,KAAK,GAAI,KAAK,IAAM,IAAO,KAAK,GAC1D,KAAK,QAAU,KAAK,KAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,IAC5D,KAAK,OAAS,IAET,KAAK,QAMd,eAAyB,CACvB,MAAO,MAAK,YAOd,cAAc,EAA2B,CACvC,KAAK,YAAc,EAGrB,oBAA2C,CACzC,MAAO,CACL,EAAG,KAAK,GACR,EAAG,KAAK,GACR,EAAG,KAAK,OACR,EAAG,KAAK,QACR,EAAG,KAAK,aAIZ,0BAA0B,EAAgC,CACxD,KAAK,GAAK,EAAS,EACnB,KAAK,GAAK,EAAS,EACnB,KAAK,OAAS,EAAS,EACvB,KAAK,QAAU,EAAS,EACxB,KAAK,YAAc,EAAS,GA5JzB,EAAM,UAJL",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../GDevelop/GDJS/Runtime/object-capabilities/TextContainerBehavior.ts"],
4
- "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2023 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n export interface TextContainer {\n /**\n * Get the text displayed by the object.\n */\n getText(): string;\n\n /**\n * Set the text displayed by the object.\n * @param text The new text\n */\n setText(text: string): void;\n }\n\n /**\n * A behavior that forwards the Animatable interface to its object.\n */\n export class TextContainerBehavior\n extends gdjs.RuntimeBehavior\n implements TextContainer {\n private object: gdjs.RuntimeObject & TextContainer;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject & TextContainer\n ) {\n super(instanceContainer, behaviorData, owner);\n this.object = owner;\n }\n\n usesLifecycleFunction(): boolean {\n return false;\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n // Nothing to update.\n return true;\n }\n\n onDeActivate() {}\n\n onDestroy() {}\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n getText(): string {\n return this.object.getText();\n }\n\n setText(text: string): void {\n this.object.setText(text);\n }\n }\n\n gdjs.registerBehavior(\n 'TextContainerCapability::TextContainerBehavior',\n gdjs.TextContainerBehavior\n );\n}\n"],
4
+ "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2023 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n export interface TextContainer {\n /**\n * Get the text displayed by the object.\n */\n getText(): string;\n\n /**\n * Set the text displayed by the object.\n * @param text The new text\n */\n setText(text: string): void;\n }\n\n /**\n * A behavior that forwards the TextContainer interface to its object.\n */\n export class TextContainerBehavior\n extends gdjs.RuntimeBehavior\n implements TextContainer {\n private object: gdjs.RuntimeObject & TextContainer;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject & TextContainer\n ) {\n super(instanceContainer, behaviorData, owner);\n this.object = owner;\n }\n\n usesLifecycleFunction(): boolean {\n return false;\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n // Nothing to update.\n return true;\n }\n\n onDeActivate() {}\n\n onDestroy() {}\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n getText(): string {\n return this.object.getText();\n }\n\n setText(text: string): void {\n this.object.setText(text);\n }\n }\n\n gdjs.registerBehavior(\n 'TextContainerCapability::TextContainerBehavior',\n gdjs.TextContainerBehavior\n );\n}\n"],
5
5
  "mappings": "AAKA,GAAU,MAAV,UAAU,EAAV,CAiBS,eACG,GAAK,eACY,CAGzB,YACE,EACA,EACA,EACA,CACA,MAAM,EAAmB,EAAc,GACvC,KAAK,OAAS,EAGhB,uBAAiC,CAC/B,MAAO,GAGT,uBAAuB,EAAiB,EAA0B,CAEhE,MAAO,GAGT,cAAe,EAEf,WAAY,EAEZ,gBAAgB,EAAkD,EAElE,iBAAiB,EAAkD,EAEnE,SAAkB,CAChB,MAAO,MAAK,OAAO,UAGrB,QAAQ,EAAoB,CAC1B,KAAK,OAAO,QAAQ,IApCjB,EAAM,wBAwCb,EAAK,iBACH,iDACA,EAAK,yBA3DC",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,2 @@
1
+ var gdjs;(function(r){class a{constructor(e,t,i){this._isContainerDirty=!0;this._debugDraw=null;this._debugDrawContainer=null;this._object=e,this._instanceContainer=t,this._pixiContainer=new PIXI.Container,this._debugDrawRenderedObjectsPoints={},this._pixiContainer.sortableChildren=!0,this._debugDraw=null;const n=i.getLayer("");n&&n.getRenderer().addRendererObject(this._pixiContainer,e.getZOrder())}reinitialize(e,t){this._object=e,this._isContainerDirty=!0;const i=t.getLayer("");i&&i.getRenderer().addRendererObject(this._pixiContainer,e.getZOrder())}getRendererObject(){return this._pixiContainer}get3DRendererObject(){return null}_updatePIXIContainer(){const e=this._object.getScaleX(),t=this._object.getScaleY(),i=this._object.getOpacity();this._pixiContainer.pivot.x=this._object.getUnscaledCenterX(),this._pixiContainer.pivot.y=this._object.getUnscaledCenterY(),this._pixiContainer.position.x=this._object.getX()+this._pixiContainer.pivot.x*Math.abs(e),this._pixiContainer.position.y=this._object.getY()+this._pixiContainer.pivot.y*Math.abs(t),this._pixiContainer.rotation=r.toRad(this._object.angle),this._pixiContainer.scale.x=e,this._pixiContainer.scale.y=t,this._pixiContainer.visible=!this._object.hidden,this._pixiContainer.alpha=i/255,this._isContainerDirty=!1}ensureUpToDate(){this._isContainerDirty&&this._updatePIXIContainer()}update(){this._isContainerDirty=!0}updateX(){const e=this._object.getScaleX();this._pixiContainer.position.x=this._object.x+this._pixiContainer.pivot.x*Math.abs(e)}updateY(){const e=this._object.getScaleY();this._pixiContainer.position.y=this._object.y+this._pixiContainer.pivot.y*Math.abs(e)}updateAngle(){this._pixiContainer.rotation=r.toRad(this._object.angle)}updateOpacity(){const e=this._object.getOpacity();this._pixiContainer.alpha=e/255}updateVisibility(){this._pixiContainer.visible=!this._object.hidden}getPIXIContainer(){return this._pixiContainer}getPIXIRenderer(){return null}setLayerIndex(e,t){const i=e.getRenderer();let n=i.getRendererObject();e.isLightingLayer()&&(n=i.getLightingSprite()),!!n&&this._pixiContainer.children.indexOf(n)!==t&&(this._pixiContainer.removeChild(n),this._pixiContainer.addChildAt(n,t))}static getAnimationFrameTextureManager(e){return r.SpriteRuntimeObjectPixiRenderer.getAnimationFrameTextureManager(e)}}r.CustomRuntimeObject2DPixiRenderer=a,r.CustomRuntimeObject2DRenderer=r.CustomRuntimeObject2DPixiRenderer})(gdjs||(gdjs={}));
2
+ //# sourceMappingURL=CustomRuntimeObject2DPixiRenderer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../GDevelop/GDJS/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.ts"],
4
+ "sourcesContent": ["namespace gdjs {\n /**\n * The renderer for a {@link gdjs.CustomRuntimeObject2D} using Pixi.js.\n */\n export class CustomRuntimeObject2DPixiRenderer\n implements gdjs.RuntimeInstanceContainerPixiRenderer {\n _object: gdjs.CustomRuntimeObject;\n _instanceContainer: gdjs.CustomRuntimeObjectInstanceContainer;\n _pixiContainer: PIXI.Container;\n _isContainerDirty: boolean = true;\n _debugDraw: PIXI.Graphics | null = null;\n _debugDrawContainer: PIXI.Container | null = null;\n _debugDrawRenderedObjectsPoints: Record<\n number,\n {\n wasRendered: boolean;\n points: Record<string, PIXI.Text>;\n }\n >;\n\n constructor(\n object: gdjs.CustomRuntimeObject,\n instanceContainer: gdjs.CustomRuntimeObjectInstanceContainer,\n parent: gdjs.RuntimeInstanceContainer\n ) {\n this._object = object;\n this._instanceContainer = instanceContainer;\n\n // TODO (3D) - optimization: don't create a PixiJS container if only 3D objects.\n // And same, in reverse, for 2D only objects.\n this._pixiContainer = new PIXI.Container();\n this._debugDrawRenderedObjectsPoints = {};\n\n // Contains the layers of the scene (and, optionally, debug PIXI objects).\n this._pixiContainer.sortableChildren = true;\n this._debugDraw = null;\n\n const layer = parent.getLayer('');\n if (layer) {\n layer\n .getRenderer()\n .addRendererObject(this._pixiContainer, object.getZOrder());\n }\n }\n\n reinitialize(\n object: gdjs.CustomRuntimeObject,\n parent: gdjs.RuntimeInstanceContainer\n ) {\n this._object = object;\n this._isContainerDirty = true;\n const layer = parent.getLayer('');\n if (layer) {\n layer\n .getRenderer()\n .addRendererObject(this._pixiContainer, object.getZOrder());\n }\n }\n\n getRendererObject() {\n return this._pixiContainer;\n }\n\n get3DRendererObject(): THREE.Object3D | null {\n return null;\n }\n\n /**\n * Update the internal PIXI.Container position, angle...\n */\n _updatePIXIContainer() {\n const scaleX = this._object.getScaleX();\n const scaleY = this._object.getScaleY();\n const opacity = this._object.getOpacity();\n this._pixiContainer.pivot.x = this._object.getUnscaledCenterX();\n this._pixiContainer.pivot.y = this._object.getUnscaledCenterY();\n this._pixiContainer.position.x =\n this._object.getX() + this._pixiContainer.pivot.x * Math.abs(scaleX);\n this._pixiContainer.position.y =\n this._object.getY() + this._pixiContainer.pivot.y * Math.abs(scaleY);\n\n this._pixiContainer.rotation = gdjs.toRad(this._object.angle);\n this._pixiContainer.scale.x = scaleX;\n this._pixiContainer.scale.y = scaleY;\n this._pixiContainer.visible = !this._object.hidden;\n this._pixiContainer.alpha = opacity / 255;\n\n this._isContainerDirty = false;\n }\n\n /**\n * Call this to make sure the object is ready to be rendered.\n */\n ensureUpToDate() {\n if (this._isContainerDirty) {\n this._updatePIXIContainer();\n }\n }\n\n update(): void {\n this._isContainerDirty = true;\n }\n\n updateX(): void {\n const scaleX = this._object.getScaleX();\n this._pixiContainer.position.x =\n this._object.x + this._pixiContainer.pivot.x * Math.abs(scaleX);\n }\n\n updateY(): void {\n const scaleY = this._object.getScaleY();\n this._pixiContainer.position.y =\n this._object.y + this._pixiContainer.pivot.y * Math.abs(scaleY);\n }\n\n updateAngle(): void {\n this._pixiContainer.rotation = gdjs.toRad(this._object.angle);\n }\n\n updateOpacity(): void {\n const opacity = this._object.getOpacity();\n this._pixiContainer.alpha = opacity / 255;\n }\n\n updateVisibility(): void {\n this._pixiContainer.visible = !this._object.hidden;\n }\n\n getPIXIContainer() {\n return this._pixiContainer;\n }\n\n getPIXIRenderer() {\n return null;\n }\n\n setLayerIndex(layer: gdjs.RuntimeLayer, index: float): void {\n const layerPixiRenderer: gdjs.LayerPixiRenderer = layer.getRenderer();\n let layerPixiObject:\n | PIXI.Container\n | PIXI.Sprite\n | null = layerPixiRenderer.getRendererObject();\n if (layer.isLightingLayer()) {\n layerPixiObject = layerPixiRenderer.getLightingSprite();\n }\n if (!layerPixiObject) {\n return;\n }\n if (this._pixiContainer.children.indexOf(layerPixiObject) === index) {\n return;\n }\n this._pixiContainer.removeChild(layerPixiObject);\n this._pixiContainer.addChildAt(layerPixiObject, index);\n }\n\n static getAnimationFrameTextureManager(\n imageManager: gdjs.PixiImageManager\n ) {\n return gdjs.SpriteRuntimeObjectPixiRenderer.getAnimationFrameTextureManager(\n imageManager\n );\n }\n }\n\n // Register the class to let the engine use it.\n export type CustomRuntimeObject2DRenderer = gdjs.CustomRuntimeObject2DPixiRenderer;\n export const CustomRuntimeObject2DRenderer =\n gdjs.CustomRuntimeObject2DPixiRenderer;\n}\n"],
5
+ "mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CAIS,OACgD,CAerD,YACE,EACA,EACA,EACA,CAfF,uBAA6B,GAC7B,gBAAmC,KACnC,yBAA6C,KAc3C,KAAK,QAAU,EACf,KAAK,mBAAqB,EAI1B,KAAK,eAAiB,GAAI,MAAK,UAC/B,KAAK,gCAAkC,GAGvC,KAAK,eAAe,iBAAmB,GACvC,KAAK,WAAa,KAElB,KAAM,GAAQ,EAAO,SAAS,IAC9B,AAAI,GACF,EACG,cACA,kBAAkB,KAAK,eAAgB,EAAO,aAIrD,aACE,EACA,EACA,CACA,KAAK,QAAU,EACf,KAAK,kBAAoB,GACzB,KAAM,GAAQ,EAAO,SAAS,IAC9B,AAAI,GACF,EACG,cACA,kBAAkB,KAAK,eAAgB,EAAO,aAIrD,mBAAoB,CAClB,MAAO,MAAK,eAGd,qBAA6C,CAC3C,MAAO,MAMT,sBAAuB,CACrB,KAAM,GAAS,KAAK,QAAQ,YACtB,EAAS,KAAK,QAAQ,YACtB,EAAU,KAAK,QAAQ,aAC7B,KAAK,eAAe,MAAM,EAAI,KAAK,QAAQ,qBAC3C,KAAK,eAAe,MAAM,EAAI,KAAK,QAAQ,qBAC3C,KAAK,eAAe,SAAS,EAC3B,KAAK,QAAQ,OAAS,KAAK,eAAe,MAAM,EAAI,KAAK,IAAI,GAC/D,KAAK,eAAe,SAAS,EAC3B,KAAK,QAAQ,OAAS,KAAK,eAAe,MAAM,EAAI,KAAK,IAAI,GAE/D,KAAK,eAAe,SAAW,EAAK,MAAM,KAAK,QAAQ,OACvD,KAAK,eAAe,MAAM,EAAI,EAC9B,KAAK,eAAe,MAAM,EAAI,EAC9B,KAAK,eAAe,QAAU,CAAC,KAAK,QAAQ,OAC5C,KAAK,eAAe,MAAQ,EAAU,IAEtC,KAAK,kBAAoB,GAM3B,gBAAiB,CACf,AAAI,KAAK,mBACP,KAAK,uBAIT,QAAe,CACb,KAAK,kBAAoB,GAG3B,SAAgB,CACd,KAAM,GAAS,KAAK,QAAQ,YAC5B,KAAK,eAAe,SAAS,EAC3B,KAAK,QAAQ,EAAI,KAAK,eAAe,MAAM,EAAI,KAAK,IAAI,GAG5D,SAAgB,CACd,KAAM,GAAS,KAAK,QAAQ,YAC5B,KAAK,eAAe,SAAS,EAC3B,KAAK,QAAQ,EAAI,KAAK,eAAe,MAAM,EAAI,KAAK,IAAI,GAG5D,aAAoB,CAClB,KAAK,eAAe,SAAW,EAAK,MAAM,KAAK,QAAQ,OAGzD,eAAsB,CACpB,KAAM,GAAU,KAAK,QAAQ,aAC7B,KAAK,eAAe,MAAQ,EAAU,IAGxC,kBAAyB,CACvB,KAAK,eAAe,QAAU,CAAC,KAAK,QAAQ,OAG9C,kBAAmB,CACjB,MAAO,MAAK,eAGd,iBAAkB,CAChB,MAAO,MAGT,cAAc,EAA0B,EAAoB,CAC1D,KAAM,GAA4C,EAAM,cACxD,GAAI,GAGO,EAAkB,oBAI7B,AAHI,EAAM,mBACR,GAAkB,EAAkB,qBAElC,EAAC,GAGD,KAAK,eAAe,SAAS,QAAQ,KAAqB,GAG9D,MAAK,eAAe,YAAY,GAChC,KAAK,eAAe,WAAW,EAAiB,UAG3C,iCACL,EACA,CACA,MAAO,GAAK,gCAAgC,gCAC1C,IA3JC,EAAM,oCAkKA,gCACX,EAAK,oCAvKC",
6
+ "names": []
7
+ }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(g){class R{constructor(l){this._debugDraw=null;this._debugDrawContainer=null;this._instanceContainer=l,this._debugDrawRenderedObjectsPoints={},this._debugDraw=null}getRendererObject(){return this._debugDrawContainer}renderDebugDraw(l,h,D,_){const P=this._instanceContainer.getRenderer().getRendererObject();(!this._debugDraw||!this._debugDrawContainer)&&(this._debugDrawContainer=new PIXI.Container,this._debugDraw=new PIXI.Graphics,this._debugDrawContainer.addChild(this._debugDraw),P.addChild(this._debugDrawContainer));const t=this._debugDraw;for(let i in this._debugDrawRenderedObjectsPoints)this._debugDrawRenderedObjectsPoints[i].wasRendered=!1;const u=(i,e,n,c,r)=>{t.line.color=n,t.fill.color=n,t.drawCircle(c,r,3),D&&(i[e]||(i[e]=new PIXI.Text(e,{fill:n,fontSize:12}),this._debugDrawContainer.addChild(i[e])),i[e].position.set(c,r))};t.clear(),t.beginFill(),t.alpha=.8,t.lineStyle(2,255,1);const s=[0,0];for(let i=0;i<l.length;i++){const e=l[i],n=this._instanceContainer.getLayer(e.getLayer());if((!e.isVisible()||!n.isVisible())&&!h||!e.getRendererObject())continue;const r=e.getAABB();t.fill.alpha=.2,t.line.color=7835368,t.fill.color=7835368;const o=[];o.push.apply(o,n.applyLayerTransformation(r.min[0],r.min[1],0,s)),o.push.apply(o,n.applyLayerTransformation(r.max[0],r.min[1],0,s)),o.push.apply(o,n.applyLayerTransformation(r.max[0],r.max[1],0,s)),o.push.apply(o,n.applyLayerTransformation(r.min[0],r.max[1],0,s)),t.drawPolygon(o)}for(let i=0;i<l.length;i++){const e=l[i],n=this._instanceContainer.getLayer(e.getLayer());if((!e.isVisible()||!n.isVisible())&&!h||!e.getRendererObject())continue;const r=e.id;this._debugDrawRenderedObjectsPoints[r]||(this._debugDrawRenderedObjectsPoints[r]={wasRendered:!0,points:{}});const o=this._debugDrawRenderedObjectsPoints[r];o.wasRendered=!0;const p=e.getHitBoxes();for(let a=0;a<p.length;a++){const d=[];p[a].vertices.forEach(b=>{b=n.applyLayerTransformation(b[0],b[1],0,s),d.push(b[0]),d.push(b[1])}),t.fill.alpha=0,t.line.alpha=.5,t.line.color=16711680,t.drawPolygon(d)}t.fill.alpha=.3;const w=n.applyLayerTransformation(e.getCenterXInScene(),e.getCenterYInScene(),0,s);u(o.points,"Center",16776960,w[0],w[1]);const f=n.applyLayerTransformation(e.getX(),e.getY(),0,s);if(u(o.points,"Position",16711680,f[0],f[1]),e instanceof g.SpriteRuntimeObject){let a=e.getPointPosition("origin");(Math.abs(a[0]-f[0])>=1||Math.abs(a[1]-f[1])>=1)&&(a=n.applyLayerTransformation(a[0],a[1],0,s),u(o.points,"Origin",16711680,a[0],a[1]))}if(_&&e instanceof g.SpriteRuntimeObject){if(!e._animationFrame)continue;for(const a in e._animationFrame.points.items){let d=e.getPointPosition(a);d=n.applyLayerTransformation(d[0],d[1],0,s),u(o.points,a,255,d[0],d[1])}}}for(const i in this._debugDrawRenderedObjectsPoints){const e=this._debugDrawRenderedObjectsPoints[i];if(e.wasRendered)continue;const n=e.points;for(const c in n)this._debugDrawContainer.removeChild(n[c])}t.endFill()}clearDebugDraw(){this._debugDraw&&this._debugDraw.clear(),this._debugDrawContainer&&(this._debugDrawContainer.destroy({children:!0}),this._instanceContainer.getRenderer().getRendererObject().removeChild(this._debugDrawContainer)),this._debugDraw=null,this._debugDrawContainer=null,this._debugDrawRenderedObjectsPoints={}}}g.DebuggerPixiRenderer=R,g.DebuggerRenderer=g.DebuggerPixiRenderer})(gdjs||(gdjs={}));
1
+ var gdjs;(function(g){class R{constructor(d){this._debugDraw=null;this._debugDrawContainer=null;this._instanceContainer=d,this._debugDrawRenderedObjectsPoints={},this._debugDraw=null}getRendererObject(){return this._debugDrawContainer}renderDebugDraw(d,h,P,_){const p=this._instanceContainer.getRenderer().getRendererObject();(!this._debugDraw||!this._debugDrawContainer)&&(this._debugDrawContainer=new PIXI.Container,this._debugDraw=new PIXI.Graphics,this._debugDrawContainer.addChild(this._debugDraw),p&&p.addChild(this._debugDrawContainer));const t=this._debugDraw;for(let r in this._debugDrawRenderedObjectsPoints)this._debugDrawRenderedObjectsPoints[r].wasRendered=!1;const u=(r,e,n,c,i)=>{t.line.color=n,t.fill.color=n,t.drawCircle(c,i,3),P&&(r[e]||(r[e]=new PIXI.Text(e,{fill:n,fontSize:12}),this._debugDrawContainer.addChild(r[e])),r[e].position.set(c,i))};t.clear(),t.beginFill(),t.alpha=.8,t.lineStyle(2,255,1);const l=[0,0];for(let r=0;r<d.length;r++){const e=d[r],n=this._instanceContainer.getLayer(e.getLayer());if((!e.isVisible()||!n.isVisible())&&!h||!e.getRendererObject())continue;const i=e.getAABB();t.fill.alpha=.2,t.line.color=7835368,t.fill.color=7835368;const o=[];o.push.apply(o,n.applyLayerTransformation(i.min[0],i.min[1],0,l)),o.push.apply(o,n.applyLayerTransformation(i.max[0],i.min[1],0,l)),o.push.apply(o,n.applyLayerTransformation(i.max[0],i.max[1],0,l)),o.push.apply(o,n.applyLayerTransformation(i.min[0],i.max[1],0,l)),t.drawPolygon(o)}for(let r=0;r<d.length;r++){const e=d[r],n=this._instanceContainer.getLayer(e.getLayer());if((!e.isVisible()||!n.isVisible())&&!h||!e.getRendererObject())continue;const i=e.id;this._debugDrawRenderedObjectsPoints[i]||(this._debugDrawRenderedObjectsPoints[i]={wasRendered:!0,points:{}});const o=this._debugDrawRenderedObjectsPoints[i];o.wasRendered=!0;const w=e.getHitBoxes();for(let a=0;a<w.length;a++){const b=[];w[a].vertices.forEach(s=>{s=n.applyLayerTransformation(s[0],s[1],0,l),b.push(s[0]),b.push(s[1])}),t.fill.alpha=0,t.line.alpha=.5,t.line.color=16711680,t.drawPolygon(b)}t.fill.alpha=.3;const D=n.applyLayerTransformation(e.getCenterXInScene(),e.getCenterYInScene(),0,l);u(o.points,"Center",16776960,D[0],D[1]);const f=n.applyLayerTransformation(e.getX(),e.getY(),0,l);if(u(o.points,"Position",16711680,f[0],f[1]),e instanceof g.SpriteRuntimeObject){let a=e.getPointPosition("origin");(Math.abs(a[0]-f[0])>=1||Math.abs(a[1]-f[1])>=1)&&(a=n.applyLayerTransformation(a[0],a[1],0,l),u(o.points,"Origin",16711680,a[0],a[1]))}if(_&&e instanceof g.SpriteRuntimeObject){const a=e._animator.getCurrentFrame();if(!a)continue;for(const b in a.points.items){let s=e.getPointPosition(b);s=n.applyLayerTransformation(s[0],s[1],0,l),u(o.points,b,255,s[0],s[1])}}}for(const r in this._debugDrawRenderedObjectsPoints){const e=this._debugDrawRenderedObjectsPoints[r];if(e.wasRendered)continue;const n=e.points;for(const c in n)this._debugDrawContainer.removeChild(n[c])}t.endFill()}clearDebugDraw(){if(this._debugDraw&&this._debugDraw.clear(),this._debugDrawContainer){this._debugDrawContainer.destroy({children:!0});const d=this._instanceContainer.getRenderer().getRendererObject();d&&d.removeChild(this._debugDrawContainer)}this._debugDraw=null,this._debugDrawContainer=null,this._debugDrawRenderedObjectsPoints={}}}g.DebuggerPixiRenderer=R,g.DebuggerRenderer=g.DebuggerPixiRenderer})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=DebuggerPixiRenderer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../GDevelop/GDJS/Runtime/pixi-renderers/DebuggerPixiRenderer.ts"],
4
- "sourcesContent": ["namespace gdjs {\n /**\n * A renderer for debug instances location of a container using Pixi.js.\n *\n * @see gdjs.CustomObjectPixiRenderer\n */\n export class DebuggerPixiRenderer {\n _instanceContainer: gdjs.RuntimeInstanceContainer;\n _debugDraw: PIXI.Graphics | null = null;\n _debugDrawContainer: PIXI.Container | null = null;\n _debugDrawRenderedObjectsPoints: Record<\n number,\n {\n wasRendered: boolean;\n points: Record<string, PIXI.Text>;\n }\n >;\n\n constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n this._instanceContainer = instanceContainer;\n this._debugDrawRenderedObjectsPoints = {};\n this._debugDraw = null;\n }\n\n getRendererObject() {\n return this._debugDrawContainer;\n }\n\n /**\n * Render graphics for debugging purpose. Activate this in `gdjs.RuntimeScene`,\n * in the `renderAndStep` method.\n * @see gdjs.RuntimeInstanceContainer#enableDebugDraw\n */\n renderDebugDraw(\n instances: gdjs.RuntimeObject[],\n showHiddenInstances: boolean,\n showPointsNames: boolean,\n showCustomPoints: boolean\n ) {\n const pixiContainer = this._instanceContainer\n .getRenderer()\n .getRendererObject();\n if (!this._debugDraw || !this._debugDrawContainer) {\n this._debugDrawContainer = new PIXI.Container();\n this._debugDraw = new PIXI.Graphics();\n\n // Add on top of all layers:\n this._debugDrawContainer.addChild(this._debugDraw);\n pixiContainer.addChild(this._debugDrawContainer);\n }\n const debugDraw = this._debugDraw;\n\n // Reset the boolean \"wasRendered\" of all points of objects to false:\n for (let id in this._debugDrawRenderedObjectsPoints) {\n this._debugDrawRenderedObjectsPoints[id].wasRendered = false;\n }\n\n const renderObjectPoint = (\n points: Record<string, PIXI.Text>,\n name: string,\n fillColor: integer,\n x: float,\n y: float\n ) => {\n debugDraw.line.color = fillColor;\n debugDraw.fill.color = fillColor;\n debugDraw.drawCircle(x, y, 3);\n\n if (showPointsNames) {\n if (!points[name]) {\n points[name] = new PIXI.Text(name, {\n fill: fillColor,\n fontSize: 12,\n });\n\n this._debugDrawContainer!.addChild(points[name]);\n }\n\n points[name].position.set(x, y);\n }\n };\n\n debugDraw.clear();\n debugDraw.beginFill();\n debugDraw.alpha = 0.8;\n debugDraw.lineStyle(2, 0x0000ff, 1);\n\n // Draw AABB\n const workingPoint: FloatPoint = [0, 0];\n for (let i = 0; i < instances.length; i++) {\n const object = instances[i];\n const layer = this._instanceContainer.getLayer(object.getLayer());\n\n if (\n (!object.isVisible() || !layer.isVisible()) &&\n !showHiddenInstances\n ) {\n continue;\n }\n\n const rendererObject = object.getRendererObject();\n if (!rendererObject) {\n continue;\n }\n const aabb = object.getAABB();\n debugDraw.fill.alpha = 0.2;\n debugDraw.line.color = 0x778ee8;\n debugDraw.fill.color = 0x778ee8;\n\n const polygon: float[] = [];\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.min[0],\n aabb.min[1],\n 0,\n workingPoint\n )\n );\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.max[0],\n aabb.min[1],\n 0,\n workingPoint\n )\n );\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.max[0],\n aabb.max[1],\n 0,\n workingPoint\n )\n );\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.min[0],\n aabb.max[1],\n 0,\n workingPoint\n )\n );\n\n debugDraw.drawPolygon(polygon);\n }\n\n // Draw hitboxes and points\n for (let i = 0; i < instances.length; i++) {\n const object = instances[i];\n const layer = this._instanceContainer.getLayer(object.getLayer());\n\n if (\n (!object.isVisible() || !layer.isVisible()) &&\n !showHiddenInstances\n ) {\n continue;\n }\n\n const rendererObject = object.getRendererObject();\n if (!rendererObject) {\n continue;\n }\n\n // Create the structure to store the points in memory\n const id = object.id;\n if (!this._debugDrawRenderedObjectsPoints[id]) {\n this._debugDrawRenderedObjectsPoints[id] = {\n wasRendered: true,\n points: {},\n };\n }\n const renderedObjectPoints = this._debugDrawRenderedObjectsPoints[id];\n renderedObjectPoints.wasRendered = true;\n\n // Draw hitboxes (sub-optimal performance)\n const hitboxes = object.getHitBoxes();\n for (let j = 0; j < hitboxes.length; j++) {\n // Note that this conversion is sub-optimal, but we don't care\n // as this is for debug draw.\n const polygon: float[] = [];\n hitboxes[j].vertices.forEach((point) => {\n point = layer.applyLayerTransformation(\n point[0],\n point[1],\n 0,\n workingPoint\n );\n\n polygon.push(point[0]);\n polygon.push(point[1]);\n });\n debugDraw.fill.alpha = 0;\n debugDraw.line.alpha = 0.5;\n debugDraw.line.color = 0xff0000;\n debugDraw.drawPolygon(polygon);\n }\n\n // Draw points\n debugDraw.fill.alpha = 0.3;\n\n // Draw Center point\n const centerPoint = layer.applyLayerTransformation(\n object.getCenterXInScene(),\n object.getCenterYInScene(),\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n 'Center',\n 0xffff00,\n centerPoint[0],\n centerPoint[1]\n );\n\n // Draw position point\n const positionPoint = layer.applyLayerTransformation(\n object.getX(),\n object.getY(),\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n 'Position',\n 0xff0000,\n positionPoint[0],\n positionPoint[1]\n );\n\n // Draw Origin point\n if (object instanceof gdjs.SpriteRuntimeObject) {\n let originPoint = object.getPointPosition('origin');\n // When there is neither rotation nor flipping,\n // the origin point is over the position point.\n if (\n Math.abs(originPoint[0] - positionPoint[0]) >= 1 ||\n Math.abs(originPoint[1] - positionPoint[1]) >= 1\n ) {\n originPoint = layer.applyLayerTransformation(\n originPoint[0],\n originPoint[1],\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n 'Origin',\n 0xff0000,\n originPoint[0],\n originPoint[1]\n );\n }\n }\n\n // Draw custom point\n if (showCustomPoints && object instanceof gdjs.SpriteRuntimeObject) {\n if (!object._animationFrame) continue;\n\n for (const customPointName in object._animationFrame.points.items) {\n let customPoint = object.getPointPosition(customPointName);\n\n customPoint = layer.applyLayerTransformation(\n customPoint[0],\n customPoint[1],\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n customPointName,\n 0x0000ff,\n customPoint[0],\n customPoint[1]\n );\n }\n }\n }\n\n // Clean any point text from an object that is not rendered.\n for (const objectID in this._debugDrawRenderedObjectsPoints) {\n const renderedObjectPoints = this._debugDrawRenderedObjectsPoints[\n objectID\n ];\n if (renderedObjectPoints.wasRendered) continue;\n\n const points = renderedObjectPoints.points;\n for (const name in points) {\n this._debugDrawContainer.removeChild(points[name]);\n }\n }\n\n debugDraw.endFill();\n }\n\n clearDebugDraw(): void {\n if (this._debugDraw) {\n this._debugDraw.clear();\n }\n\n if (this._debugDrawContainer) {\n this._debugDrawContainer.destroy({\n children: true,\n });\n const pixiContainer: PIXI.Container = this._instanceContainer\n .getRenderer()\n .getRendererObject();\n pixiContainer.removeChild(this._debugDrawContainer);\n }\n this._debugDraw = null;\n this._debugDrawContainer = null;\n this._debugDrawRenderedObjectsPoints = {};\n }\n }\n\n // Register the class to let the engine use it.\n export type DebuggerRenderer = gdjs.DebuggerPixiRenderer;\n export const DebuggerRenderer = gdjs.DebuggerPixiRenderer;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["namespace gdjs {\n /**\n * A renderer for debug instances location of a container using Pixi.js.\n *\n * @see gdjs.CustomRuntimeObject2DPixiRenderer\n */\n export class DebuggerPixiRenderer {\n _instanceContainer: gdjs.RuntimeInstanceContainer;\n _debugDraw: PIXI.Graphics | null = null;\n _debugDrawContainer: PIXI.Container | null = null;\n _debugDrawRenderedObjectsPoints: Record<\n number,\n {\n wasRendered: boolean;\n points: Record<string, PIXI.Text>;\n }\n >;\n\n constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n this._instanceContainer = instanceContainer;\n this._debugDrawRenderedObjectsPoints = {};\n this._debugDraw = null;\n }\n\n getRendererObject() {\n return this._debugDrawContainer;\n }\n\n /**\n * Render graphics for debugging purpose. Activate this in `gdjs.RuntimeScene`,\n * in the `renderAndStep` method.\n * @see gdjs.RuntimeInstanceContainer#enableDebugDraw\n */\n renderDebugDraw(\n instances: gdjs.RuntimeObject[],\n showHiddenInstances: boolean,\n showPointsNames: boolean,\n showCustomPoints: boolean\n ) {\n const pixiContainer = this._instanceContainer\n .getRenderer()\n .getRendererObject();\n if (!this._debugDraw || !this._debugDrawContainer) {\n this._debugDrawContainer = new PIXI.Container();\n this._debugDraw = new PIXI.Graphics();\n\n // Add on top of all layers:\n this._debugDrawContainer.addChild(this._debugDraw);\n if (pixiContainer) {\n pixiContainer.addChild(this._debugDrawContainer);\n }\n }\n const debugDraw = this._debugDraw;\n\n // Reset the boolean \"wasRendered\" of all points of objects to false:\n for (let id in this._debugDrawRenderedObjectsPoints) {\n this._debugDrawRenderedObjectsPoints[id].wasRendered = false;\n }\n\n const renderObjectPoint = (\n points: Record<string, PIXI.Text>,\n name: string,\n fillColor: integer,\n x: float,\n y: float\n ) => {\n debugDraw.line.color = fillColor;\n debugDraw.fill.color = fillColor;\n debugDraw.drawCircle(x, y, 3);\n\n if (showPointsNames) {\n if (!points[name]) {\n points[name] = new PIXI.Text(name, {\n fill: fillColor,\n fontSize: 12,\n });\n\n this._debugDrawContainer!.addChild(points[name]);\n }\n\n points[name].position.set(x, y);\n }\n };\n\n debugDraw.clear();\n debugDraw.beginFill();\n debugDraw.alpha = 0.8;\n debugDraw.lineStyle(2, 0x0000ff, 1);\n\n // Draw AABB\n const workingPoint: FloatPoint = [0, 0];\n for (let i = 0; i < instances.length; i++) {\n const object = instances[i];\n const layer = this._instanceContainer.getLayer(object.getLayer());\n\n if (\n (!object.isVisible() || !layer.isVisible()) &&\n !showHiddenInstances\n ) {\n continue;\n }\n\n const rendererObject = object.getRendererObject();\n if (!rendererObject) {\n continue;\n }\n const aabb = object.getAABB();\n debugDraw.fill.alpha = 0.2;\n debugDraw.line.color = 0x778ee8;\n debugDraw.fill.color = 0x778ee8;\n\n const polygon: float[] = [];\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.min[0],\n aabb.min[1],\n 0,\n workingPoint\n )\n );\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.max[0],\n aabb.min[1],\n 0,\n workingPoint\n )\n );\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.max[0],\n aabb.max[1],\n 0,\n workingPoint\n )\n );\n polygon.push.apply(\n polygon,\n layer.applyLayerTransformation(\n aabb.min[0],\n aabb.max[1],\n 0,\n workingPoint\n )\n );\n\n debugDraw.drawPolygon(polygon);\n }\n\n // Draw hitboxes and points\n for (let i = 0; i < instances.length; i++) {\n const object = instances[i];\n const layer = this._instanceContainer.getLayer(object.getLayer());\n\n if (\n (!object.isVisible() || !layer.isVisible()) &&\n !showHiddenInstances\n ) {\n continue;\n }\n\n const rendererObject = object.getRendererObject();\n if (!rendererObject) {\n continue;\n }\n\n // Create the structure to store the points in memory\n const id = object.id;\n if (!this._debugDrawRenderedObjectsPoints[id]) {\n this._debugDrawRenderedObjectsPoints[id] = {\n wasRendered: true,\n points: {},\n };\n }\n const renderedObjectPoints = this._debugDrawRenderedObjectsPoints[id];\n renderedObjectPoints.wasRendered = true;\n\n // Draw hitboxes (sub-optimal performance)\n const hitboxes = object.getHitBoxes();\n for (let j = 0; j < hitboxes.length; j++) {\n // Note that this conversion is sub-optimal, but we don't care\n // as this is for debug draw.\n const polygon: float[] = [];\n hitboxes[j].vertices.forEach((point) => {\n point = layer.applyLayerTransformation(\n point[0],\n point[1],\n 0,\n workingPoint\n );\n\n polygon.push(point[0]);\n polygon.push(point[1]);\n });\n debugDraw.fill.alpha = 0;\n debugDraw.line.alpha = 0.5;\n debugDraw.line.color = 0xff0000;\n debugDraw.drawPolygon(polygon);\n }\n\n // Draw points\n debugDraw.fill.alpha = 0.3;\n\n // Draw Center point\n const centerPoint = layer.applyLayerTransformation(\n object.getCenterXInScene(),\n object.getCenterYInScene(),\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n 'Center',\n 0xffff00,\n centerPoint[0],\n centerPoint[1]\n );\n\n // Draw position point\n const positionPoint = layer.applyLayerTransformation(\n object.getX(),\n object.getY(),\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n 'Position',\n 0xff0000,\n positionPoint[0],\n positionPoint[1]\n );\n\n // Draw Origin point\n if (object instanceof gdjs.SpriteRuntimeObject) {\n let originPoint = object.getPointPosition('origin');\n // When there is neither rotation nor flipping,\n // the origin point is over the position point.\n if (\n Math.abs(originPoint[0] - positionPoint[0]) >= 1 ||\n Math.abs(originPoint[1] - positionPoint[1]) >= 1\n ) {\n originPoint = layer.applyLayerTransformation(\n originPoint[0],\n originPoint[1],\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n 'Origin',\n 0xff0000,\n originPoint[0],\n originPoint[1]\n );\n }\n }\n\n // Draw custom point\n if (showCustomPoints && object instanceof gdjs.SpriteRuntimeObject) {\n const animationFrame = object._animator.getCurrentFrame();\n if (!animationFrame) continue;\n\n for (const customPointName in animationFrame.points.items) {\n let customPoint = object.getPointPosition(customPointName);\n\n customPoint = layer.applyLayerTransformation(\n customPoint[0],\n customPoint[1],\n 0,\n workingPoint\n );\n\n renderObjectPoint(\n renderedObjectPoints.points,\n customPointName,\n 0x0000ff,\n customPoint[0],\n customPoint[1]\n );\n }\n }\n }\n\n // Clean any point text from an object that is not rendered.\n for (const objectID in this._debugDrawRenderedObjectsPoints) {\n const renderedObjectPoints = this._debugDrawRenderedObjectsPoints[\n objectID\n ];\n if (renderedObjectPoints.wasRendered) continue;\n\n const points = renderedObjectPoints.points;\n for (const name in points) {\n this._debugDrawContainer.removeChild(points[name]);\n }\n }\n\n debugDraw.endFill();\n }\n\n clearDebugDraw(): void {\n if (this._debugDraw) {\n this._debugDraw.clear();\n }\n\n if (this._debugDrawContainer) {\n this._debugDrawContainer.destroy({\n children: true,\n });\n const pixiContainer: PIXI.Container | null = this._instanceContainer\n .getRenderer()\n .getRendererObject();\n if (pixiContainer) {\n pixiContainer.removeChild(this._debugDrawContainer);\n }\n }\n this._debugDraw = null;\n this._debugDrawContainer = null;\n this._debugDrawRenderedObjectsPoints = {};\n }\n }\n\n // Register the class to let the engine use it.\n export type DebuggerRenderer = gdjs.DebuggerPixiRenderer;\n export const DebuggerRenderer = gdjs.DebuggerPixiRenderer;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- var gdjs;(function(h){const p=new h.Logger("LayerPixiRenderer"),l=class{constructor(e,t,r){this._lightingSprite=null;this._renderTexture=null;this._oldWidth=null;this._oldHeight=null;this._threeGroup=null;this._threeScene=null;this._threeCamera=null;this._threeCameraDirty=!1;this._threeEffectComposer=null;this._threePlaneTexture=null;this._threePlaneGeometry=null;this._threePlaneMaterial=null;this._threePlaneMesh=null;this._pixiContainer=new PIXI.Container,this._pixiContainer.sortableChildren=!0,this._layer=e,this._isLightingLayer=e.isLightingLayer(),t.getRendererObject().addChild(this._pixiContainer),this._pixiContainer.filters=[];const s=r.getPIXIRenderer();this._isLightingLayer?(this._clearColor=e.getClearColor(),this._setupLightingRendering(s,t)):(this._clearColor=[...h.hexNumberToRGBArray(this._layer.getRuntimeScene().getBackgroundColor()),0],this._setup3DRendering(s,t))}onCreated(){this._update3DCameraAspectAndPosition()}onGameResolutionResized(){this._update3DCameraAspectAndPosition()}_update3DCameraAspectAndPosition(){if(!!this._threeCamera){if(this._threeCamera instanceof THREE.OrthographicCamera){const e=this._layer.getWidth(),t=this._layer.getHeight();this._threeCamera.left=-e/2,this._threeCamera.right=e/2,this._threeCamera.top=t/2,this._threeCamera.bottom=-t/2}else this._threeCamera.aspect=this._layer.getWidth()/this._layer.getHeight();this._threeCamera.updateProjectionMatrix(),this.updatePosition()}}getRendererObject(){return this._pixiContainer}getThreeScene(){return this._threeScene}getThreeCamera(){return this._threeCamera}getThreeEffectComposer(){return this._threeEffectComposer}addPostProcessingPass(e){if(!this._threeEffectComposer)return;const t=this._layer.getRuntimeScene().getGame(),r=this._threeEffectComposer.passes.length-(t.getAntialiasingMode()==="none"?1:2);this._threeEffectComposer.insertPass(e,r)}removePostProcessingPass(e){!this._threeEffectComposer||this._threeEffectComposer.removePass(e)}hasPostProcessingPass(){if(!this._threeEffectComposer)return!1;const t=this._layer.getRuntimeScene().getGame().getAntialiasingMode()==="none"?2:3;return this._threeEffectComposer.passes.length>t}getLightingSprite(){return this._lightingSprite}_setup3DRendering(e,t){if(typeof THREE!="undefined")if(this._layer instanceof h.Layer){if(this._layer.getRenderingType()===h.RuntimeLayerRenderingType.THREE_D||this._layer.getRenderingType()===h.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D){if(this._threeScene||this._threeGroup||this._threeCamera)throw new Error("Tried to setup 3D rendering for a layer that is already set up.");if(this._threeScene=new THREE.Scene,this._threeScene.scale.y=-1,this._threeGroup=new THREE.Group,this._threeScene.add(this._threeGroup),this._layer.getCameraType()===h.RuntimeLayerCameraType.ORTHOGRAPHIC){const n=this._layer.getWidth(),a=this._layer.getHeight();this._threeCamera=new THREE.OrthographicCamera(-n/2,n/2,a/2,-a/2,this._layer.getInitialCamera3DNearPlaneDistance(),this._layer.getInitialCamera3DFarPlaneDistance())}else this._threeCamera=new THREE.PerspectiveCamera(this._layer.getInitialCamera3DFieldOfView(),1,this._layer.getInitialCamera3DNearPlaneDistance(),this._layer.getInitialCamera3DFarPlaneDistance());this._threeCamera.rotation.order="ZYX";const r=this._layer.getRuntimeScene().getGame(),s=r.getRenderer().getThreeRenderer();if(s&&(this._threeEffectComposer=new THREE_ADDONS.EffectComposer(s),this._threeEffectComposer.addPass(new THREE_ADDONS.RenderPass(this._threeScene,this._threeCamera)),r.getAntialiasingMode()!=="none"&&this._threeEffectComposer.addPass(new THREE_ADDONS.SMAAPass(r.getGameResolutionWidth(),r.getGameResolutionHeight())),this._threeEffectComposer.addPass(new THREE_ADDONS.OutputPass)),this._layer.getRenderingType()===h.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D){if(this._renderTexture||this._threePlaneGeometry||this._threePlaneMaterial||this._threePlaneTexture||this._threePlaneMesh)throw new Error("Tried to setup PixiJS plane for 2D rendering in 3D for a layer that is already set up.");this._createPixiRenderTexture(e),this._threePlaneGeometry=new THREE.PlaneGeometry(1,1);const n=1,a=1,u=n*a,g=new Uint8Array(4*u),_=new THREE.DataTexture(g,n,a);_.needsUpdate=!0,this._threePlaneTexture=_,this._threePlaneTexture.generateMipmaps=!1;const d=this._layer.getRuntimeScene().getGame().getScaleMode()==="nearest"?THREE.NearestFilter:THREE.LinearFilter;this._threePlaneTexture.minFilter=d,this._threePlaneTexture.magFilter=d,this._threePlaneTexture.wrapS=THREE.ClampToEdgeWrapping,this._threePlaneTexture.wrapT=THREE.ClampToEdgeWrapping;const i={vertexShader:`
1
+ var gdjs;(function(h){const p=new h.Logger("LayerPixiRenderer"),l=class{constructor(e,t,r){this._lightingSprite=null;this._renderTexture=null;this._oldWidth=null;this._oldHeight=null;this._threeGroup=null;this._threeScene=null;this._threeCamera=null;this._threeCameraDirty=!1;this._threeEffectComposer=null;this._threePlaneTexture=null;this._threePlaneGeometry=null;this._threePlaneMaterial=null;this._threePlaneMesh=null;this._pixiContainer=new PIXI.Container,this._pixiContainer.sortableChildren=!0,this._layer=e,this._isLightingLayer=e.isLightingLayer();const s=t.getRendererObject();s&&s.addChild(this._pixiContainer),this._pixiContainer.filters=[];const a=r.getPIXIRenderer();this._isLightingLayer?(this._clearColor=e.getClearColor(),this._setupLightingRendering(a,t)):(this._clearColor=[...h.hexNumberToRGBArray(this._layer.getRuntimeScene().getBackgroundColor()),0],this._setup3DRendering(a,t))}onCreated(){this._update3DCameraAspectAndPosition()}onGameResolutionResized(){this._update3DCameraAspectAndPosition()}_update3DCameraAspectAndPosition(){if(!!this._threeCamera){if(this._threeCamera instanceof THREE.OrthographicCamera){const e=this._layer.getWidth(),t=this._layer.getHeight();this._threeCamera.left=-e/2,this._threeCamera.right=e/2,this._threeCamera.top=t/2,this._threeCamera.bottom=-t/2}else this._threeCamera.aspect=this._layer.getWidth()/this._layer.getHeight();this._threeCamera.updateProjectionMatrix(),this.updatePosition()}}getRendererObject(){return this._pixiContainer}getThreeScene(){return this._threeScene}getThreeCamera(){return this._threeCamera}getThreeEffectComposer(){return this._threeEffectComposer}addPostProcessingPass(e){if(!this._threeEffectComposer)return;const t=this._layer.getRuntimeScene().getGame(),r=this._threeEffectComposer.passes.length-(t.getAntialiasingMode()==="none"?1:2);this._threeEffectComposer.insertPass(e,r)}removePostProcessingPass(e){!this._threeEffectComposer||this._threeEffectComposer.removePass(e)}hasPostProcessingPass(){if(!this._threeEffectComposer)return!1;const t=this._layer.getRuntimeScene().getGame().getAntialiasingMode()==="none"?2:3;return this._threeEffectComposer.passes.length>t}getLightingSprite(){return this._lightingSprite}_setup3DRendering(e,t){if(typeof THREE!="undefined")if(this._layer instanceof h.Layer){if(this._layer.getRenderingType()===h.RuntimeLayerRenderingType.THREE_D||this._layer.getRenderingType()===h.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D){if(this._threeScene||this._threeGroup||this._threeCamera)throw new Error("Tried to setup 3D rendering for a layer that is already set up.");if(this._threeScene=new THREE.Scene,this._threeScene.scale.y=-1,this._threeGroup=new THREE.Group,this._threeScene.add(this._threeGroup),this._layer.getCameraType()===h.RuntimeLayerCameraType.ORTHOGRAPHIC){const a=this._layer.getWidth(),n=this._layer.getHeight();this._threeCamera=new THREE.OrthographicCamera(-a/2,a/2,n/2,-n/2,this._layer.getInitialCamera3DNearPlaneDistance(),this._layer.getInitialCamera3DFarPlaneDistance())}else this._threeCamera=new THREE.PerspectiveCamera(this._layer.getInitialCamera3DFieldOfView(),1,this._layer.getInitialCamera3DNearPlaneDistance(),this._layer.getInitialCamera3DFarPlaneDistance());this._threeCamera.rotation.order="ZYX";const r=this._layer.getRuntimeScene().getGame(),s=r.getRenderer().getThreeRenderer();if(s&&(this._threeEffectComposer=new THREE_ADDONS.EffectComposer(s),this._threeEffectComposer.addPass(new THREE_ADDONS.RenderPass(this._threeScene,this._threeCamera)),r.getAntialiasingMode()!=="none"&&this._threeEffectComposer.addPass(new THREE_ADDONS.SMAAPass(r.getGameResolutionWidth(),r.getGameResolutionHeight())),this._threeEffectComposer.addPass(new THREE_ADDONS.OutputPass)),this._layer.getRenderingType()===h.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D){if(this._renderTexture||this._threePlaneGeometry||this._threePlaneMaterial||this._threePlaneTexture||this._threePlaneMesh)throw new Error("Tried to setup PixiJS plane for 2D rendering in 3D for a layer that is already set up.");this._createPixiRenderTexture(e),this._threePlaneGeometry=new THREE.PlaneGeometry(1,1);const a=1,n=1,u=a*n,g=new Uint8Array(4*u),_=new THREE.DataTexture(g,a,n);_.needsUpdate=!0,this._threePlaneTexture=_,this._threePlaneTexture.generateMipmaps=!1;const d=this._layer.getRuntimeScene().getGame().getScaleMode()==="nearest"?THREE.NearestFilter:THREE.LinearFilter;this._threePlaneTexture.minFilter=d,this._threePlaneTexture.magFilter=d,this._threePlaneTexture.wrapS=THREE.ClampToEdgeWrapping,this._threePlaneTexture.wrapT=THREE.ClampToEdgeWrapping;const i={vertexShader:`
2
2
  varying vec2 vUv;
3
3
  void main() {
4
4
  vUv = uv;
@@ -11,5 +11,5 @@ var gdjs;(function(h){const p=new h.Logger("LayerPixiRenderer"),l=class{construc
11
11
  vec4 texel = texture2D(map, vUv);
12
12
  gl_FragColor = texel;
13
13
  }
14
- `,uniforms:{map:{value:this._threePlaneTexture}},side:THREE.FrontSide,transparent:!0};this._threePlaneMaterial=new THREE.ShaderMaterial(i),this._threePlaneMaterial,this._threePlaneMesh=new THREE.Mesh(this._threePlaneGeometry,this._threePlaneMaterial),this._threePlaneMesh.renderOrder=Number.MAX_SAFE_INTEGER,this._threeScene.add(this._threePlaneMesh)}}}else{const r=t.get3DRendererObject();if(!r)return;this._threeGroup||(this._threeGroup=new THREE.Group,r.add(this._threeGroup))}}setThreeCameraDirty(e){this._threeCameraDirty=e}show2DRenderingPlane(e){!this._threePlaneMesh||this._threePlaneMesh.visible!==e&&(this._threePlaneMesh.visible=e)}updatePosition(){const e=-h.toRad(this._layer.getCameraRotation()),t=this._layer.getCameraZoom();this._pixiContainer.rotation=e,this._pixiContainer.scale.x=t,this._pixiContainer.scale.y=t;const r=Math.cos(e),s=Math.sin(e),n=this._layer.getCameraX()*t*r-this._layer.getCameraY()*t*s,a=this._layer.getCameraX()*t*s+this._layer.getCameraY()*t*r;this._pixiContainer.position.x=this._layer.getWidth()/2-n,this._pixiContainer.position.y=this._layer.getHeight()/2-a,this._layer.getRuntimeScene().getGame().getPixelsRounding()&&(r===0||s===0)&&Number.isInteger(t)&&(this._layer.getRuntimeScene().getGame().getRenderer().getPIXIRenderer()instanceof PIXI.Renderer?(this._pixiContainer.position.x=Math.round(this._pixiContainer.position.x),this._pixiContainer.position.y=Math.round(this._pixiContainer.position.y)):(this._pixiContainer.position.x=Math.ceil(this._pixiContainer.position.x),this._pixiContainer.position.y=Math.ceil(this._pixiContainer.position.y))),this._threeCamera&&(this._threeCamera.position.x=this._layer.getCameraX(),this._threeCamera.position.y=-this._layer.getCameraY(),this._threeCamera.rotation.z=e,this._threeCamera instanceof THREE.OrthographicCamera?(this._threeCamera.zoom=this._layer.getCameraZoom(),this._threeCamera.updateProjectionMatrix(),this._threeCamera.position.z=this._layer.getCameraZ(null)):this._threeCamera.position.z=this._layer.getCameraZ(this._threeCamera.fov),this._threePlaneMesh&&(this._threePlaneMesh.scale.x=this._layer.getWidth()/t,this._threePlaneMesh.scale.y=this._layer.getHeight()/t,this._threePlaneMesh.position.x=this._threeCamera.position.x,this._threePlaneMesh.position.y=-this._threeCamera.position.y,this._threePlaneMesh.rotation.z=-e))}updateResolution(){if(this._threeEffectComposer){const e=this._layer.getRuntimeScene().getGame();this._threeEffectComposer.setSize(e.getGameResolutionWidth(),e.getGameResolutionHeight())}}isCameraRotatedIn3D(){return this._threeCamera&&(this._threeCamera.rotation.x!==0||this._threeCamera.rotation.y!==0)}transformTo3DWorld(e,t,r,s,n){const a=this._threeCamera;if(!a)return n[0]=0,n[1]=0,n;const u=this._layer.getWidth(),g=this._layer.getHeight(),_=e/u*2-1,d=-(t/g)*2+1;let i=l.vectorForProjections;if(i||(i=new THREE.Vector3,l.vectorForProjections=i),a.updateMatrixWorld(),a instanceof THREE.OrthographicCamera){i.set(_,d,0),i.unproject(a);const o=new THREE.Vector3;a.getWorldDirection(o);const m=(r-i.z)/o.z;i.x+=m*o.x,i.y+=m*o.y}else{i.set(_,d,.5),i.unproject(a),i.sub(a.position).normalize();const o=(r-a.position.z)/i.z;i.x=o*i.x+a.position.x,i.y=o*i.y+a.position.y}return!Number.isFinite(i.x)||!Number.isFinite(i.y)?(n[0]=0,n[1]=0,n):(n[0]=i.x,n[1]=-i.y,n)}updateVisibility(e){this._pixiContainer.visible=!!e,this._threeGroup&&(this._threeGroup.visible=!!e)}updatePreRender(){if(this._threeCameraDirty){const e=this.getThreeCamera();e&&e.updateProjectionMatrix(),this._threeCameraDirty=!1}}addRendererObject(e,t){const r=e;r.zIndex=t||l.zeroZOrderForPixi,this._pixiContainer.addChild(r)}changeRendererObjectZOrder(e,t){const r=e;r.zIndex=t}removeRendererObject(e){this._pixiContainer.removeChild(e)}has3DObjects(){return!!this._threeGroup&&this._threeGroup.children.length>0}has2DObjects(){return this._pixiContainer.children.length>0}add3DRendererObject(e){!this._threeGroup||this._threeGroup.add(e)}remove3DRendererObject(e){!this._threeGroup||this._threeGroup.remove(e)}updateClearColor(){this._clearColor=this._layer.getClearColor()}_createPixiRenderTexture(e){if(!e||e.type!==PIXI.RENDERER_TYPE.WEBGL)return;if(this._renderTexture){p.error("Tried to create a PixiJS RenderTexture for a layer that already has one.");return}this._oldWidth=e.screen.width,this._oldHeight=e.screen.height;const t=this._oldWidth,r=this._oldHeight,s=e.resolution;this._renderTexture=PIXI.RenderTexture.create({width:t||100,height:r||100,resolution:s}),this._renderTexture.baseTexture.scaleMode=PIXI.SCALE_MODES.LINEAR,p.info(`RenderTexture created for layer ${this._layer.getName()}.`)}renderOnPixiRenderTexture(e){if(!this._renderTexture)return;(this._oldWidth!==e.screen.width||this._oldHeight!==e.screen.height)&&(this._renderTexture.resize(e.screen.width||100,e.screen.height||100),this._oldWidth=e.screen.width,this._oldHeight=e.screen.height);const t=e.renderTexture.current||void 0,r=e.renderTexture.sourceFrame;e.renderTexture.bind(this._renderTexture),this._clearColor[3]=this._isLightingLayer?1:0,e.renderTexture.clear(this._clearColor),e.render(this._pixiContainer,{renderTexture:this._renderTexture,clear:!1}),e.renderTexture.bind(t,r,void 0)}updateThreePlaneTextureFromPixiRenderTexture(e,t){if(!this._threePlaneTexture||!this._renderTexture)return;const r=this._renderTexture.baseTexture._glTextures[t.CONTEXT_UID];if(r){const s=e.properties.get(this._threePlaneTexture);s.__webglTexture=r.texture}}_setupLightingRendering(e,t){if(this._createPixiRenderTexture(e),!this._renderTexture)return;this._lightingSprite=new PIXI.Sprite(this._renderTexture),this._lightingSprite.blendMode=PIXI.BLEND_MODES.MULTIPLY;const r=t.getRendererObject(),s=r.getChildIndex(this._pixiContainer);r.addChildAt(this._lightingSprite,s),r.removeChild(this._pixiContainer)}};let c=l;c.zeroZOrderForPixi=Math.pow(2,-24),c.vectorForProjections=null,h.LayerPixiRenderer=c,h.LayerRenderer=h.LayerPixiRenderer})(gdjs||(gdjs={}));
14
+ `,uniforms:{map:{value:this._threePlaneTexture}},side:THREE.FrontSide,transparent:!0};this._threePlaneMaterial=new THREE.ShaderMaterial(i),this._threePlaneMaterial,this._threePlaneMesh=new THREE.Mesh(this._threePlaneGeometry,this._threePlaneMaterial),this._threePlaneMesh.renderOrder=Number.MAX_SAFE_INTEGER,this._threeScene.add(this._threePlaneMesh)}}}else{const r=t.get3DRendererObject();if(!r)return;this._threeGroup||(this._threeGroup=new THREE.Group,r.add(this._threeGroup))}}setThreeCameraDirty(e){this._threeCameraDirty=e}show2DRenderingPlane(e){!this._threePlaneMesh||this._threePlaneMesh.visible!==e&&(this._threePlaneMesh.visible=e)}updatePosition(){const e=-h.toRad(this._layer.getCameraRotation()),t=this._layer.getCameraZoom();this._pixiContainer.rotation=e,this._pixiContainer.scale.x=t,this._pixiContainer.scale.y=t;const r=Math.cos(e),s=Math.sin(e),a=this._layer.getCameraX()*t*r-this._layer.getCameraY()*t*s,n=this._layer.getCameraX()*t*s+this._layer.getCameraY()*t*r;this._pixiContainer.position.x=this._layer.getWidth()/2-a,this._pixiContainer.position.y=this._layer.getHeight()/2-n,this._layer.getRuntimeScene().getGame().getPixelsRounding()&&(r===0||s===0)&&Number.isInteger(t)&&(this._layer.getRuntimeScene().getGame().getRenderer().getPIXIRenderer()instanceof PIXI.Renderer?(this._pixiContainer.position.x=Math.round(this._pixiContainer.position.x),this._pixiContainer.position.y=Math.round(this._pixiContainer.position.y)):(this._pixiContainer.position.x=Math.ceil(this._pixiContainer.position.x),this._pixiContainer.position.y=Math.ceil(this._pixiContainer.position.y))),this._threeCamera&&(this._threeCamera.position.x=this._layer.getCameraX(),this._threeCamera.position.y=-this._layer.getCameraY(),this._threeCamera.rotation.z=e,this._threeCamera instanceof THREE.OrthographicCamera?(this._threeCamera.zoom=this._layer.getCameraZoom(),this._threeCamera.updateProjectionMatrix(),this._threeCamera.position.z=this._layer.getCameraZ(null)):this._threeCamera.position.z=this._layer.getCameraZ(this._threeCamera.fov),this._threePlaneMesh&&(this._threePlaneMesh.scale.x=this._layer.getWidth()/t,this._threePlaneMesh.scale.y=this._layer.getHeight()/t,this._threePlaneMesh.position.x=this._threeCamera.position.x,this._threePlaneMesh.position.y=-this._threeCamera.position.y,this._threePlaneMesh.rotation.z=-e))}updateResolution(){if(this._threeEffectComposer){const e=this._layer.getRuntimeScene().getGame();this._threeEffectComposer.setSize(e.getGameResolutionWidth(),e.getGameResolutionHeight())}}isCameraRotatedIn3D(){return this._threeCamera&&(this._threeCamera.rotation.x!==0||this._threeCamera.rotation.y!==0)}transformTo3DWorld(e,t,r,s,a){const n=this._threeCamera;if(!n)return a[0]=0,a[1]=0,a;const u=this._layer.getWidth(),g=this._layer.getHeight(),_=e/u*2-1,d=-(t/g)*2+1;let i=l.vectorForProjections;if(i||(i=new THREE.Vector3,l.vectorForProjections=i),n.updateMatrixWorld(),n instanceof THREE.OrthographicCamera){i.set(_,d,0),i.unproject(n);const o=new THREE.Vector3;n.getWorldDirection(o);const m=(r-i.z)/o.z;i.x+=m*o.x,i.y+=m*o.y}else{i.set(_,d,.5),i.unproject(n),i.sub(n.position).normalize();const o=(r-n.position.z)/i.z;i.x=o*i.x+n.position.x,i.y=o*i.y+n.position.y}return!Number.isFinite(i.x)||!Number.isFinite(i.y)?(a[0]=0,a[1]=0,a):(a[0]=i.x,a[1]=-i.y,a)}updateVisibility(e){this._pixiContainer.visible=!!e,this._threeGroup&&(this._threeGroup.visible=!!e)}updatePreRender(){if(this._threeCameraDirty){const e=this.getThreeCamera();e&&e.updateProjectionMatrix(),this._threeCameraDirty=!1}}addRendererObject(e,t){const r=e;r.zIndex=t||l.zeroZOrderForPixi,this._pixiContainer.addChild(r)}changeRendererObjectZOrder(e,t){const r=e;r.zIndex=t}removeRendererObject(e){this._pixiContainer.removeChild(e)}has3DObjects(){return!!this._threeGroup&&this._threeGroup.children.length>0}has2DObjects(){return this._pixiContainer.children.length>0}add3DRendererObject(e){!this._threeGroup||this._threeGroup.add(e)}remove3DRendererObject(e){!this._threeGroup||this._threeGroup.remove(e)}updateClearColor(){this._clearColor=this._layer.getClearColor()}_createPixiRenderTexture(e){if(!e||e.type!==PIXI.RENDERER_TYPE.WEBGL)return;if(this._renderTexture){p.error("Tried to create a PixiJS RenderTexture for a layer that already has one.");return}this._oldWidth=e.screen.width,this._oldHeight=e.screen.height;const t=this._oldWidth,r=this._oldHeight,s=e.resolution;this._renderTexture=PIXI.RenderTexture.create({width:t||100,height:r||100,resolution:s}),this._renderTexture.baseTexture.scaleMode=PIXI.SCALE_MODES.LINEAR,p.info(`RenderTexture created for layer ${this._layer.getName()}.`)}renderOnPixiRenderTexture(e){if(!this._renderTexture)return;(this._oldWidth!==e.screen.width||this._oldHeight!==e.screen.height)&&(this._renderTexture.resize(e.screen.width||100,e.screen.height||100),this._oldWidth=e.screen.width,this._oldHeight=e.screen.height);const t=e.renderTexture.current||void 0,r=e.renderTexture.sourceFrame;e.renderTexture.bind(this._renderTexture),this._clearColor[3]=this._isLightingLayer?1:0,e.renderTexture.clear(this._clearColor),e.render(this._pixiContainer,{renderTexture:this._renderTexture,clear:!1}),e.renderTexture.bind(t,r,void 0)}updateThreePlaneTextureFromPixiRenderTexture(e,t){if(!this._threePlaneTexture||!this._renderTexture)return;const r=this._renderTexture.baseTexture._glTextures[t.CONTEXT_UID];if(r){const s=e.properties.get(this._threePlaneTexture);s.__webglTexture=r.texture}}_setupLightingRendering(e,t){if(this._createPixiRenderTexture(e),!this._renderTexture)return;this._lightingSprite=new PIXI.Sprite(this._renderTexture),this._lightingSprite.blendMode=PIXI.BLEND_MODES.MULTIPLY;const r=t.getRendererObject();if(r){const s=r.getChildIndex(this._pixiContainer);r.addChildAt(this._lightingSprite,s),r.removeChild(this._pixiContainer)}}};let c=l;c.zeroZOrderForPixi=Math.pow(2,-24),c.vectorForProjections=null,h.LayerPixiRenderer=c,h.LayerRenderer=h.LayerPixiRenderer})(gdjs||(gdjs={}));
15
15
  //# sourceMappingURL=layer-pixi-renderer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../GDevelop/GDJS/Runtime/pixi-renderers/layer-pixi-renderer.ts"],
4
- "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\n\nnamespace gdjs {\n const logger = new gdjs.Logger('LayerPixiRenderer');\n\n /**\n * The renderer for a gdjs.Layer using Pixi.js.\n */\n export class LayerPixiRenderer {\n private _pixiContainer: PIXI.Container;\n\n private _layer: gdjs.RuntimeLayer;\n\n /** For a lighting layer, the sprite used to display the render texture. */\n private _lightingSprite: PIXI.Sprite | null = null;\n private _isLightingLayer: boolean;\n private _clearColor: Array<integer>;\n\n /**\n * The render texture where the whole 2D layer is rendered.\n * The render texture is then used for lighting (if it's a light layer)\n * or to be rendered in a 3D scene (for a 2D+3D layer).\n */\n private _renderTexture: PIXI.RenderTexture | null = null;\n\n // Width and height are tracked when a render texture is used.\n private _oldWidth: float | null = null;\n private _oldHeight: float | null = null;\n\n // For a 3D (or 2D+3D) layer:\n private _threeGroup: THREE.Group | null = null;\n private _threeScene: THREE.Scene | null = null;\n private _threeCamera:\n | THREE.PerspectiveCamera\n | THREE.OrthographicCamera\n | null = null;\n private _threeCameraDirty: boolean = false;\n private _threeEffectComposer: THREE_ADDONS.EffectComposer | null = null;\n\n // For a 2D+3D layer, the 2D rendering is done on the render texture\n // and then must be displayed on a plane in the 3D world:\n private _threePlaneTexture: THREE.Texture | null = null;\n private _threePlaneGeometry: THREE.PlaneGeometry | null = null;\n private _threePlaneMaterial: THREE.ShaderMaterial | null = null;\n private _threePlaneMesh: THREE.Mesh | null = null;\n\n /**\n * Pixi doesn't sort children with zIndex == 0.\n */\n private static readonly zeroZOrderForPixi = Math.pow(2, -24);\n\n private static vectorForProjections: THREE.Vector3 | null = null;\n\n /**\n * @param layer The layer\n * @param runtimeInstanceContainerRenderer The scene renderer\n */\n constructor(\n layer: gdjs.RuntimeLayer,\n runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer,\n runtimeGameRenderer: gdjs.RuntimeGameRenderer\n ) {\n this._pixiContainer = new PIXI.Container();\n this._pixiContainer.sortableChildren = true;\n this._layer = layer;\n this._isLightingLayer = layer.isLightingLayer();\n runtimeInstanceContainerRenderer\n .getRendererObject()\n .addChild(this._pixiContainer);\n this._pixiContainer.filters = [];\n\n // Setup rendering for lighting or 3D rendering:\n const pixiRenderer = runtimeGameRenderer.getPIXIRenderer();\n if (this._isLightingLayer) {\n this._clearColor = layer.getClearColor();\n this._setupLightingRendering(\n pixiRenderer,\n runtimeInstanceContainerRenderer\n );\n } else {\n // Clear color is used as background color of transparent sprites.\n this._clearColor = [\n ...gdjs.hexNumberToRGBArray(\n this._layer.getRuntimeScene().getBackgroundColor()\n ),\n 0,\n ];\n this._setup3DRendering(pixiRenderer, runtimeInstanceContainerRenderer);\n }\n }\n\n onCreated() {\n // The layer is now fully initialized. Adapt the 3D camera position\n // (which we could not do before in `_setup3DRendering`).\n this._update3DCameraAspectAndPosition();\n }\n\n onGameResolutionResized() {\n // Ensure the 3D camera aspect is updated:\n this._update3DCameraAspectAndPosition();\n }\n\n private _update3DCameraAspectAndPosition() {\n if (!this._threeCamera) {\n return;\n }\n if (this._threeCamera instanceof THREE.OrthographicCamera) {\n const width = this._layer.getWidth();\n const height = this._layer.getHeight();\n this._threeCamera.left = -width / 2;\n this._threeCamera.right = width / 2;\n this._threeCamera.top = height / 2;\n this._threeCamera.bottom = -height / 2;\n } else {\n this._threeCamera.aspect =\n this._layer.getWidth() / this._layer.getHeight();\n }\n this._threeCamera.updateProjectionMatrix();\n\n this.updatePosition();\n }\n\n getRendererObject(): PIXI.Container {\n return this._pixiContainer;\n }\n\n getThreeScene(): THREE.Scene | null {\n return this._threeScene;\n }\n\n getThreeCamera():\n | THREE.PerspectiveCamera\n | THREE.OrthographicCamera\n | null {\n return this._threeCamera;\n }\n\n getThreeEffectComposer(): THREE_ADDONS.EffectComposer | null {\n return this._threeEffectComposer;\n }\n\n addPostProcessingPass(pass: THREE_ADDONS.Pass) {\n if (!this._threeEffectComposer) {\n return;\n }\n const game = this._layer.getRuntimeScene().getGame();\n // TODO Keep the effects in the same order they are defined\n // because the order matter for the final result.\n // There is the same issue with 2D effects too.\n\n // The composer contains:\n // - RenderPass\n // - inserted passes for effects\n // - SMAAPass (optionally)\n // - OutputPass\n const index =\n this._threeEffectComposer.passes.length -\n (game.getAntialiasingMode() === 'none' ? 1 : 2);\n this._threeEffectComposer.insertPass(pass, index);\n }\n\n removePostProcessingPass(pass: THREE_ADDONS.Pass) {\n if (!this._threeEffectComposer) {\n return;\n }\n this._threeEffectComposer.removePass(pass);\n }\n\n hasPostProcessingPass() {\n if (!this._threeEffectComposer) {\n return false;\n }\n const game = this._layer.getRuntimeScene().getGame();\n // RenderPass, OutputPass and optionally SMAAPass are default passes.\n const emptyCount = game.getAntialiasingMode() === 'none' ? 2 : 3;\n return this._threeEffectComposer.passes.length > emptyCount;\n }\n\n /**\n * The sprite, displaying the \"render texture\" of the layer, to display\n * for a lighting layer.\n */\n getLightingSprite(): PIXI.Sprite | null {\n return this._lightingSprite;\n }\n\n /**\n * Create, or re-create, Three.js objects for 3D rendering of this layer.\n */\n private _setup3DRendering(\n pixiRenderer: PIXI.Renderer | null,\n runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer\n ): void {\n if (typeof THREE === 'undefined') {\n return;\n }\n // TODO (3D): ideally we would avoid the need for this check at all,\n // maybe by having separate rendering classes for custom object layers and scene layers.\n if (this._layer instanceof gdjs.Layer) {\n if (\n this._layer.getRenderingType() ===\n gdjs.RuntimeLayerRenderingType.THREE_D ||\n this._layer.getRenderingType() ===\n gdjs.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D\n ) {\n if (this._threeScene || this._threeGroup || this._threeCamera) {\n throw new Error(\n 'Tried to setup 3D rendering for a layer that is already set up.'\n );\n }\n\n this._threeScene = new THREE.Scene();\n\n // Use a mirroring on the Y axis to follow the same axis as in the 2D, PixiJS, rendering.\n // We use a mirroring rather than a camera rotation so that the Z order is not changed.\n this._threeScene.scale.y = -1;\n\n this._threeGroup = new THREE.Group();\n this._threeScene.add(this._threeGroup);\n\n if (\n this._layer.getCameraType() ===\n gdjs.RuntimeLayerCameraType.ORTHOGRAPHIC\n ) {\n const width = this._layer.getWidth();\n const height = this._layer.getHeight();\n this._threeCamera = new THREE.OrthographicCamera(\n -width / 2,\n width / 2,\n height / 2,\n -height / 2,\n this._layer.getInitialCamera3DNearPlaneDistance(),\n this._layer.getInitialCamera3DFarPlaneDistance()\n );\n } else {\n this._threeCamera = new THREE.PerspectiveCamera(\n this._layer.getInitialCamera3DFieldOfView(),\n 1,\n this._layer.getInitialCamera3DNearPlaneDistance(),\n this._layer.getInitialCamera3DFarPlaneDistance()\n );\n }\n this._threeCamera.rotation.order = 'ZYX';\n\n const game = this._layer.getRuntimeScene().getGame();\n const threeRenderer = game.getRenderer().getThreeRenderer();\n if (threeRenderer) {\n // When adding more default passes, make sure to update\n // `addPostProcessingPass` and `hasPostProcessingPass` formulas.\n this._threeEffectComposer = new THREE_ADDONS.EffectComposer(\n threeRenderer\n );\n this._threeEffectComposer.addPass(\n new THREE_ADDONS.RenderPass(this._threeScene, this._threeCamera)\n );\n if (game.getAntialiasingMode() !== 'none') {\n this._threeEffectComposer.addPass(\n new THREE_ADDONS.SMAAPass(\n game.getGameResolutionWidth(),\n game.getGameResolutionHeight()\n )\n );\n }\n this._threeEffectComposer.addPass(new THREE_ADDONS.OutputPass());\n }\n\n if (\n this._layer.getRenderingType() ===\n gdjs.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D\n ) {\n if (\n this._renderTexture ||\n this._threePlaneGeometry ||\n this._threePlaneMaterial ||\n this._threePlaneTexture ||\n this._threePlaneMesh\n )\n throw new Error(\n 'Tried to setup PixiJS plane for 2D rendering in 3D for a layer that is already set up.'\n );\n\n // If we have both 2D and 3D objects to be rendered, create a render texture that PixiJS will use\n // to render, and that will be projected on a plane by Three.js\n this._createPixiRenderTexture(pixiRenderer);\n\n // Create the plane that will show this texture.\n this._threePlaneGeometry = new THREE.PlaneGeometry(1, 1);\n\n // Create the texture to project on the plane.\n // Use a buffer to create a \"fake\" DataTexture, just so the texture\n // is considered initialized by Three.js.\n const width = 1;\n const height = 1;\n const size = width * height;\n const data = new Uint8Array(4 * size);\n const texture = new THREE.DataTexture(data, width, height);\n texture.needsUpdate = true;\n\n this._threePlaneTexture = texture;\n this._threePlaneTexture.generateMipmaps = false;\n const filter =\n this._layer.getRuntimeScene().getGame().getScaleMode() ===\n 'nearest'\n ? THREE.NearestFilter\n : THREE.LinearFilter;\n this._threePlaneTexture.minFilter = filter;\n this._threePlaneTexture.magFilter = filter;\n this._threePlaneTexture.wrapS = THREE.ClampToEdgeWrapping;\n this._threePlaneTexture.wrapT = THREE.ClampToEdgeWrapping;\n // This disable the gamma correction done by THREE as PIXI is already doing it.\n const noGammaCorrectionShader: THREE.ShaderMaterialParameters = {\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform sampler2D map;\n varying vec2 vUv;\n void main() {\n vec4 texel = texture2D(map, vUv);\n gl_FragColor = texel;\n }\n `,\n uniforms: {\n map: { value: this._threePlaneTexture },\n },\n side: THREE.FrontSide,\n transparent: true,\n };\n this._threePlaneMaterial = new THREE.ShaderMaterial(\n noGammaCorrectionShader\n );\n this._threePlaneMaterial;\n\n // Finally, create the mesh shown in the scene.\n this._threePlaneMesh = new THREE.Mesh(\n this._threePlaneGeometry,\n this._threePlaneMaterial\n );\n\n // Force to render the mesh last (after the rest of 3D objects, including\n // transparent ones). In most cases, the 2D rendering is composed of a lot\n // of transparent areas, and we can't risk it being displayed first and wrongly\n // occluding 3D objects shown behind.\n this._threePlaneMesh.renderOrder = Number.MAX_SAFE_INTEGER;\n this._threeScene.add(this._threePlaneMesh);\n }\n\n // Note: we can not update the position of the camera at this point,\n // because the layer might not be fully constructed.\n // See `onCreated`.\n }\n } else {\n // This is a layer of a custom object.\n\n const parentThreeObject = runtimeInstanceContainerRenderer.get3DRendererObject();\n if (!parentThreeObject) {\n // No parent 3D renderer object, 3D is disabled.\n return;\n }\n\n if (!this._threeGroup) {\n // TODO (3D) - optimization: do not create a THREE.Group if no 3D object are contained inside.\n this._threeGroup = new THREE.Group();\n parentThreeObject.add(this._threeGroup);\n }\n }\n }\n\n setThreeCameraDirty(enable: boolean) {\n this._threeCameraDirty = enable;\n }\n\n show2DRenderingPlane(enable: boolean) {\n if (!this._threePlaneMesh) return;\n if (this._threePlaneMesh.visible === enable) return;\n this._threePlaneMesh.visible = enable;\n }\n\n /**\n * Update the position of the PIXI container. To be called after each change\n * made to position, zoom or rotation of the camera.\n */\n updatePosition(): void {\n const angle = -gdjs.toRad(this._layer.getCameraRotation());\n const zoomFactor = this._layer.getCameraZoom();\n this._pixiContainer.rotation = angle;\n this._pixiContainer.scale.x = zoomFactor;\n this._pixiContainer.scale.y = zoomFactor;\n const cosValue = Math.cos(angle);\n const sinValue = Math.sin(angle);\n const centerX =\n this._layer.getCameraX() * zoomFactor * cosValue -\n this._layer.getCameraY() * zoomFactor * sinValue;\n const centerY =\n this._layer.getCameraX() * zoomFactor * sinValue +\n this._layer.getCameraY() * zoomFactor * cosValue;\n this._pixiContainer.position.x = this._layer.getWidth() / 2 - centerX;\n this._pixiContainer.position.y = this._layer.getHeight() / 2 - centerY;\n\n if (\n this._layer.getRuntimeScene().getGame().getPixelsRounding() &&\n (cosValue === 0 || sinValue === 0) &&\n Number.isInteger(zoomFactor)\n ) {\n // Camera rounding is important for pixel perfect games.\n // Otherwise, the camera position fractional part is added to\n // the sprite one and it changes in which direction sprites are rounded.\n // It makes sprites rounding inconsistent with each other\n // and they seem to move on pixel left and right.\n //\n // PIXI uses a floor function on sprites position on the screen,\n // so a floor must be applied on the camera position too.\n // According to the above calculus,\n // _pixiContainer.position is the opposite of the camera,\n // this is why the ceil function is used floor(x) = -ceil(-x).\n //\n // When the camera directly follows an object,\n // given this object dimension is even,\n // the decimal part of onScenePosition and cameraPosition are the same.\n //\n // Doing the calculus without rounding:\n // onScreenPosition = onScenePosition - cameraPosition\n // onScreenPosition = 980.75 - 200.75\n // onScreenPosition = 780\n //\n // Doing the calculus with rounding:\n // onScreenPosition = floor(onScenePosition + ceil(-cameraPosition))\n // onScreenPosition = floor(980.75 + ceil(-200.75))\n // onScreenPosition = floor(980.75 - 200)\n // onScreenPosition = floor(780.75)\n // onScreenPosition = 780\n\n if (\n this._layer\n .getRuntimeScene()\n .getGame()\n .getRenderer()\n .getPIXIRenderer() instanceof PIXI.Renderer\n ) {\n // TODO Revert from `round` to `ceil` when the issue is fixed in Pixi.\n // Since the upgrade to Pixi 7, sprites are rounded with `round`\n // instead of `floor`.\n // https://github.com/pixijs/pixijs/issues/9868\n this._pixiContainer.position.x = Math.round(\n this._pixiContainer.position.x\n );\n this._pixiContainer.position.y = Math.round(\n this._pixiContainer.position.y\n );\n } else {\n this._pixiContainer.position.x = Math.ceil(\n this._pixiContainer.position.x\n );\n this._pixiContainer.position.y = Math.ceil(\n this._pixiContainer.position.y\n );\n }\n }\n\n if (this._threeCamera) {\n // TODO (3D) - improvement: handle camera rounding like down for PixiJS?\n this._threeCamera.position.x = this._layer.getCameraX();\n this._threeCamera.position.y = -this._layer.getCameraY(); // Inverted because the scene is mirrored on Y axis.\n this._threeCamera.rotation.z = angle;\n\n if (this._threeCamera instanceof THREE.OrthographicCamera) {\n this._threeCamera.zoom = this._layer.getCameraZoom();\n this._threeCamera.updateProjectionMatrix();\n this._threeCamera.position.z = this._layer.getCameraZ(null);\n } else {\n this._threeCamera.position.z = this._layer.getCameraZ(\n this._threeCamera.fov\n );\n }\n\n if (this._threePlaneMesh) {\n // Adapt the plane size so that it covers the whole screen.\n this._threePlaneMesh.scale.x = this._layer.getWidth() / zoomFactor;\n this._threePlaneMesh.scale.y = this._layer.getHeight() / zoomFactor;\n\n // Adapt the plane position so that it's always displayed on the whole screen.\n this._threePlaneMesh.position.x = this._threeCamera.position.x;\n this._threePlaneMesh.position.y = -this._threeCamera.position.y; // Inverted because the scene is mirrored on Y axis.\n this._threePlaneMesh.rotation.z = -angle;\n }\n }\n }\n\n updateResolution() {\n if (this._threeEffectComposer) {\n const game = this._layer.getRuntimeScene().getGame();\n this._threeEffectComposer.setSize(\n game.getGameResolutionWidth(),\n game.getGameResolutionHeight()\n );\n }\n }\n\n isCameraRotatedIn3D() {\n return (\n this._threeCamera &&\n (this._threeCamera.rotation.x !== 0 ||\n this._threeCamera.rotation.y !== 0)\n );\n }\n\n transformTo3DWorld(\n screenX: float,\n screenY: float,\n worldZ: float,\n cameraId: integer,\n result: FloatPoint\n ): FloatPoint {\n const camera = this._threeCamera;\n if (!camera) {\n result[0] = 0;\n result[1] = 0;\n return result;\n }\n const width = this._layer.getWidth();\n const height = this._layer.getHeight();\n const normalizedX = (screenX / width) * 2 - 1;\n const normalizedY = -(screenY / height) * 2 + 1;\n\n let vector = LayerPixiRenderer.vectorForProjections;\n if (!vector) {\n vector = new THREE.Vector3();\n LayerPixiRenderer.vectorForProjections = vector;\n }\n\n camera.updateMatrixWorld();\n\n if (camera instanceof THREE.OrthographicCamera) {\n // https://discourse.threejs.org/t/how-to-unproject-mouse2d-with-orthographic-camera/4777\n vector.set(normalizedX, normalizedY, 0);\n vector.unproject(camera);\n // The unprojected point is on the camera.\n // Find x and y for a given z along the camera direction line.\n const direction = new THREE.Vector3();\n camera.getWorldDirection(direction);\n const distance = (worldZ - vector.z) / direction.z;\n vector.x += distance * direction.x;\n vector.y += distance * direction.y;\n } else {\n // https://stackoverflow.com/questions/13055214/mouse-canvas-x-y-to-three-js-world-x-y-z\n vector.set(normalizedX, normalizedY, 0.5);\n vector.unproject(camera);\n // The unprojected point is on the frustum plane.\n // Find x and y for a given z along the line between the camera and\n // the one on the frustum.\n vector.sub(camera.position).normalize();\n const distance = (worldZ - camera.position.z) / vector.z;\n vector.x = distance * vector.x + camera.position.x;\n vector.y = distance * vector.y + camera.position.y;\n }\n\n // The plane z == worldZ may not be visible on the camera.\n if (!Number.isFinite(vector.x) || !Number.isFinite(vector.y)) {\n result[0] = 0;\n result[1] = 0;\n return result;\n }\n\n result[0] = vector.x;\n result[1] = -vector.y;\n return result;\n }\n\n updateVisibility(visible: boolean): void {\n this._pixiContainer.visible = !!visible;\n if (this._threeGroup) this._threeGroup.visible = !!visible;\n }\n\n updatePreRender(): void {\n if (this._threeCameraDirty) {\n const camera = this.getThreeCamera();\n if (camera) {\n camera.updateProjectionMatrix();\n }\n this._threeCameraDirty = false;\n }\n }\n\n /**\n * Add a child to the pixi container associated to the layer.\n * All objects which are on this layer must be children of this container.\n *\n * @param pixiChild The child (PIXI object) to be added.\n * @param zOrder The z order of the associated object.\n */\n addRendererObject(pixiChild, zOrder: float): void {\n const child = pixiChild as PIXI.DisplayObject;\n child.zIndex = zOrder || LayerPixiRenderer.zeroZOrderForPixi;\n this._pixiContainer.addChild(child);\n }\n\n /**\n * Change the z order of a child associated to an object.\n *\n * @param pixiChild The child (PIXI object) to be modified.\n * @param newZOrder The z order of the associated object.\n */\n changeRendererObjectZOrder(pixiChild, newZOrder: float): void {\n const child = pixiChild as PIXI.DisplayObject;\n child.zIndex = newZOrder;\n }\n\n /**\n * Remove a child from the internal pixi container.\n * Should be called when an object is deleted or removed from the layer.\n *\n * @param child The child (PIXI object) to be removed.\n */\n removeRendererObject(child): void {\n this._pixiContainer.removeChild(child);\n }\n\n has3DObjects(): boolean {\n return !!this._threeGroup && this._threeGroup.children.length > 0;\n }\n\n has2DObjects(): boolean {\n return this._pixiContainer.children.length > 0;\n }\n\n add3DRendererObject(object: THREE.Object3D): void {\n if (!this._threeGroup) return;\n\n this._threeGroup.add(object);\n }\n\n remove3DRendererObject(object: THREE.Object3D): void {\n if (!this._threeGroup) return;\n\n this._threeGroup.remove(object);\n }\n\n updateClearColor(): void {\n this._clearColor = this._layer.getClearColor();\n // this._createPixiRenderTexture(); // TODO: Check this was useless\n }\n\n /**\n * Create the PixiJS RenderTexture used to display the whole layer.\n * Can be used either for lighting or for rendering the layer in a texture\n * so it can then be consumed by Three.js to render it in 3D.\n */\n private _createPixiRenderTexture(pixiRenderer: PIXI.Renderer | null): void {\n if (!pixiRenderer || pixiRenderer.type !== PIXI.RENDERER_TYPE.WEBGL) {\n return;\n }\n if (this._renderTexture) {\n logger.error(\n 'Tried to create a PixiJS RenderTexture for a layer that already has one.'\n );\n return;\n }\n\n this._oldWidth = pixiRenderer.screen.width;\n this._oldHeight = pixiRenderer.screen.height;\n const width = this._oldWidth;\n const height = this._oldHeight;\n const resolution = pixiRenderer.resolution;\n this._renderTexture = PIXI.RenderTexture.create({\n // A size of 0 is forbidden by Pixi.\n width: width || 100,\n height: height || 100,\n resolution,\n });\n this._renderTexture.baseTexture.scaleMode = PIXI.SCALE_MODES.LINEAR;\n logger.info(`RenderTexture created for layer ${this._layer.getName()}.`);\n }\n\n /**\n * Render the layer of the PixiJS RenderTexture, so that it can be then displayed\n * with a blend mode (for a lighting layer) or consumed by Three.js (for 2D+3D layers).\n */\n renderOnPixiRenderTexture(pixiRenderer: PIXI.Renderer) {\n if (!this._renderTexture) {\n return;\n }\n if (\n this._oldWidth !== pixiRenderer.screen.width ||\n this._oldHeight !== pixiRenderer.screen.height\n ) {\n // A size of 0 is forbidden by Pixi.\n this._renderTexture.resize(\n pixiRenderer.screen.width || 100,\n pixiRenderer.screen.height || 100\n );\n this._oldWidth = pixiRenderer.screen.width;\n this._oldHeight = pixiRenderer.screen.height;\n }\n const oldRenderTexture = pixiRenderer.renderTexture.current || undefined;\n const oldSourceFrame = pixiRenderer.renderTexture.sourceFrame;\n pixiRenderer.renderTexture.bind(this._renderTexture);\n\n // The background is the ambient color for lighting layers\n // and transparent for 2D+3D layers.\n this._clearColor[3] = this._isLightingLayer ? 1 : 0;\n pixiRenderer.renderTexture.clear(this._clearColor);\n\n pixiRenderer.render(this._pixiContainer, {\n renderTexture: this._renderTexture,\n clear: false,\n });\n pixiRenderer.renderTexture.bind(\n oldRenderTexture,\n oldSourceFrame,\n undefined\n );\n }\n\n /**\n * Set the texture of the 2D plane in the 3D world to be the same WebGL texture\n * as the PixiJS RenderTexture - so that the 2D rendering can be shown in the 3D world.\n */\n updateThreePlaneTextureFromPixiRenderTexture(\n threeRenderer: THREE.WebGLRenderer,\n pixiRenderer: PIXI.Renderer\n ): void {\n if (!this._threePlaneTexture || !this._renderTexture) {\n return;\n }\n\n const glTexture = this._renderTexture.baseTexture._glTextures[\n pixiRenderer.CONTEXT_UID\n ];\n if (glTexture) {\n // \"Hack\" into the Three.js renderer by getting the internal WebGL texture for the PixiJS plane,\n // and set it so that it's the same as the WebGL texture for the PixiJS RenderTexture.\n // This works because PixiJS and Three.js are using the same WebGL context.\n const texture = threeRenderer.properties.get(this._threePlaneTexture);\n texture.__webglTexture = glTexture.texture;\n }\n }\n\n /**\n * Enable the use of a PIXI.RenderTexture to render the PIXI.Container\n * of the layer and, in the scene PIXI container, replace the container\n * of the layer by a sprite showing this texture.\n * used only in lighting for now as the sprite could have MULTIPLY blend mode.\n */\n private _setupLightingRendering(\n pixiRenderer: PIXI.Renderer | null,\n runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer\n ): void {\n this._createPixiRenderTexture(pixiRenderer);\n if (!this._renderTexture) {\n return;\n }\n\n this._lightingSprite = new PIXI.Sprite(this._renderTexture);\n this._lightingSprite.blendMode = PIXI.BLEND_MODES.MULTIPLY;\n const parentPixiContainer = runtimeInstanceContainerRenderer.getRendererObject();\n const index = parentPixiContainer.getChildIndex(this._pixiContainer);\n parentPixiContainer.addChildAt(this._lightingSprite, index);\n parentPixiContainer.removeChild(this._pixiContainer);\n }\n }\n\n //Register the class to let the engine use it.\n export type LayerRenderer = gdjs.LayerPixiRenderer;\n export const LayerRenderer = gdjs.LayerPixiRenderer;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\n\nnamespace gdjs {\n const logger = new gdjs.Logger('LayerPixiRenderer');\n\n /**\n * The renderer for a gdjs.Layer using Pixi.js.\n */\n export class LayerPixiRenderer {\n private _pixiContainer: PIXI.Container;\n\n private _layer: gdjs.RuntimeLayer;\n\n /** For a lighting layer, the sprite used to display the render texture. */\n private _lightingSprite: PIXI.Sprite | null = null;\n private _isLightingLayer: boolean;\n private _clearColor: Array<integer>;\n\n /**\n * The render texture where the whole 2D layer is rendered.\n * The render texture is then used for lighting (if it's a light layer)\n * or to be rendered in a 3D scene (for a 2D+3D layer).\n */\n private _renderTexture: PIXI.RenderTexture | null = null;\n\n // Width and height are tracked when a render texture is used.\n private _oldWidth: float | null = null;\n private _oldHeight: float | null = null;\n\n // For a 3D (or 2D+3D) layer:\n private _threeGroup: THREE.Group | null = null;\n private _threeScene: THREE.Scene | null = null;\n private _threeCamera:\n | THREE.PerspectiveCamera\n | THREE.OrthographicCamera\n | null = null;\n private _threeCameraDirty: boolean = false;\n private _threeEffectComposer: THREE_ADDONS.EffectComposer | null = null;\n\n // For a 2D+3D layer, the 2D rendering is done on the render texture\n // and then must be displayed on a plane in the 3D world:\n private _threePlaneTexture: THREE.Texture | null = null;\n private _threePlaneGeometry: THREE.PlaneGeometry | null = null;\n private _threePlaneMaterial: THREE.ShaderMaterial | null = null;\n private _threePlaneMesh: THREE.Mesh | null = null;\n\n /**\n * Pixi doesn't sort children with zIndex == 0.\n */\n private static readonly zeroZOrderForPixi = Math.pow(2, -24);\n\n private static vectorForProjections: THREE.Vector3 | null = null;\n\n /**\n * @param layer The layer\n * @param runtimeInstanceContainerRenderer The scene renderer\n */\n constructor(\n layer: gdjs.RuntimeLayer,\n runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer,\n runtimeGameRenderer: gdjs.RuntimeGameRenderer\n ) {\n this._pixiContainer = new PIXI.Container();\n this._pixiContainer.sortableChildren = true;\n this._layer = layer;\n this._isLightingLayer = layer.isLightingLayer();\n const parentRendererObject = runtimeInstanceContainerRenderer.getRendererObject();\n if (parentRendererObject) {\n parentRendererObject.addChild(this._pixiContainer);\n }\n this._pixiContainer.filters = [];\n\n // Setup rendering for lighting or 3D rendering:\n const pixiRenderer = runtimeGameRenderer.getPIXIRenderer();\n if (this._isLightingLayer) {\n this._clearColor = layer.getClearColor();\n this._setupLightingRendering(\n pixiRenderer,\n runtimeInstanceContainerRenderer\n );\n } else {\n // Clear color is used as background color of transparent sprites.\n this._clearColor = [\n ...gdjs.hexNumberToRGBArray(\n this._layer.getRuntimeScene().getBackgroundColor()\n ),\n 0,\n ];\n this._setup3DRendering(pixiRenderer, runtimeInstanceContainerRenderer);\n }\n }\n\n onCreated() {\n // The layer is now fully initialized. Adapt the 3D camera position\n // (which we could not do before in `_setup3DRendering`).\n this._update3DCameraAspectAndPosition();\n }\n\n onGameResolutionResized() {\n // Ensure the 3D camera aspect is updated:\n this._update3DCameraAspectAndPosition();\n }\n\n private _update3DCameraAspectAndPosition() {\n if (!this._threeCamera) {\n return;\n }\n if (this._threeCamera instanceof THREE.OrthographicCamera) {\n const width = this._layer.getWidth();\n const height = this._layer.getHeight();\n this._threeCamera.left = -width / 2;\n this._threeCamera.right = width / 2;\n this._threeCamera.top = height / 2;\n this._threeCamera.bottom = -height / 2;\n } else {\n this._threeCamera.aspect =\n this._layer.getWidth() / this._layer.getHeight();\n }\n this._threeCamera.updateProjectionMatrix();\n\n this.updatePosition();\n }\n\n getRendererObject(): PIXI.Container {\n return this._pixiContainer;\n }\n\n getThreeScene(): THREE.Scene | null {\n return this._threeScene;\n }\n\n getThreeCamera():\n | THREE.PerspectiveCamera\n | THREE.OrthographicCamera\n | null {\n return this._threeCamera;\n }\n\n getThreeEffectComposer(): THREE_ADDONS.EffectComposer | null {\n return this._threeEffectComposer;\n }\n\n addPostProcessingPass(pass: THREE_ADDONS.Pass) {\n if (!this._threeEffectComposer) {\n return;\n }\n const game = this._layer.getRuntimeScene().getGame();\n // TODO Keep the effects in the same order they are defined\n // because the order matter for the final result.\n // There is the same issue with 2D effects too.\n\n // The composer contains:\n // - RenderPass\n // - inserted passes for effects\n // - SMAAPass (optionally)\n // - OutputPass\n const index =\n this._threeEffectComposer.passes.length -\n (game.getAntialiasingMode() === 'none' ? 1 : 2);\n this._threeEffectComposer.insertPass(pass, index);\n }\n\n removePostProcessingPass(pass: THREE_ADDONS.Pass) {\n if (!this._threeEffectComposer) {\n return;\n }\n this._threeEffectComposer.removePass(pass);\n }\n\n hasPostProcessingPass() {\n if (!this._threeEffectComposer) {\n return false;\n }\n const game = this._layer.getRuntimeScene().getGame();\n // RenderPass, OutputPass and optionally SMAAPass are default passes.\n const emptyCount = game.getAntialiasingMode() === 'none' ? 2 : 3;\n return this._threeEffectComposer.passes.length > emptyCount;\n }\n\n /**\n * The sprite, displaying the \"render texture\" of the layer, to display\n * for a lighting layer.\n */\n getLightingSprite(): PIXI.Sprite | null {\n return this._lightingSprite;\n }\n\n /**\n * Create, or re-create, Three.js objects for 3D rendering of this layer.\n */\n private _setup3DRendering(\n pixiRenderer: PIXI.Renderer | null,\n runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer\n ): void {\n if (typeof THREE === 'undefined') {\n return;\n }\n // TODO (3D): ideally we would avoid the need for this check at all,\n // maybe by having separate rendering classes for custom object layers and scene layers.\n if (this._layer instanceof gdjs.Layer) {\n if (\n this._layer.getRenderingType() ===\n gdjs.RuntimeLayerRenderingType.THREE_D ||\n this._layer.getRenderingType() ===\n gdjs.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D\n ) {\n if (this._threeScene || this._threeGroup || this._threeCamera) {\n throw new Error(\n 'Tried to setup 3D rendering for a layer that is already set up.'\n );\n }\n\n this._threeScene = new THREE.Scene();\n\n // Use a mirroring on the Y axis to follow the same axis as in the 2D, PixiJS, rendering.\n // We use a mirroring rather than a camera rotation so that the Z order is not changed.\n this._threeScene.scale.y = -1;\n\n this._threeGroup = new THREE.Group();\n this._threeScene.add(this._threeGroup);\n\n if (\n this._layer.getCameraType() ===\n gdjs.RuntimeLayerCameraType.ORTHOGRAPHIC\n ) {\n const width = this._layer.getWidth();\n const height = this._layer.getHeight();\n this._threeCamera = new THREE.OrthographicCamera(\n -width / 2,\n width / 2,\n height / 2,\n -height / 2,\n this._layer.getInitialCamera3DNearPlaneDistance(),\n this._layer.getInitialCamera3DFarPlaneDistance()\n );\n } else {\n this._threeCamera = new THREE.PerspectiveCamera(\n this._layer.getInitialCamera3DFieldOfView(),\n 1,\n this._layer.getInitialCamera3DNearPlaneDistance(),\n this._layer.getInitialCamera3DFarPlaneDistance()\n );\n }\n this._threeCamera.rotation.order = 'ZYX';\n\n const game = this._layer.getRuntimeScene().getGame();\n const threeRenderer = game.getRenderer().getThreeRenderer();\n if (threeRenderer) {\n // When adding more default passes, make sure to update\n // `addPostProcessingPass` and `hasPostProcessingPass` formulas.\n this._threeEffectComposer = new THREE_ADDONS.EffectComposer(\n threeRenderer\n );\n this._threeEffectComposer.addPass(\n new THREE_ADDONS.RenderPass(this._threeScene, this._threeCamera)\n );\n if (game.getAntialiasingMode() !== 'none') {\n this._threeEffectComposer.addPass(\n new THREE_ADDONS.SMAAPass(\n game.getGameResolutionWidth(),\n game.getGameResolutionHeight()\n )\n );\n }\n this._threeEffectComposer.addPass(new THREE_ADDONS.OutputPass());\n }\n\n if (\n this._layer.getRenderingType() ===\n gdjs.RuntimeLayerRenderingType.TWO_D_PLUS_THREE_D\n ) {\n if (\n this._renderTexture ||\n this._threePlaneGeometry ||\n this._threePlaneMaterial ||\n this._threePlaneTexture ||\n this._threePlaneMesh\n )\n throw new Error(\n 'Tried to setup PixiJS plane for 2D rendering in 3D for a layer that is already set up.'\n );\n\n // If we have both 2D and 3D objects to be rendered, create a render texture that PixiJS will use\n // to render, and that will be projected on a plane by Three.js\n this._createPixiRenderTexture(pixiRenderer);\n\n // Create the plane that will show this texture.\n this._threePlaneGeometry = new THREE.PlaneGeometry(1, 1);\n\n // Create the texture to project on the plane.\n // Use a buffer to create a \"fake\" DataTexture, just so the texture\n // is considered initialized by Three.js.\n const width = 1;\n const height = 1;\n const size = width * height;\n const data = new Uint8Array(4 * size);\n const texture = new THREE.DataTexture(data, width, height);\n texture.needsUpdate = true;\n\n this._threePlaneTexture = texture;\n this._threePlaneTexture.generateMipmaps = false;\n const filter =\n this._layer.getRuntimeScene().getGame().getScaleMode() ===\n 'nearest'\n ? THREE.NearestFilter\n : THREE.LinearFilter;\n this._threePlaneTexture.minFilter = filter;\n this._threePlaneTexture.magFilter = filter;\n this._threePlaneTexture.wrapS = THREE.ClampToEdgeWrapping;\n this._threePlaneTexture.wrapT = THREE.ClampToEdgeWrapping;\n // This disable the gamma correction done by THREE as PIXI is already doing it.\n const noGammaCorrectionShader: THREE.ShaderMaterialParameters = {\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform sampler2D map;\n varying vec2 vUv;\n void main() {\n vec4 texel = texture2D(map, vUv);\n gl_FragColor = texel;\n }\n `,\n uniforms: {\n map: { value: this._threePlaneTexture },\n },\n side: THREE.FrontSide,\n transparent: true,\n };\n this._threePlaneMaterial = new THREE.ShaderMaterial(\n noGammaCorrectionShader\n );\n this._threePlaneMaterial;\n\n // Finally, create the mesh shown in the scene.\n this._threePlaneMesh = new THREE.Mesh(\n this._threePlaneGeometry,\n this._threePlaneMaterial\n );\n\n // Force to render the mesh last (after the rest of 3D objects, including\n // transparent ones). In most cases, the 2D rendering is composed of a lot\n // of transparent areas, and we can't risk it being displayed first and wrongly\n // occluding 3D objects shown behind.\n this._threePlaneMesh.renderOrder = Number.MAX_SAFE_INTEGER;\n this._threeScene.add(this._threePlaneMesh);\n }\n\n // Note: we can not update the position of the camera at this point,\n // because the layer might not be fully constructed.\n // See `onCreated`.\n }\n } else {\n // This is a layer of a custom object.\n\n const parentThreeObject = runtimeInstanceContainerRenderer.get3DRendererObject();\n if (!parentThreeObject) {\n // No parent 3D renderer object, 3D is disabled.\n return;\n }\n\n if (!this._threeGroup) {\n // TODO (3D) - optimization: do not create a THREE.Group if no 3D object are contained inside.\n this._threeGroup = new THREE.Group();\n parentThreeObject.add(this._threeGroup);\n }\n }\n }\n\n setThreeCameraDirty(enable: boolean) {\n this._threeCameraDirty = enable;\n }\n\n show2DRenderingPlane(enable: boolean) {\n if (!this._threePlaneMesh) return;\n if (this._threePlaneMesh.visible === enable) return;\n this._threePlaneMesh.visible = enable;\n }\n\n /**\n * Update the position of the PIXI container. To be called after each change\n * made to position, zoom or rotation of the camera.\n */\n updatePosition(): void {\n const angle = -gdjs.toRad(this._layer.getCameraRotation());\n const zoomFactor = this._layer.getCameraZoom();\n this._pixiContainer.rotation = angle;\n this._pixiContainer.scale.x = zoomFactor;\n this._pixiContainer.scale.y = zoomFactor;\n const cosValue = Math.cos(angle);\n const sinValue = Math.sin(angle);\n const centerX =\n this._layer.getCameraX() * zoomFactor * cosValue -\n this._layer.getCameraY() * zoomFactor * sinValue;\n const centerY =\n this._layer.getCameraX() * zoomFactor * sinValue +\n this._layer.getCameraY() * zoomFactor * cosValue;\n this._pixiContainer.position.x = this._layer.getWidth() / 2 - centerX;\n this._pixiContainer.position.y = this._layer.getHeight() / 2 - centerY;\n\n if (\n this._layer.getRuntimeScene().getGame().getPixelsRounding() &&\n (cosValue === 0 || sinValue === 0) &&\n Number.isInteger(zoomFactor)\n ) {\n // Camera rounding is important for pixel perfect games.\n // Otherwise, the camera position fractional part is added to\n // the sprite one and it changes in which direction sprites are rounded.\n // It makes sprites rounding inconsistent with each other\n // and they seem to move on pixel left and right.\n //\n // PIXI uses a floor function on sprites position on the screen,\n // so a floor must be applied on the camera position too.\n // According to the above calculus,\n // _pixiContainer.position is the opposite of the camera,\n // this is why the ceil function is used floor(x) = -ceil(-x).\n //\n // When the camera directly follows an object,\n // given this object dimension is even,\n // the decimal part of onScenePosition and cameraPosition are the same.\n //\n // Doing the calculus without rounding:\n // onScreenPosition = onScenePosition - cameraPosition\n // onScreenPosition = 980.75 - 200.75\n // onScreenPosition = 780\n //\n // Doing the calculus with rounding:\n // onScreenPosition = floor(onScenePosition + ceil(-cameraPosition))\n // onScreenPosition = floor(980.75 + ceil(-200.75))\n // onScreenPosition = floor(980.75 - 200)\n // onScreenPosition = floor(780.75)\n // onScreenPosition = 780\n\n if (\n this._layer\n .getRuntimeScene()\n .getGame()\n .getRenderer()\n .getPIXIRenderer() instanceof PIXI.Renderer\n ) {\n // TODO Revert from `round` to `ceil` when the issue is fixed in Pixi.\n // Since the upgrade to Pixi 7, sprites are rounded with `round`\n // instead of `floor`.\n // https://github.com/pixijs/pixijs/issues/9868\n this._pixiContainer.position.x = Math.round(\n this._pixiContainer.position.x\n );\n this._pixiContainer.position.y = Math.round(\n this._pixiContainer.position.y\n );\n } else {\n this._pixiContainer.position.x = Math.ceil(\n this._pixiContainer.position.x\n );\n this._pixiContainer.position.y = Math.ceil(\n this._pixiContainer.position.y\n );\n }\n }\n\n if (this._threeCamera) {\n // TODO (3D) - improvement: handle camera rounding like down for PixiJS?\n this._threeCamera.position.x = this._layer.getCameraX();\n this._threeCamera.position.y = -this._layer.getCameraY(); // Inverted because the scene is mirrored on Y axis.\n this._threeCamera.rotation.z = angle;\n\n if (this._threeCamera instanceof THREE.OrthographicCamera) {\n this._threeCamera.zoom = this._layer.getCameraZoom();\n this._threeCamera.updateProjectionMatrix();\n this._threeCamera.position.z = this._layer.getCameraZ(null);\n } else {\n this._threeCamera.position.z = this._layer.getCameraZ(\n this._threeCamera.fov\n );\n }\n\n if (this._threePlaneMesh) {\n // Adapt the plane size so that it covers the whole screen.\n this._threePlaneMesh.scale.x = this._layer.getWidth() / zoomFactor;\n this._threePlaneMesh.scale.y = this._layer.getHeight() / zoomFactor;\n\n // Adapt the plane position so that it's always displayed on the whole screen.\n this._threePlaneMesh.position.x = this._threeCamera.position.x;\n this._threePlaneMesh.position.y = -this._threeCamera.position.y; // Inverted because the scene is mirrored on Y axis.\n this._threePlaneMesh.rotation.z = -angle;\n }\n }\n }\n\n updateResolution() {\n if (this._threeEffectComposer) {\n const game = this._layer.getRuntimeScene().getGame();\n this._threeEffectComposer.setSize(\n game.getGameResolutionWidth(),\n game.getGameResolutionHeight()\n );\n }\n }\n\n isCameraRotatedIn3D() {\n return (\n this._threeCamera &&\n (this._threeCamera.rotation.x !== 0 ||\n this._threeCamera.rotation.y !== 0)\n );\n }\n\n transformTo3DWorld(\n screenX: float,\n screenY: float,\n worldZ: float,\n cameraId: integer,\n result: FloatPoint\n ): FloatPoint {\n const camera = this._threeCamera;\n if (!camera) {\n result[0] = 0;\n result[1] = 0;\n return result;\n }\n const width = this._layer.getWidth();\n const height = this._layer.getHeight();\n const normalizedX = (screenX / width) * 2 - 1;\n const normalizedY = -(screenY / height) * 2 + 1;\n\n let vector = LayerPixiRenderer.vectorForProjections;\n if (!vector) {\n vector = new THREE.Vector3();\n LayerPixiRenderer.vectorForProjections = vector;\n }\n\n camera.updateMatrixWorld();\n\n if (camera instanceof THREE.OrthographicCamera) {\n // https://discourse.threejs.org/t/how-to-unproject-mouse2d-with-orthographic-camera/4777\n vector.set(normalizedX, normalizedY, 0);\n vector.unproject(camera);\n // The unprojected point is on the camera.\n // Find x and y for a given z along the camera direction line.\n const direction = new THREE.Vector3();\n camera.getWorldDirection(direction);\n const distance = (worldZ - vector.z) / direction.z;\n vector.x += distance * direction.x;\n vector.y += distance * direction.y;\n } else {\n // https://stackoverflow.com/questions/13055214/mouse-canvas-x-y-to-three-js-world-x-y-z\n vector.set(normalizedX, normalizedY, 0.5);\n vector.unproject(camera);\n // The unprojected point is on the frustum plane.\n // Find x and y for a given z along the line between the camera and\n // the one on the frustum.\n vector.sub(camera.position).normalize();\n const distance = (worldZ - camera.position.z) / vector.z;\n vector.x = distance * vector.x + camera.position.x;\n vector.y = distance * vector.y + camera.position.y;\n }\n\n // The plane z == worldZ may not be visible on the camera.\n if (!Number.isFinite(vector.x) || !Number.isFinite(vector.y)) {\n result[0] = 0;\n result[1] = 0;\n return result;\n }\n\n result[0] = vector.x;\n result[1] = -vector.y;\n return result;\n }\n\n updateVisibility(visible: boolean): void {\n this._pixiContainer.visible = !!visible;\n if (this._threeGroup) this._threeGroup.visible = !!visible;\n }\n\n updatePreRender(): void {\n if (this._threeCameraDirty) {\n const camera = this.getThreeCamera();\n if (camera) {\n camera.updateProjectionMatrix();\n }\n this._threeCameraDirty = false;\n }\n }\n\n /**\n * Add a child to the pixi container associated to the layer.\n * All objects which are on this layer must be children of this container.\n *\n * @param pixiChild The child (PIXI object) to be added.\n * @param zOrder The z order of the associated object.\n */\n addRendererObject(pixiChild, zOrder: float): void {\n const child = pixiChild as PIXI.DisplayObject;\n child.zIndex = zOrder || LayerPixiRenderer.zeroZOrderForPixi;\n this._pixiContainer.addChild(child);\n }\n\n /**\n * Change the z order of a child associated to an object.\n *\n * @param pixiChild The child (PIXI object) to be modified.\n * @param newZOrder The z order of the associated object.\n */\n changeRendererObjectZOrder(pixiChild, newZOrder: float): void {\n const child = pixiChild as PIXI.DisplayObject;\n child.zIndex = newZOrder;\n }\n\n /**\n * Remove a child from the internal pixi container.\n * Should be called when an object is deleted or removed from the layer.\n *\n * @param child The child (PIXI object) to be removed.\n */\n removeRendererObject(child): void {\n this._pixiContainer.removeChild(child);\n }\n\n has3DObjects(): boolean {\n return !!this._threeGroup && this._threeGroup.children.length > 0;\n }\n\n has2DObjects(): boolean {\n return this._pixiContainer.children.length > 0;\n }\n\n add3DRendererObject(object: THREE.Object3D): void {\n if (!this._threeGroup) return;\n\n this._threeGroup.add(object);\n }\n\n remove3DRendererObject(object: THREE.Object3D): void {\n if (!this._threeGroup) return;\n\n this._threeGroup.remove(object);\n }\n\n updateClearColor(): void {\n this._clearColor = this._layer.getClearColor();\n // this._createPixiRenderTexture(); // TODO: Check this was useless\n }\n\n /**\n * Create the PixiJS RenderTexture used to display the whole layer.\n * Can be used either for lighting or for rendering the layer in a texture\n * so it can then be consumed by Three.js to render it in 3D.\n */\n private _createPixiRenderTexture(pixiRenderer: PIXI.Renderer | null): void {\n if (!pixiRenderer || pixiRenderer.type !== PIXI.RENDERER_TYPE.WEBGL) {\n return;\n }\n if (this._renderTexture) {\n logger.error(\n 'Tried to create a PixiJS RenderTexture for a layer that already has one.'\n );\n return;\n }\n\n this._oldWidth = pixiRenderer.screen.width;\n this._oldHeight = pixiRenderer.screen.height;\n const width = this._oldWidth;\n const height = this._oldHeight;\n const resolution = pixiRenderer.resolution;\n this._renderTexture = PIXI.RenderTexture.create({\n // A size of 0 is forbidden by Pixi.\n width: width || 100,\n height: height || 100,\n resolution,\n });\n this._renderTexture.baseTexture.scaleMode = PIXI.SCALE_MODES.LINEAR;\n logger.info(`RenderTexture created for layer ${this._layer.getName()}.`);\n }\n\n /**\n * Render the layer of the PixiJS RenderTexture, so that it can be then displayed\n * with a blend mode (for a lighting layer) or consumed by Three.js (for 2D+3D layers).\n */\n renderOnPixiRenderTexture(pixiRenderer: PIXI.Renderer) {\n if (!this._renderTexture) {\n return;\n }\n if (\n this._oldWidth !== pixiRenderer.screen.width ||\n this._oldHeight !== pixiRenderer.screen.height\n ) {\n // A size of 0 is forbidden by Pixi.\n this._renderTexture.resize(\n pixiRenderer.screen.width || 100,\n pixiRenderer.screen.height || 100\n );\n this._oldWidth = pixiRenderer.screen.width;\n this._oldHeight = pixiRenderer.screen.height;\n }\n const oldRenderTexture = pixiRenderer.renderTexture.current || undefined;\n const oldSourceFrame = pixiRenderer.renderTexture.sourceFrame;\n pixiRenderer.renderTexture.bind(this._renderTexture);\n\n // The background is the ambient color for lighting layers\n // and transparent for 2D+3D layers.\n this._clearColor[3] = this._isLightingLayer ? 1 : 0;\n pixiRenderer.renderTexture.clear(this._clearColor);\n\n pixiRenderer.render(this._pixiContainer, {\n renderTexture: this._renderTexture,\n clear: false,\n });\n pixiRenderer.renderTexture.bind(\n oldRenderTexture,\n oldSourceFrame,\n undefined\n );\n }\n\n /**\n * Set the texture of the 2D plane in the 3D world to be the same WebGL texture\n * as the PixiJS RenderTexture - so that the 2D rendering can be shown in the 3D world.\n */\n updateThreePlaneTextureFromPixiRenderTexture(\n threeRenderer: THREE.WebGLRenderer,\n pixiRenderer: PIXI.Renderer\n ): void {\n if (!this._threePlaneTexture || !this._renderTexture) {\n return;\n }\n\n const glTexture = this._renderTexture.baseTexture._glTextures[\n pixiRenderer.CONTEXT_UID\n ];\n if (glTexture) {\n // \"Hack\" into the Three.js renderer by getting the internal WebGL texture for the PixiJS plane,\n // and set it so that it's the same as the WebGL texture for the PixiJS RenderTexture.\n // This works because PixiJS and Three.js are using the same WebGL context.\n const texture = threeRenderer.properties.get(this._threePlaneTexture);\n texture.__webglTexture = glTexture.texture;\n }\n }\n\n /**\n * Enable the use of a PIXI.RenderTexture to render the PIXI.Container\n * of the layer and, in the scene PIXI container, replace the container\n * of the layer by a sprite showing this texture.\n * used only in lighting for now as the sprite could have MULTIPLY blend mode.\n */\n private _setupLightingRendering(\n pixiRenderer: PIXI.Renderer | null,\n runtimeInstanceContainerRenderer: gdjs.RuntimeInstanceContainerRenderer\n ): void {\n this._createPixiRenderTexture(pixiRenderer);\n if (!this._renderTexture) {\n return;\n }\n\n this._lightingSprite = new PIXI.Sprite(this._renderTexture);\n this._lightingSprite.blendMode = PIXI.BLEND_MODES.MULTIPLY;\n const parentPixiContainer = runtimeInstanceContainerRenderer.getRendererObject();\n if (parentPixiContainer) {\n const index = parentPixiContainer.getChildIndex(this._pixiContainer);\n parentPixiContainer.addChildAt(this._lightingSprite, index);\n parentPixiContainer.removeChild(this._pixiContainer);\n }\n }\n }\n\n //Register the class to let the engine use it.\n export type LayerRenderer = gdjs.LayerPixiRenderer;\n export const LayerRenderer = gdjs.LayerPixiRenderer;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(n){const f=new n.Logger("Filters");let u;(function(i){i.clampValue=function(t,e,r){return Math.max(e,Math.min(r,t))},i.clampKernelSize=function(t,e,r){const a=Math.round((r-e)/2+1),s=new Array(a);for(let o=0;o<a;o++)s[o]=e+2*o;return s.indexOf(t)!==-1?t:e};const l={};i.getFilterCreator=function(t){return l.hasOwnProperty(t)?l[t]:null},i.registerFilterCreator=function(t,e){l.hasOwnProperty(t)&&f.warn('Filter "'+t+'" was already registered in gdjs.PixiFiltersTools. Replacing it with the new one.'),l[t]=e},i.rgbOrHexToHexNumber=function(t){const e=t.split(";");return e.length===3?n.rgbToHexNumber(parseInt(e[0],10),parseInt(e[1],10),parseInt(e[2],10)):parseInt(t.replace("#","0x"),16)};class P{makeFilter(e,r){const a=this.makePIXIFilter(e,r);return e.isLightingLayer&&e.isLightingLayer()&&(a.blendMode=PIXI.BLEND_MODES.ADD),new m(a,this)}}i.PixiFilterCreator=P;class m{constructor(e,r){this.pixiFilter=e,this.filterCreator=r}isEnabled(e){return this.pixiFilter.enabled}setEnabled(e,r){return this.pixiFilter.enabled=r}applyEffect(e){const r=e.getRendererObject();return r?(r.filters=(r.filters||[]).concat(this.pixiFilter),!0):!1}removeEffect(e){const r=e.getRendererObject();return r?(r.filters=(r.filters||[]).filter(a=>a!==this.pixiFilter),!0):!1}updatePreRender(e){this.filterCreator.updatePreRender(this.pixiFilter,e)}updateDoubleParameter(e,r){this.filterCreator.updateDoubleParameter(this.pixiFilter,e,r)}updateStringParameter(e,r){this.filterCreator.updateStringParameter(this.pixiFilter,e,r)}updateBooleanParameter(e,r){this.filterCreator.updateBooleanParameter(this.pixiFilter,e,r)}updateColorParameter(e,r){this.filterCreator.updateColorParameter(this.pixiFilter,e,r)}getDoubleParameter(e){return this.filterCreator.getDoubleParameter(this.pixiFilter,e)}getColorParameter(e){return this.filterCreator.getColorParameter(this.pixiFilter,e)}}i.PixiFilter=m;class F{isEnabled(e){return!1}setEnabled(e,r){return!1}applyEffect(e){return!1}removeEffect(e){return!1}updatePreRender(e){}updateDoubleParameter(e,r){}updateStringParameter(e,r){}updateBooleanParameter(e,r){}updateColorParameter(e,r){}getDoubleParameter(e){return 0}getColorParameter(e){return 0}}i.EmptyFilter=F})(u=n.PixiFiltersTools||(n.PixiFiltersTools={}))})(gdjs||(gdjs={}));
1
+ var gdjs;(function(n){const f=new n.Logger("Filters");let u;(function(i){i.clampValue=function(r,e,t){return Math.max(e,Math.min(t,r))},i.clampKernelSize=function(r,e,t){const a=Math.round((t-e)/2+1),s=new Array(a);for(let o=0;o<a;o++)s[o]=e+2*o;return s.indexOf(r)!==-1?r:e};const l={};i.getFilterCreator=function(r){return l.hasOwnProperty(r)?l[r]:null},i.registerFilterCreator=function(r,e){l.hasOwnProperty(r)&&f.warn('Filter "'+r+'" was already registered in gdjs.PixiFiltersTools. Replacing it with the new one.'),l[r]=e},i.rgbOrHexToHexNumber=function(r){const e=r.split(";");return e.length===3?n.rgbToHexNumber(parseInt(e[0],10),parseInt(e[1],10),parseInt(e[2],10)):parseInt(r.replace("#","0x"),16)};class F{makeFilter(e,t){const a=this.makePIXIFilter(e,t);return e.isLightingLayer&&e.isLightingLayer()&&(a.blendMode=PIXI.BLEND_MODES.ADD),new m(a,this)}}i.PixiFilterCreator=F;class m{constructor(e,t){this.pixiFilter=e,this.filterCreator=t}isEnabled(e){return this.pixiFilter.enabled}setEnabled(e,t){return this.pixiFilter.enabled=t}applyEffect(e){const t=e.getRendererObject();return t?(t.filters=(t.filters||[]).concat(this.pixiFilter),!0):!1}removeEffect(e){const t=e.getRendererObject();return t?(t.filters=(t.filters||[]).filter(a=>a!==this.pixiFilter),!0):!1}updatePreRender(e){this.filterCreator.updatePreRender(this.pixiFilter,e)}updateDoubleParameter(e,t){this.filterCreator.updateDoubleParameter(this.pixiFilter,e,t)}updateStringParameter(e,t){this.filterCreator.updateStringParameter(this.pixiFilter,e,t)}updateBooleanParameter(e,t){this.filterCreator.updateBooleanParameter(this.pixiFilter,e,t)}updateColorParameter(e,t){this.filterCreator.updateColorParameter(this.pixiFilter,e,t)}getDoubleParameter(e){return this.filterCreator.getDoubleParameter(this.pixiFilter,e)}getColorParameter(e){return this.filterCreator.getColorParameter(this.pixiFilter,e)}getNetworkSyncData(){return{ena:this.pixiFilter.enabled,fc:this.filterCreator.getNetworkSyncData(this.pixiFilter)}}updateFromNetworkSyncData(e){this.pixiFilter.enabled=e.ena,this.filterCreator.updateFromNetworkSyncData(this.pixiFilter,e.fc)}}i.PixiFilter=m;class P{isEnabled(e){return!1}setEnabled(e,t){return!1}applyEffect(e){return!1}removeEffect(e){return!1}updatePreRender(e){}updateDoubleParameter(e,t){}updateStringParameter(e,t){}updateBooleanParameter(e,t){}updateColorParameter(e,t){}getDoubleParameter(e){return 0}getColorParameter(e){return 0}getNetworkSyncData(){return{}}updateFromNetworkSyncData(e){}}i.EmptyFilter=P})(u=n.PixiFiltersTools||(n.PixiFiltersTools={}))})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=pixi-filters-tools.js.map