gdcore-tools 2.0.0-beta5 → 2.0.0-beta7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/Runtime/Cordova/config.xml +4 -0
  2. package/dist/Runtime/Cordova/package.json +12 -20
  3. package/dist/Runtime/CustomRuntimeObject.js +1 -1
  4. package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
  5. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
  6. package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
  7. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js +1 -1
  8. package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js.map +2 -2
  9. package/dist/Runtime/Extensions/3D/AmbientLight.js +1 -1
  10. package/dist/Runtime/Extensions/3D/AmbientLight.js.map +2 -2
  11. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +1 -1
  12. package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +2 -2
  13. package/dist/Runtime/Extensions/3D/DirectionalLight.js +1 -1
  14. package/dist/Runtime/Extensions/3D/DirectionalLight.js.map +2 -2
  15. package/dist/Runtime/Extensions/3D/ExponentialFog.js +1 -1
  16. package/dist/Runtime/Extensions/3D/ExponentialFog.js.map +2 -2
  17. package/dist/Runtime/Extensions/3D/HemisphereLight.js +1 -1
  18. package/dist/Runtime/Extensions/3D/HemisphereLight.js.map +2 -2
  19. package/dist/Runtime/Extensions/3D/JsExtension.js +419 -228
  20. package/dist/Runtime/Extensions/3D/LinearFog.js +1 -1
  21. package/dist/Runtime/Extensions/3D/LinearFog.js.map +2 -2
  22. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js +1 -1
  23. package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js.map +2 -2
  24. package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
  25. package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
  26. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js +1 -1
  27. package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js.map +2 -2
  28. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
  29. package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
  30. package/dist/Runtime/Extensions/BBText/JsExtension.js +45 -42
  31. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
  32. package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
  33. package/dist/Runtime/Extensions/BitmapText/JsExtension.js +40 -49
  34. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
  35. package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
  36. package/dist/Runtime/Extensions/Effects/JsExtension.js +2 -2
  37. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js +1 -1
  38. package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js.map +2 -2
  39. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js +1 -1
  40. package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js.map +2 -2
  41. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js +1 -1
  42. package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js.map +2 -2
  43. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js +1 -1
  44. package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js.map +2 -2
  45. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js +1 -1
  46. package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js.map +2 -2
  47. package/dist/Runtime/Extensions/ExampleJsExtension/JsExtension.js +18 -21
  48. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js +1 -1
  49. package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js.map +2 -2
  50. package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +8 -2
  51. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js +1 -1
  52. package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js.map +2 -2
  53. package/dist/Runtime/Extensions/Lighting/JsExtension.js +50 -38
  54. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js +1 -1
  55. package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js.map +2 -2
  56. package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +112 -7
  57. package/dist/Runtime/Extensions/Multiplayer/messageManager.js +1 -1
  58. package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +2 -2
  59. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +1 -1
  60. package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +2 -2
  61. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
  62. package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
  63. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +1 -1
  64. package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
  65. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js +1 -1
  66. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject-pixi-renderer.js.map +2 -2
  67. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
  68. package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
  69. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js +1 -1
  70. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js.map +2 -2
  71. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
  72. package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
  73. package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +127 -40
  74. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
  75. package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
  76. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js +1 -1
  77. package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js.map +2 -2
  78. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js +1 -1
  79. package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
  80. package/dist/Runtime/Extensions/Spine/JsExtension.js +77 -36
  81. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js +1 -1
  82. package/dist/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js.map +2 -2
  83. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
  84. package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
  85. package/dist/Runtime/Extensions/TextInput/JsExtension.js +55 -56
  86. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
  87. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
  88. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
  89. package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
  90. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js +1 -1
  91. package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js.map +2 -2
  92. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js +1 -1
  93. package/dist/Runtime/Extensions/TextObject/textruntimeobject.js.map +2 -2
  94. package/dist/Runtime/Extensions/TileMap/JsExtension.js +511 -287
  95. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js +1 -1
  96. package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js.map +2 -2
  97. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
  98. package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
  99. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
  100. package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
  101. package/dist/Runtime/Extensions/TileMap/helper/dts/load/tiled/TiledTileMapLoader.d.ts.map +1 -1
  102. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +12 -1
  103. package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
  104. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
  105. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +1 -0
  106. package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
  107. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
  108. package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
  109. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js +1 -1
  110. package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js.map +2 -2
  111. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
  112. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
  113. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js +1 -1
  114. package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
  115. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
  116. package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
  117. package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +1 -0
  118. package/dist/Runtime/Extensions/Video/JsExtension.js +35 -44
  119. package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
  120. package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
  121. package/dist/Runtime/ResourceLoader.js +1 -1
  122. package/dist/Runtime/ResourceLoader.js.map +2 -2
  123. package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
  124. package/dist/Runtime/SpriteAnimator.js +1 -1
  125. package/dist/Runtime/SpriteAnimator.js.map +2 -2
  126. package/dist/Runtime/debugger-client/InGameDebugger.js +1 -1
  127. package/dist/Runtime/debugger-client/InGameDebugger.js.map +2 -2
  128. package/dist/Runtime/debugger-client/abstract-debugger-client.js +1 -1
  129. package/dist/Runtime/debugger-client/abstract-debugger-client.js.map +2 -2
  130. package/dist/Runtime/debugger-client/hot-reloader.js +2 -1
  131. package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
  132. package/dist/Runtime/debugger-client/minimal-debugger-client.js +2 -0
  133. package/dist/Runtime/debugger-client/minimal-debugger-client.js.map +7 -0
  134. package/dist/Runtime/debugger-client/websocket-debugger-client.js.map +2 -2
  135. package/dist/Runtime/debugger-client/window-message-debugger-client.js.map +2 -2
  136. package/dist/Runtime/events-tools/inputtools.js +1 -1
  137. package/dist/Runtime/events-tools/inputtools.js.map +2 -2
  138. package/dist/Runtime/events-tools/objecttools.js +1 -1
  139. package/dist/Runtime/events-tools/objecttools.js.map +2 -2
  140. package/dist/Runtime/gd.js +1 -1
  141. package/dist/Runtime/gd.js.map +2 -2
  142. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js +1 -1
  143. package/dist/Runtime/howler-sound-manager/howler-sound-manager.js.map +2 -2
  144. package/dist/Runtime/inputmanager.js +1 -1
  145. package/dist/Runtime/inputmanager.js.map +2 -2
  146. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +1 -1
  147. package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js.map +2 -2
  148. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js +1 -1
  149. package/dist/Runtime/pixi-renderers/pixi-filters-tools.js.map +2 -2
  150. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js +1 -1
  151. package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js.map +2 -2
  152. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
  153. package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
  154. package/dist/Runtime/runtimegame.js +1 -1
  155. package/dist/Runtime/runtimegame.js.map +2 -2
  156. package/dist/Runtime/runtimeobject.js +1 -1
  157. package/dist/Runtime/runtimeobject.js.map +2 -2
  158. package/dist/Runtime/runtimescene.js +1 -1
  159. package/dist/Runtime/runtimescene.js.map +2 -2
  160. package/dist/Runtime/scenestack.js +1 -1
  161. package/dist/Runtime/scenestack.js.map +2 -2
  162. package/dist/Runtime/spriteruntimeobject.js +1 -1
  163. package/dist/Runtime/spriteruntimeobject.js.map +2 -2
  164. package/dist/Runtime/types/project-data.d.ts +36 -8
  165. package/dist/Runtime/variablescontainer.js +1 -1
  166. package/dist/Runtime/variablescontainer.js.map +2 -2
  167. package/dist/lib/libGD.cjs +1 -1
  168. package/dist/lib/libGD.wasm +0 -0
  169. package/gd.d.ts +149 -75
  170. package/package.json +3 -3
@@ -1,2 +1,2 @@
1
- var gdjs;(function(t){t.PixiFiltersTools.registerFilterCreator("Scene3D::LinearFog",new class{makeFilter(o,n){return typeof THREE=="undefined"?new t.PixiFiltersTools.EmptyFilter:new class{constructor(){this.fog=new THREE.Fog(16777215)}isEnabled(e){const r=e.get3DRendererObject();return r?r.fog===this.fog:!1}setEnabled(e,r){return r?this.applyEffect(e):this.removeEffect(e)}applyEffect(e){const r=e.get3DRendererObject();return!r||r.fog===void 0?!1:(r.fog=this.fog,!0)}removeEffect(e){const r=e.get3DRendererObject();return!r||r.fog===void 0?!1:(r.fog=null,!0)}updatePreRender(e){}updateDoubleParameter(e,r){e==="near"?this.fog.near=r:e==="far"&&(this.fog.far=r)}getDoubleParameter(e){return e==="near"?this.fog.near:e==="far"?this.fog.far:0}updateStringParameter(e,r){e==="color"&&(this.fog.color=new THREE.Color(t.PixiFiltersTools.rgbOrHexToHexNumber(r)))}updateColorParameter(e,r){e==="color"&&this.fog.color.setHex(r)}getColorParameter(e){return e==="color"?this.fog.color.getHex():0}updateBooleanParameter(e,r){}getNetworkSyncData(){return{n:this.fog.near,f:this.fog.far,c:this.fog.color.getHex()}}updateFromNetworkSyncData(e){this.fog.near=e.n,this.fog.far=e.f,this.fog.color.setHex(e.c)}}}})})(gdjs||(gdjs={}));
1
+ var gdjs;(function(t){t.PixiFiltersTools.registerFilterCreator("Scene3D::LinearFog",new class{makeFilter(n,o){return typeof THREE=="undefined"?new t.PixiFiltersTools.EmptyFilter:new class{constructor(){this.fog=new THREE.Fog(16777215)}isEnabled(e){const r=e.get3DRendererObject();return r?r.fog===this.fog:!1}setEnabled(e,r){return r?this.applyEffect(e):this.removeEffect(e)}applyEffect(e){const r=e.get3DRendererObject();return!r||r.fog===void 0?!1:(r.fog=this.fog,!0)}removeEffect(e){const r=e.get3DRendererObject();return!r||r.fog===void 0?!1:(r.fog=null,!0)}updatePreRender(e){}updateDoubleParameter(e,r){e==="near"?this.fog.near=r:e==="far"&&(this.fog.far=r)}getDoubleParameter(e){return e==="near"?this.fog.near:e==="far"?this.fog.far:0}updateStringParameter(e,r){e==="color"&&(this.fog.color=new THREE.Color(t.rgbOrHexStringToNumber(r)))}updateColorParameter(e,r){e==="color"&&this.fog.color.setHex(r)}getColorParameter(e){return e==="color"?this.fog.color.getHex():0}updateBooleanParameter(e,r){}getNetworkSyncData(){return{n:this.fog.near,f:this.fog.far,c:this.fog.color.getHex()}}updateFromNetworkSyncData(e){this.fog.near=e.n,this.fog.far=e.f,this.fog.color.setHex(e.c)}}}})})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=LinearFog.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/3D/LinearFog.ts"],
4
- "sourcesContent": ["namespace gdjs {\n interface LinearFogFilterNetworkSyncData {\n n: number;\n f: number;\n c: number;\n }\n gdjs.PixiFiltersTools.registerFilterCreator(\n 'Scene3D::LinearFog',\n new (class implements gdjs.PixiFiltersTools.FilterCreator {\n makeFilter(\n target: EffectsTarget,\n effectData: EffectData\n ): gdjs.PixiFiltersTools.Filter {\n if (typeof THREE === 'undefined') {\n return new gdjs.PixiFiltersTools.EmptyFilter();\n }\n return new (class implements gdjs.PixiFiltersTools.Filter {\n fog: THREE.Fog;\n\n constructor() {\n this.fog = new THREE.Fog(0xffffff);\n }\n\n isEnabled(target: EffectsTarget): boolean {\n const scene = target.get3DRendererObject() as\n | THREE.Scene\n | null\n | undefined;\n return scene ? scene.fog === this.fog : false;\n }\n setEnabled(target: EffectsTarget, enabled: boolean): boolean {\n if (enabled) {\n return this.applyEffect(target);\n } else {\n return this.removeEffect(target);\n }\n }\n applyEffect(target: EffectsTarget): boolean {\n const scene = target.get3DRendererObject() as\n | THREE.Scene\n | null\n | undefined;\n if (!scene || scene.fog === undefined) {\n return false;\n }\n scene.fog = this.fog;\n return true;\n }\n removeEffect(target: EffectsTarget): boolean {\n const scene = target.get3DRendererObject() as\n | THREE.Scene\n | null\n | undefined;\n if (!scene || scene.fog === undefined) {\n return false;\n }\n scene.fog = null;\n return true;\n }\n updatePreRender(target: gdjs.EffectsTarget): any {}\n updateDoubleParameter(parameterName: string, value: number): void {\n if (parameterName === 'near') {\n this.fog.near = value;\n } else if (parameterName === 'far') {\n this.fog.far = value;\n }\n }\n getDoubleParameter(parameterName: string): number {\n if (parameterName === 'near') {\n return this.fog.near;\n } else if (parameterName === 'far') {\n return this.fog.far;\n }\n return 0;\n }\n updateStringParameter(parameterName: string, value: string): void {\n if (parameterName === 'color') {\n this.fog.color = new THREE.Color(\n gdjs.PixiFiltersTools.rgbOrHexToHexNumber(value)\n );\n }\n }\n updateColorParameter(parameterName: string, value: number): void {\n if (parameterName === 'color') {\n this.fog.color.setHex(value);\n }\n }\n getColorParameter(parameterName: string): number {\n if (parameterName === 'color') {\n return this.fog.color.getHex();\n }\n return 0;\n }\n updateBooleanParameter(parameterName: string, value: boolean): void {}\n getNetworkSyncData(): LinearFogFilterNetworkSyncData {\n return {\n n: this.fog.near,\n f: this.fog.far,\n c: this.fog.color.getHex(),\n };\n }\n updateFromNetworkSyncData(\n data: LinearFogFilterNetworkSyncData\n ): void {\n this.fog.near = data.n;\n this.fog.far = data.f;\n this.fog.color.setHex(data.c);\n }\n })();\n }\n })()\n );\n}\n"],
5
- "mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CAME,EAAK,iBAAiB,sBACpB,qBACA,GAAK,MAAqD,CACxD,WACE,EACA,EAC8B,CAC9B,MAAI,OAAO,QAAU,YACZ,GAAI,GAAK,iBAAiB,YAE5B,GAAK,MAA8C,CAGxD,aAAc,CACZ,KAAK,IAAM,GAAI,OAAM,IAAI,UAG3B,UAAU,EAAgC,CACxC,KAAM,GAAQ,EAAO,sBAIrB,MAAO,GAAQ,EAAM,MAAQ,KAAK,IAAM,GAE1C,WAAW,EAAuB,EAA2B,CAC3D,MAAI,GACK,KAAK,YAAY,GAEjB,KAAK,aAAa,GAG7B,YAAY,EAAgC,CAC1C,KAAM,GAAQ,EAAO,sBAIrB,MAAI,CAAC,GAAS,EAAM,MAAQ,OACnB,GAET,GAAM,IAAM,KAAK,IACV,IAET,aAAa,EAAgC,CAC3C,KAAM,GAAQ,EAAO,sBAIrB,MAAI,CAAC,GAAS,EAAM,MAAQ,OACnB,GAET,GAAM,IAAM,KACL,IAET,gBAAgB,EAAiC,EACjD,sBAAsB,EAAuB,EAAqB,CAChE,AAAI,IAAkB,OACpB,KAAK,IAAI,KAAO,EACP,IAAkB,OAC3B,MAAK,IAAI,IAAM,GAGnB,mBAAmB,EAA+B,CAChD,MAAI,KAAkB,OACb,KAAK,IAAI,KACP,IAAkB,MACpB,KAAK,IAAI,IAEX,EAET,sBAAsB,EAAuB,EAAqB,CAChE,AAAI,IAAkB,SACpB,MAAK,IAAI,MAAQ,GAAI,OAAM,MACzB,EAAK,iBAAiB,oBAAoB,KAIhD,qBAAqB,EAAuB,EAAqB,CAC/D,AAAI,IAAkB,SACpB,KAAK,IAAI,MAAM,OAAO,GAG1B,kBAAkB,EAA+B,CAC/C,MAAI,KAAkB,QACb,KAAK,IAAI,MAAM,SAEjB,EAET,uBAAuB,EAAuB,EAAsB,EACpE,oBAAqD,CACnD,MAAO,CACL,EAAG,KAAK,IAAI,KACZ,EAAG,KAAK,IAAI,IACZ,EAAG,KAAK,IAAI,MAAM,UAGtB,0BACE,EACM,CACN,KAAK,IAAI,KAAO,EAAK,EACrB,KAAK,IAAI,IAAM,EAAK,EACpB,KAAK,IAAI,MAAM,OAAO,EAAK,UA1G7B",
4
+ "sourcesContent": ["namespace gdjs {\n interface LinearFogFilterNetworkSyncData {\n n: number;\n f: number;\n c: number;\n }\n gdjs.PixiFiltersTools.registerFilterCreator(\n 'Scene3D::LinearFog',\n new (class implements gdjs.PixiFiltersTools.FilterCreator {\n makeFilter(\n target: EffectsTarget,\n effectData: EffectData\n ): gdjs.PixiFiltersTools.Filter {\n if (typeof THREE === 'undefined') {\n return new gdjs.PixiFiltersTools.EmptyFilter();\n }\n return new (class implements gdjs.PixiFiltersTools.Filter {\n fog: THREE.Fog;\n\n constructor() {\n this.fog = new THREE.Fog(0xffffff);\n }\n\n isEnabled(target: EffectsTarget): boolean {\n const scene = target.get3DRendererObject() as\n | THREE.Scene\n | null\n | undefined;\n return scene ? scene.fog === this.fog : false;\n }\n setEnabled(target: EffectsTarget, enabled: boolean): boolean {\n if (enabled) {\n return this.applyEffect(target);\n } else {\n return this.removeEffect(target);\n }\n }\n applyEffect(target: EffectsTarget): boolean {\n const scene = target.get3DRendererObject() as\n | THREE.Scene\n | null\n | undefined;\n if (!scene || scene.fog === undefined) {\n return false;\n }\n scene.fog = this.fog;\n return true;\n }\n removeEffect(target: EffectsTarget): boolean {\n const scene = target.get3DRendererObject() as\n | THREE.Scene\n | null\n | undefined;\n if (!scene || scene.fog === undefined) {\n return false;\n }\n scene.fog = null;\n return true;\n }\n updatePreRender(target: gdjs.EffectsTarget): any {}\n updateDoubleParameter(parameterName: string, value: number): void {\n if (parameterName === 'near') {\n this.fog.near = value;\n } else if (parameterName === 'far') {\n this.fog.far = value;\n }\n }\n getDoubleParameter(parameterName: string): number {\n if (parameterName === 'near') {\n return this.fog.near;\n } else if (parameterName === 'far') {\n return this.fog.far;\n }\n return 0;\n }\n updateStringParameter(parameterName: string, value: string): void {\n if (parameterName === 'color') {\n this.fog.color = new THREE.Color(\n gdjs.rgbOrHexStringToNumber(value)\n );\n }\n }\n updateColorParameter(parameterName: string, value: number): void {\n if (parameterName === 'color') {\n this.fog.color.setHex(value);\n }\n }\n getColorParameter(parameterName: string): number {\n if (parameterName === 'color') {\n return this.fog.color.getHex();\n }\n return 0;\n }\n updateBooleanParameter(parameterName: string, value: boolean): void {}\n getNetworkSyncData(): LinearFogFilterNetworkSyncData {\n return {\n n: this.fog.near,\n f: this.fog.far,\n c: this.fog.color.getHex(),\n };\n }\n updateFromNetworkSyncData(\n data: LinearFogFilterNetworkSyncData\n ): void {\n this.fog.near = data.n;\n this.fog.far = data.f;\n this.fog.color.setHex(data.c);\n }\n })();\n }\n })()\n );\n}\n"],
5
+ "mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CAME,EAAK,iBAAiB,sBACpB,qBACA,GAAK,MAAqD,CACxD,WACE,EACA,EAC8B,CAC9B,MAAI,OAAO,QAAU,YACZ,GAAI,GAAK,iBAAiB,YAE5B,GAAK,MAA8C,CAGxD,aAAc,CACZ,KAAK,IAAM,GAAI,OAAM,IAAI,UAG3B,UAAU,EAAgC,CACxC,KAAM,GAAQ,EAAO,sBAIrB,MAAO,GAAQ,EAAM,MAAQ,KAAK,IAAM,GAE1C,WAAW,EAAuB,EAA2B,CAC3D,MAAI,GACK,KAAK,YAAY,GAEjB,KAAK,aAAa,GAG7B,YAAY,EAAgC,CAC1C,KAAM,GAAQ,EAAO,sBAIrB,MAAI,CAAC,GAAS,EAAM,MAAQ,OACnB,GAET,GAAM,IAAM,KAAK,IACV,IAET,aAAa,EAAgC,CAC3C,KAAM,GAAQ,EAAO,sBAIrB,MAAI,CAAC,GAAS,EAAM,MAAQ,OACnB,GAET,GAAM,IAAM,KACL,IAET,gBAAgB,EAAiC,EACjD,sBAAsB,EAAuB,EAAqB,CAChE,AAAI,IAAkB,OACpB,KAAK,IAAI,KAAO,EACP,IAAkB,OAC3B,MAAK,IAAI,IAAM,GAGnB,mBAAmB,EAA+B,CAChD,MAAI,KAAkB,OACb,KAAK,IAAI,KACP,IAAkB,MACpB,KAAK,IAAI,IAEX,EAET,sBAAsB,EAAuB,EAAqB,CAChE,AAAI,IAAkB,SACpB,MAAK,IAAI,MAAQ,GAAI,OAAM,MACzB,EAAK,uBAAuB,KAIlC,qBAAqB,EAAuB,EAAqB,CAC/D,AAAI,IAAkB,SACpB,KAAK,IAAI,MAAM,OAAO,GAG1B,kBAAkB,EAA+B,CAC/C,MAAI,KAAkB,QACb,KAAK,IAAI,MAAM,SAEjB,EAET,uBAAuB,EAAuB,EAAsB,EACpE,oBAAqD,CACnD,MAAO,CACL,EAAG,KAAK,IAAI,KACZ,EAAG,KAAK,IAAI,IACZ,EAAG,KAAK,IAAI,MAAM,UAGtB,0BACE,EACM,CACN,KAAK,IAAI,KAAO,EAAK,EACrB,KAAK,IAAI,IAAM,EAAK,EACpB,KAAK,IAAI,MAAM,OAAO,EAAK,UA1G7B",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(n){const o=r=>{switch(r){case"ModelOrigin":return null;case"ObjectCenter":return[.5,.5,.5];case"BottomCenterZ":return[.5,.5,0];case"BottomCenterY":return[.5,1,.5];case"TopLeft":return[0,0,0];default:return null}};class s extends n.RuntimeObject3D{constructor(e,t){super(e,t);this._materialType=n.Model3DRuntimeObject.MaterialType.Basic;this._currentAnimationIndex=0;this._animationSpeedScale=1;this._animationPaused=!1;this._modelResourceName=t.content.modelResourceName,this._animations=t.content.animations,this._originPoint=o(t.content.originLocation),this._centerPoint=o(t.content.centerLocation),this._renderer=new n.Model3DRuntimeObjectRenderer(this,e),this._materialType=this._convertMaterialType(t.content.materialType),this.onModelChanged(t),this.onCreated()}onModelChanged(e){this._updateModel(e),this._animations.length>0&&this._renderer.playAnimation(this._animations[0].source,this._animations[0].loop)}updateFromObjectData(e,t){return super.updateFromObjectData(e,t),e.content.materialType!==t.content.materialType&&(this._materialType=this._convertMaterialType(t.content.materialType)),e.content.modelResourceName!==t.content.modelResourceName?this._reloadModel(t):(e.content.width!==t.content.width||e.content.height!==t.content.height||e.content.depth!==t.content.depth||e.content.rotationX!==t.content.rotationX||e.content.rotationY!==t.content.rotationY||e.content.rotationZ!==t.content.rotationZ||e.content.keepAspectRatio!==t.content.keepAspectRatio||e.content.materialType!==t.content.materialType)&&this._updateModel(t),e.content.originLocation!==t.content.originLocation&&(this._originPoint=o(t.content.originLocation)),e.content.centerLocation!==t.content.centerLocation&&(this._centerPoint=o(t.content.centerLocation)),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),mt:this._materialType,op:this._originPoint,cp:this._centerPoint,anis:this._animations,ai:this._currentAnimationIndex,ass:this._animationSpeedScale,ap:this._animationPaused}}updateFromNetworkSyncData(e){super.updateFromNetworkSyncData(e),e.mt!==void 0&&(this._materialType=e.mt),e.op!==void 0&&(this._originPoint=e.op),e.cp!==void 0&&(this._centerPoint=e.cp),e.anis!==void 0&&(this._animations=e.anis),e.ai!==void 0&&this.setAnimationIndex(e.ai),e.ass!==void 0&&this.setAnimationSpeedScale(e.ass),e.ap!==void 0&&e.ap!==this.isAnimationPaused()&&(e.ap?this.pauseAnimation():this.resumeAnimation())}_reloadModel(e){this._modelResourceName=e.content.modelResourceName,this._renderer._reloadModel(this,this._runtimeScene),this.onModelChanged(e)}_updateModel(e){const t=e.content.rotationX||0,a=e.content.rotationY||0,d=e.content.rotationZ||0,i=e.content.keepAspectRatio;this._renderer._updateModel(t,a,d,this._getOriginalWidth(),this._getOriginalHeight(),this._getOriginalDepth(),i)}getRenderer(){return this._renderer}_convertMaterialType(e){return e==="KeepOriginal"?n.Model3DRuntimeObject.MaterialType.KeepOriginal:e==="StandardWithoutMetalness"?n.Model3DRuntimeObject.MaterialType.StandardWithoutMetalness:n.Model3DRuntimeObject.MaterialType.Basic}update(e){const t=this.getElapsedTime()/1e3;this._renderer.updateAnimation(t*this._animationSpeedScale)}getAnimationIndex(){return this._currentAnimationIndex}setAnimationIndex(e){if(e=e|0,e<this._animations.length&&this._currentAnimationIndex!==e&&e>=0){const t=this._animations[e];this._currentAnimationIndex=e,this._renderer.playAnimation(t.source,t.loop),this._animationPaused&&this._renderer.pauseAnimation()}}getAnimationName(){return this._currentAnimationIndex>=this._animations.length?"":this._animations[this._currentAnimationIndex].name}setAnimationName(e){if(!e)return;const t=this._animations.findIndex(a=>a.name===e);t>=0&&this.setAnimationIndex(t)}isCurrentAnimationName(e){return this.getAnimationName()===e}hasAnimationEnded(){return this._renderer.hasAnimationEnded()}isAnimationPaused(){return this._animationPaused}pauseAnimation(){this._animationPaused=!0,this._renderer.pauseAnimation()}resumeAnimation(){this._animationPaused=!1,this._renderer.resumeAnimation()}getAnimationSpeedScale(){return this._animationSpeedScale}setAnimationSpeedScale(e){this._animationSpeedScale=e}getAnimationElapsedTime(){return this._renderer.getAnimationElapsedTime()}setAnimationElapsedTime(e){this._renderer.setAnimationElapsedTime(e)}getAnimationDuration(){return this._renderer.getAnimationDuration(this._animations[this._currentAnimationIndex].source)}getCenterX(){const e=this._renderer.getCenterPoint();return this.getWidth()*e[0]}getCenterY(){const e=this._renderer.getCenterPoint();return this.getHeight()*e[1]}getCenterZ(){const e=this._renderer.getCenterPoint();return this.getDepth()*e[2]}getDrawableX(){const e=this._renderer.getOriginPoint();return this.getX()-this.getWidth()*e[0]}getDrawableY(){const e=this._renderer.getOriginPoint();return this.getY()-this.getHeight()*e[1]}getDrawableZ(){const e=this._renderer.getOriginPoint();return this.getZ()-this.getDepth()*e[2]}}n.Model3DRuntimeObject=s,function(e){let r;(function(i){i[i.Basic=0]="Basic",i[i.StandardWithoutMetalness=1]="StandardWithoutMetalness",i[i.KeepOriginal=2]="KeepOriginal"})(r=e.MaterialType||(e.MaterialType={}))}(s=n.Model3DRuntimeObject||(n.Model3DRuntimeObject={})),n.registerObject("Scene3D::Model3DObject",n.Model3DRuntimeObject)})(gdjs||(gdjs={}));
1
+ var gdjs;(function(n){const o=r=>{switch(r){case"ModelOrigin":return null;case"ObjectCenter":return[.5,.5,.5];case"BottomCenterZ":return[.5,.5,0];case"BottomCenterY":return[.5,1,.5];case"TopLeft":return[0,0,0];default:return null}};class s extends n.RuntimeObject3D{constructor(e,t){super(e,t);this._materialType=n.Model3DRuntimeObject.MaterialType.Basic;this._currentAnimationIndex=0;this._animationSpeedScale=1;this._animationPaused=!1;this._modelResourceName=t.content.modelResourceName,this._animations=t.content.animations,this._originPoint=o(t.content.originLocation),this._centerPoint=o(t.content.centerLocation),this._renderer=new n.Model3DRuntimeObjectRenderer(this,e),this._materialType=this._convertMaterialType(t.content.materialType),this.onModelChanged(t),this.onCreated()}onModelChanged(e){this._updateModel(e),this._animations.length>0&&this._renderer.playAnimation(this._animations[0].source,this._animations[0].loop)}updateFromObjectData(e,t){return super.updateFromObjectData(e,t),e.content.materialType!==t.content.materialType&&(this._materialType=this._convertMaterialType(t.content.materialType)),e.content.modelResourceName!==t.content.modelResourceName?this._reloadModel(t):(e.content.width!==t.content.width||e.content.height!==t.content.height||e.content.depth!==t.content.depth||e.content.rotationX!==t.content.rotationX||e.content.rotationY!==t.content.rotationY||e.content.rotationZ!==t.content.rotationZ||e.content.keepAspectRatio!==t.content.keepAspectRatio||e.content.materialType!==t.content.materialType)&&this._updateModel(t),e.content.originLocation!==t.content.originLocation&&(this._originPoint=o(t.content.originLocation)),e.content.centerLocation!==t.content.centerLocation&&(this._centerPoint=o(t.content.centerLocation)),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),mt:this._materialType,op:this._originPoint,cp:this._centerPoint,anis:this._animations,ai:this._currentAnimationIndex,ass:this._animationSpeedScale,ap:this._animationPaused}}updateFromNetworkSyncData(e){super.updateFromNetworkSyncData(e),e.mt!==void 0&&(this._materialType=e.mt),e.op!==void 0&&(this._originPoint=e.op),e.cp!==void 0&&(this._centerPoint=e.cp),e.anis!==void 0&&(this._animations=e.anis),e.ai!==void 0&&this.setAnimationIndex(e.ai),e.ass!==void 0&&this.setAnimationSpeedScale(e.ass),e.ap!==void 0&&e.ap!==this.isAnimationPaused()&&(e.ap?this.pauseAnimation():this.resumeAnimation())}_reloadModel(e){this._modelResourceName=e.content.modelResourceName,this._renderer._reloadModel(this,this._runtimeScene),this.onModelChanged(e)}_updateModel(e){const t=e.content.rotationX||0,a=e.content.rotationY||0,d=e.content.rotationZ||0,i=e.content.keepAspectRatio;this._renderer._updateModel(t,a,d,this._getOriginalWidth(),this._getOriginalHeight(),this._getOriginalDepth(),i)}getRenderer(){return this._renderer}_convertMaterialType(e){return e==="KeepOriginal"?n.Model3DRuntimeObject.MaterialType.KeepOriginal:e==="StandardWithoutMetalness"?n.Model3DRuntimeObject.MaterialType.StandardWithoutMetalness:n.Model3DRuntimeObject.MaterialType.Basic}update(e){const t=this.getElapsedTime()/1e3;this._renderer.updateAnimation(t*this._animationSpeedScale)}getAnimationIndex(){return this._currentAnimationIndex}setAnimationIndex(e){if(e=e|0,e<this._animations.length&&this._currentAnimationIndex!==e&&e>=0){const t=this._animations[e];this._currentAnimationIndex=e,this._renderer.playAnimation(t.source,t.loop),this._animationPaused&&this._renderer.pauseAnimation()}}getAnimationName(){return this._currentAnimationIndex>=this._animations.length?"":this._animations[this._currentAnimationIndex].name}setAnimationName(e){if(!e)return;const t=this._animations.findIndex(a=>a.name===e);t>=0&&this.setAnimationIndex(t)}isCurrentAnimationName(e){return this.getAnimationName()===e}hasAnimationEnded(){return this._renderer.hasAnimationEnded()}isAnimationPaused(){return this._animationPaused}pauseAnimation(){this._animationPaused=!0,this._renderer.pauseAnimation()}resumeAnimation(){this._animationPaused=!1,this._renderer.resumeAnimation()}getAnimationSpeedScale(){return this._animationSpeedScale}setAnimationSpeedScale(e){this._animationSpeedScale=e}getAnimationElapsedTime(){return this._renderer.getAnimationElapsedTime()}setAnimationElapsedTime(e){this._renderer.setAnimationElapsedTime(e),this._animationPaused||this._renderer.resumeAnimation()}getAnimationDuration(){return this._renderer.getAnimationDuration(this._animations[this._currentAnimationIndex].source)}getCenterX(){const e=this._renderer.getCenterPoint();return this.getWidth()*e[0]}getCenterY(){const e=this._renderer.getCenterPoint();return this.getHeight()*e[1]}getCenterZ(){const e=this._renderer.getCenterPoint();return this.getDepth()*e[2]}getDrawableX(){const e=this._renderer.getOriginPoint();return this.getX()-this.getWidth()*e[0]}getDrawableY(){const e=this._renderer.getOriginPoint();return this.getY()-this.getHeight()*e[1]}getDrawableZ(){const e=this._renderer.getOriginPoint();return this.getZ()-this.getDepth()*e[2]}}n.Model3DRuntimeObject=s,function(e){let r;(function(i){i[i.Basic=0]="Basic",i[i.StandardWithoutMetalness=1]="StandardWithoutMetalness",i[i.KeepOriginal=2]="KeepOriginal"})(r=e.MaterialType||(e.MaterialType={}))}(s=n.Model3DRuntimeObject||(n.Model3DRuntimeObject={})),n.registerObject("Scene3D::Model3DObject",n.Model3DRuntimeObject)})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=Model3DRuntimeObject.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/3D/Model3DRuntimeObject.ts"],
4
- "sourcesContent": ["namespace gdjs {\n type Model3DAnimation = { name: string; source: string; loop: boolean };\n\n type Model3DObjectNetworkSyncDataType = {\n mt: number;\n op: FloatPoint3D | null;\n cp: FloatPoint3D | null;\n anis: Model3DAnimation[];\n ai: integer;\n ass: float;\n ap: boolean;\n };\n\n type Model3DObjectNetworkSyncData = Object3DNetworkSyncData &\n Model3DObjectNetworkSyncDataType;\n\n /** Base parameters for {@link gdjs.Cube3DRuntimeObject} */\n export interface Model3DObjectData extends Object3DData {\n /** The base parameters of the Model3D object */\n content: Object3DDataContent & {\n modelResourceName: string;\n rotationX: number;\n rotationY: number;\n rotationZ: number;\n keepAspectRatio: boolean;\n materialType: 'Basic' | 'StandardWithoutMetalness' | 'KeepOriginal';\n originLocation:\n | 'ModelOrigin'\n | 'ObjectCenter'\n | 'BottomCenterZ'\n | 'BottomCenterY'\n | 'TopLeft';\n centerLocation:\n | 'ModelOrigin'\n | 'ObjectCenter'\n | 'BottomCenterZ'\n | 'BottomCenterY';\n animations: Model3DAnimation[];\n };\n }\n\n type FloatPoint3D = [float, float, float];\n\n const getPointForLocation = (location: string): FloatPoint3D | null => {\n switch (location) {\n case 'ModelOrigin':\n return null;\n case 'ObjectCenter':\n return [0.5, 0.5, 0.5];\n case 'BottomCenterZ':\n return [0.5, 0.5, 0];\n case 'BottomCenterY':\n return [0.5, 1, 0.5];\n case 'TopLeft':\n return [0, 0, 0];\n default:\n return null;\n }\n };\n\n /**\n * A 3D object which displays a 3D model.\n */\n export class Model3DRuntimeObject\n extends gdjs.RuntimeObject3D\n implements gdjs.Animatable {\n _renderer: gdjs.Model3DRuntimeObjectRenderer;\n\n _modelResourceName: string;\n _materialType: gdjs.Model3DRuntimeObject.MaterialType =\n gdjs.Model3DRuntimeObject.MaterialType.Basic;\n\n /**\n * The local point of the model that will be at the object position.\n *\n * Coordinates are between 0 and 1.\n *\n * Its value is `null` when the point is configured to `\"ModelOrigin\"`\n * because the model origin needs to be evaluated according to the object\n * configuration.\n * @see gdjs.Model3DRuntimeObject3DRenderer.getOriginPoint\n */\n _originPoint: FloatPoint3D | null;\n /**\n * The local point of the model that is used as rotation center.\n *\n * Coordinates are between 0 and 1.\n *\n * Its value is `null` when the point is configured to `\"ModelOrigin\"`\n * because the model origin needs to be evaluated according to the object\n * configuration.\n * @see gdjs.Model3DRuntimeObject3DRenderer.getCenterPoint\n */\n _centerPoint: FloatPoint3D | null;\n\n _animations: Model3DAnimation[];\n _currentAnimationIndex: integer = 0;\n _animationSpeedScale: float = 1;\n _animationPaused: boolean = false;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n objectData: Model3DObjectData\n ) {\n super(instanceContainer, objectData);\n this._modelResourceName = objectData.content.modelResourceName;\n this._animations = objectData.content.animations;\n this._originPoint = getPointForLocation(\n objectData.content.originLocation\n );\n this._centerPoint = getPointForLocation(\n objectData.content.centerLocation\n );\n this._renderer = new gdjs.Model3DRuntimeObjectRenderer(\n this,\n instanceContainer\n );\n this._materialType = this._convertMaterialType(\n objectData.content.materialType\n );\n\n this.onModelChanged(objectData);\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n /**\n * To be called after the renderer loaded a Model resource:\n * - After the renderer was instantiated\n * - After reloading the model\n */\n private onModelChanged(objectData) {\n this._updateModel(objectData);\n if (this._animations.length > 0) {\n this._renderer.playAnimation(\n this._animations[0].source,\n this._animations[0].loop\n );\n }\n }\n\n updateFromObjectData(\n oldObjectData: Model3DObjectData,\n newObjectData: Model3DObjectData\n ): boolean {\n super.updateFromObjectData(oldObjectData, newObjectData);\n\n if (\n oldObjectData.content.materialType !==\n newObjectData.content.materialType\n ) {\n this._materialType = this._convertMaterialType(\n newObjectData.content.materialType\n );\n }\n if (\n oldObjectData.content.modelResourceName !==\n newObjectData.content.modelResourceName\n ) {\n this._reloadModel(newObjectData);\n } else if (\n oldObjectData.content.width !== newObjectData.content.width ||\n oldObjectData.content.height !== newObjectData.content.height ||\n oldObjectData.content.depth !== newObjectData.content.depth ||\n oldObjectData.content.rotationX !== newObjectData.content.rotationX ||\n oldObjectData.content.rotationY !== newObjectData.content.rotationY ||\n oldObjectData.content.rotationZ !== newObjectData.content.rotationZ ||\n oldObjectData.content.keepAspectRatio !==\n newObjectData.content.keepAspectRatio ||\n oldObjectData.content.materialType !==\n newObjectData.content.materialType\n ) {\n this._updateModel(newObjectData);\n }\n if (\n oldObjectData.content.originLocation !==\n newObjectData.content.originLocation\n ) {\n this._originPoint = getPointForLocation(\n newObjectData.content.originLocation\n );\n }\n if (\n oldObjectData.content.centerLocation !==\n newObjectData.content.centerLocation\n ) {\n this._centerPoint = getPointForLocation(\n newObjectData.content.centerLocation\n );\n }\n return true;\n }\n\n getNetworkSyncData(): Model3DObjectNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n mt: this._materialType,\n op: this._originPoint,\n cp: this._centerPoint,\n anis: this._animations,\n ai: this._currentAnimationIndex,\n ass: this._animationSpeedScale,\n ap: this._animationPaused,\n };\n }\n\n updateFromNetworkSyncData(\n networkSyncData: Model3DObjectNetworkSyncData\n ): void {\n super.updateFromNetworkSyncData(networkSyncData);\n\n if (networkSyncData.mt !== undefined) {\n this._materialType = networkSyncData.mt;\n }\n if (networkSyncData.op !== undefined) {\n this._originPoint = networkSyncData.op;\n }\n if (networkSyncData.cp !== undefined) {\n this._centerPoint = networkSyncData.cp;\n }\n if (networkSyncData.anis !== undefined) {\n this._animations = networkSyncData.anis;\n }\n if (networkSyncData.ai !== undefined) {\n this.setAnimationIndex(networkSyncData.ai);\n }\n if (networkSyncData.ass !== undefined) {\n this.setAnimationSpeedScale(networkSyncData.ass);\n }\n if (networkSyncData.ap !== undefined) {\n if (networkSyncData.ap !== this.isAnimationPaused()) {\n networkSyncData.ap ? this.pauseAnimation() : this.resumeAnimation();\n }\n }\n }\n\n _reloadModel(objectData: Model3DObjectData) {\n this._modelResourceName = objectData.content.modelResourceName;\n this._renderer._reloadModel(this, this._runtimeScene);\n this.onModelChanged(objectData);\n }\n\n _updateModel(objectData: Model3DObjectData) {\n const rotationX = objectData.content.rotationX || 0;\n const rotationY = objectData.content.rotationY || 0;\n const rotationZ = objectData.content.rotationZ || 0;\n const keepAspectRatio = objectData.content.keepAspectRatio;\n this._renderer._updateModel(\n rotationX,\n rotationY,\n rotationZ,\n this._getOriginalWidth(),\n this._getOriginalHeight(),\n this._getOriginalDepth(),\n keepAspectRatio\n );\n }\n\n getRenderer(): RuntimeObject3DRenderer {\n return this._renderer;\n }\n\n _convertMaterialType(\n materialTypeString: string\n ): gdjs.Model3DRuntimeObject.MaterialType {\n if (materialTypeString === 'KeepOriginal') {\n return gdjs.Model3DRuntimeObject.MaterialType.KeepOriginal;\n } else if (materialTypeString === 'StandardWithoutMetalness') {\n return gdjs.Model3DRuntimeObject.MaterialType.StandardWithoutMetalness;\n } else {\n return gdjs.Model3DRuntimeObject.MaterialType.Basic;\n }\n }\n\n update(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n const elapsedTime = this.getElapsedTime() / 1000;\n this._renderer.updateAnimation(elapsedTime * this._animationSpeedScale);\n }\n\n /**\n * Get the index of the animation being played.\n * @return The index of the new animation being played\n */\n getAnimationIndex(): number {\n return this._currentAnimationIndex;\n }\n\n /**\n * Change the animation being played.\n * @param animationIndex The index of the new animation to be played\n */\n setAnimationIndex(animationIndex: number): void {\n animationIndex = animationIndex | 0;\n if (\n animationIndex < this._animations.length &&\n this._currentAnimationIndex !== animationIndex &&\n animationIndex >= 0\n ) {\n const animation = this._animations[animationIndex];\n this._currentAnimationIndex = animationIndex;\n this._renderer.playAnimation(animation.source, animation.loop);\n if (this._animationPaused) {\n this._renderer.pauseAnimation();\n }\n }\n }\n\n /**\n * Get the name of the animation being played.\n * @return The name of the new animation being played\n */\n getAnimationName(): string {\n if (this._currentAnimationIndex >= this._animations.length) {\n return '';\n }\n return this._animations[this._currentAnimationIndex].name;\n }\n\n /**\n * Change the animation being played.\n * @param newAnimationName The name of the new animation to be played\n */\n setAnimationName(newAnimationName: string): void {\n if (!newAnimationName) {\n return;\n }\n const animationIndex = this._animations.findIndex(\n (animation) => animation.name === newAnimationName\n );\n if (animationIndex >= 0) {\n this.setAnimationIndex(animationIndex);\n }\n }\n\n isCurrentAnimationName(name: string): boolean {\n return this.getAnimationName() === name;\n }\n\n /**\n * Return true if animation has ended.\n * The animation had ended if:\n * - it's not configured as a loop;\n * - the current frame is the last frame;\n * - the last frame has been displayed long enough.\n */\n hasAnimationEnded(): boolean {\n return this._renderer.hasAnimationEnded();\n }\n\n isAnimationPaused() {\n return this._animationPaused;\n }\n\n pauseAnimation() {\n this._animationPaused = true;\n this._renderer.pauseAnimation();\n }\n\n resumeAnimation() {\n this._animationPaused = false;\n this._renderer.resumeAnimation();\n }\n\n getAnimationSpeedScale() {\n return this._animationSpeedScale;\n }\n\n setAnimationSpeedScale(ratio: float): void {\n this._animationSpeedScale = ratio;\n }\n\n getAnimationElapsedTime(): float {\n return this._renderer.getAnimationElapsedTime();\n }\n\n setAnimationElapsedTime(time: float): void {\n this._renderer.setAnimationElapsedTime(time);\n }\n\n getAnimationDuration(): float {\n return this._renderer.getAnimationDuration(\n this._animations[this._currentAnimationIndex].source\n );\n }\n\n getCenterX(): float {\n const centerPoint = this._renderer.getCenterPoint();\n return this.getWidth() * centerPoint[0];\n }\n\n getCenterY(): float {\n const centerPoint = this._renderer.getCenterPoint();\n return this.getHeight() * centerPoint[1];\n }\n\n getCenterZ(): float {\n const centerPoint = this._renderer.getCenterPoint();\n return this.getDepth() * centerPoint[2];\n }\n\n getDrawableX(): float {\n const originPoint = this._renderer.getOriginPoint();\n return this.getX() - this.getWidth() * originPoint[0];\n }\n\n getDrawableY(): float {\n const originPoint = this._renderer.getOriginPoint();\n return this.getY() - this.getHeight() * originPoint[1];\n }\n\n getDrawableZ(): float {\n const originPoint = this._renderer.getOriginPoint();\n return this.getZ() - this.getDepth() * originPoint[2];\n }\n }\n\n export namespace Model3DRuntimeObject {\n export enum MaterialType {\n Basic,\n StandardWithoutMetalness,\n KeepOriginal,\n }\n }\n gdjs.registerObject('Scene3D::Model3DObject', gdjs.Model3DRuntimeObject);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["namespace gdjs {\n type Model3DAnimation = { name: string; source: string; loop: boolean };\n\n type Model3DObjectNetworkSyncDataType = {\n mt: number;\n op: FloatPoint3D | null;\n cp: FloatPoint3D | null;\n anis: Model3DAnimation[];\n ai: integer;\n ass: float;\n ap: boolean;\n };\n\n type Model3DObjectNetworkSyncData = Object3DNetworkSyncData &\n Model3DObjectNetworkSyncDataType;\n\n /** Base parameters for {@link gdjs.Cube3DRuntimeObject} */\n export interface Model3DObjectData extends Object3DData {\n /** The base parameters of the Model3D object */\n content: Object3DDataContent & {\n modelResourceName: string;\n rotationX: number;\n rotationY: number;\n rotationZ: number;\n keepAspectRatio: boolean;\n materialType: 'Basic' | 'StandardWithoutMetalness' | 'KeepOriginal';\n originLocation:\n | 'ModelOrigin'\n | 'ObjectCenter'\n | 'BottomCenterZ'\n | 'BottomCenterY'\n | 'TopLeft';\n centerLocation:\n | 'ModelOrigin'\n | 'ObjectCenter'\n | 'BottomCenterZ'\n | 'BottomCenterY';\n animations: Model3DAnimation[];\n };\n }\n\n type FloatPoint3D = [float, float, float];\n\n const getPointForLocation = (location: string): FloatPoint3D | null => {\n switch (location) {\n case 'ModelOrigin':\n return null;\n case 'ObjectCenter':\n return [0.5, 0.5, 0.5];\n case 'BottomCenterZ':\n return [0.5, 0.5, 0];\n case 'BottomCenterY':\n return [0.5, 1, 0.5];\n case 'TopLeft':\n return [0, 0, 0];\n default:\n return null;\n }\n };\n\n /**\n * A 3D object which displays a 3D model.\n */\n export class Model3DRuntimeObject\n extends gdjs.RuntimeObject3D\n implements gdjs.Animatable {\n _renderer: gdjs.Model3DRuntimeObjectRenderer;\n\n _modelResourceName: string;\n _materialType: gdjs.Model3DRuntimeObject.MaterialType =\n gdjs.Model3DRuntimeObject.MaterialType.Basic;\n\n /**\n * The local point of the model that will be at the object position.\n *\n * Coordinates are between 0 and 1.\n *\n * Its value is `null` when the point is configured to `\"ModelOrigin\"`\n * because the model origin needs to be evaluated according to the object\n * configuration.\n * @see gdjs.Model3DRuntimeObject3DRenderer.getOriginPoint\n */\n _originPoint: FloatPoint3D | null;\n /**\n * The local point of the model that is used as rotation center.\n *\n * Coordinates are between 0 and 1.\n *\n * Its value is `null` when the point is configured to `\"ModelOrigin\"`\n * because the model origin needs to be evaluated according to the object\n * configuration.\n * @see gdjs.Model3DRuntimeObject3DRenderer.getCenterPoint\n */\n _centerPoint: FloatPoint3D | null;\n\n _animations: Model3DAnimation[];\n _currentAnimationIndex: integer = 0;\n _animationSpeedScale: float = 1;\n _animationPaused: boolean = false;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n objectData: Model3DObjectData\n ) {\n super(instanceContainer, objectData);\n this._modelResourceName = objectData.content.modelResourceName;\n this._animations = objectData.content.animations;\n this._originPoint = getPointForLocation(\n objectData.content.originLocation\n );\n this._centerPoint = getPointForLocation(\n objectData.content.centerLocation\n );\n this._renderer = new gdjs.Model3DRuntimeObjectRenderer(\n this,\n instanceContainer\n );\n this._materialType = this._convertMaterialType(\n objectData.content.materialType\n );\n\n this.onModelChanged(objectData);\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n /**\n * To be called after the renderer loaded a Model resource:\n * - After the renderer was instantiated\n * - After reloading the model\n */\n private onModelChanged(objectData) {\n this._updateModel(objectData);\n if (this._animations.length > 0) {\n this._renderer.playAnimation(\n this._animations[0].source,\n this._animations[0].loop\n );\n }\n }\n\n updateFromObjectData(\n oldObjectData: Model3DObjectData,\n newObjectData: Model3DObjectData\n ): boolean {\n super.updateFromObjectData(oldObjectData, newObjectData);\n\n if (\n oldObjectData.content.materialType !==\n newObjectData.content.materialType\n ) {\n this._materialType = this._convertMaterialType(\n newObjectData.content.materialType\n );\n }\n if (\n oldObjectData.content.modelResourceName !==\n newObjectData.content.modelResourceName\n ) {\n this._reloadModel(newObjectData);\n } else if (\n oldObjectData.content.width !== newObjectData.content.width ||\n oldObjectData.content.height !== newObjectData.content.height ||\n oldObjectData.content.depth !== newObjectData.content.depth ||\n oldObjectData.content.rotationX !== newObjectData.content.rotationX ||\n oldObjectData.content.rotationY !== newObjectData.content.rotationY ||\n oldObjectData.content.rotationZ !== newObjectData.content.rotationZ ||\n oldObjectData.content.keepAspectRatio !==\n newObjectData.content.keepAspectRatio ||\n oldObjectData.content.materialType !==\n newObjectData.content.materialType\n ) {\n this._updateModel(newObjectData);\n }\n if (\n oldObjectData.content.originLocation !==\n newObjectData.content.originLocation\n ) {\n this._originPoint = getPointForLocation(\n newObjectData.content.originLocation\n );\n }\n if (\n oldObjectData.content.centerLocation !==\n newObjectData.content.centerLocation\n ) {\n this._centerPoint = getPointForLocation(\n newObjectData.content.centerLocation\n );\n }\n return true;\n }\n\n getNetworkSyncData(): Model3DObjectNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n mt: this._materialType,\n op: this._originPoint,\n cp: this._centerPoint,\n anis: this._animations,\n ai: this._currentAnimationIndex,\n ass: this._animationSpeedScale,\n ap: this._animationPaused,\n };\n }\n\n updateFromNetworkSyncData(\n networkSyncData: Model3DObjectNetworkSyncData\n ): void {\n super.updateFromNetworkSyncData(networkSyncData);\n\n if (networkSyncData.mt !== undefined) {\n this._materialType = networkSyncData.mt;\n }\n if (networkSyncData.op !== undefined) {\n this._originPoint = networkSyncData.op;\n }\n if (networkSyncData.cp !== undefined) {\n this._centerPoint = networkSyncData.cp;\n }\n if (networkSyncData.anis !== undefined) {\n this._animations = networkSyncData.anis;\n }\n if (networkSyncData.ai !== undefined) {\n this.setAnimationIndex(networkSyncData.ai);\n }\n if (networkSyncData.ass !== undefined) {\n this.setAnimationSpeedScale(networkSyncData.ass);\n }\n if (networkSyncData.ap !== undefined) {\n if (networkSyncData.ap !== this.isAnimationPaused()) {\n networkSyncData.ap ? this.pauseAnimation() : this.resumeAnimation();\n }\n }\n }\n\n _reloadModel(objectData: Model3DObjectData) {\n this._modelResourceName = objectData.content.modelResourceName;\n this._renderer._reloadModel(this, this._runtimeScene);\n this.onModelChanged(objectData);\n }\n\n _updateModel(objectData: Model3DObjectData) {\n const rotationX = objectData.content.rotationX || 0;\n const rotationY = objectData.content.rotationY || 0;\n const rotationZ = objectData.content.rotationZ || 0;\n const keepAspectRatio = objectData.content.keepAspectRatio;\n this._renderer._updateModel(\n rotationX,\n rotationY,\n rotationZ,\n this._getOriginalWidth(),\n this._getOriginalHeight(),\n this._getOriginalDepth(),\n keepAspectRatio\n );\n }\n\n getRenderer(): RuntimeObject3DRenderer {\n return this._renderer;\n }\n\n _convertMaterialType(\n materialTypeString: string\n ): gdjs.Model3DRuntimeObject.MaterialType {\n if (materialTypeString === 'KeepOriginal') {\n return gdjs.Model3DRuntimeObject.MaterialType.KeepOriginal;\n } else if (materialTypeString === 'StandardWithoutMetalness') {\n return gdjs.Model3DRuntimeObject.MaterialType.StandardWithoutMetalness;\n } else {\n return gdjs.Model3DRuntimeObject.MaterialType.Basic;\n }\n }\n\n update(instanceContainer: gdjs.RuntimeInstanceContainer): void {\n const elapsedTime = this.getElapsedTime() / 1000;\n this._renderer.updateAnimation(elapsedTime * this._animationSpeedScale);\n }\n\n /**\n * Get the index of the animation being played.\n * @return The index of the new animation being played\n */\n getAnimationIndex(): number {\n return this._currentAnimationIndex;\n }\n\n /**\n * Change the animation being played.\n * @param animationIndex The index of the new animation to be played\n */\n setAnimationIndex(animationIndex: number): void {\n animationIndex = animationIndex | 0;\n if (\n animationIndex < this._animations.length &&\n this._currentAnimationIndex !== animationIndex &&\n animationIndex >= 0\n ) {\n const animation = this._animations[animationIndex];\n this._currentAnimationIndex = animationIndex;\n this._renderer.playAnimation(animation.source, animation.loop);\n if (this._animationPaused) {\n this._renderer.pauseAnimation();\n }\n }\n }\n\n /**\n * Get the name of the animation being played.\n * @return The name of the new animation being played\n */\n getAnimationName(): string {\n if (this._currentAnimationIndex >= this._animations.length) {\n return '';\n }\n return this._animations[this._currentAnimationIndex].name;\n }\n\n /**\n * Change the animation being played.\n * @param newAnimationName The name of the new animation to be played\n */\n setAnimationName(newAnimationName: string): void {\n if (!newAnimationName) {\n return;\n }\n const animationIndex = this._animations.findIndex(\n (animation) => animation.name === newAnimationName\n );\n if (animationIndex >= 0) {\n this.setAnimationIndex(animationIndex);\n }\n }\n\n isCurrentAnimationName(name: string): boolean {\n return this.getAnimationName() === name;\n }\n\n /**\n * Return true if animation has ended.\n * The animation had ended if:\n * - it's not configured as a loop;\n * - the current frame is the last frame;\n * - the last frame has been displayed long enough.\n */\n hasAnimationEnded(): boolean {\n return this._renderer.hasAnimationEnded();\n }\n\n isAnimationPaused() {\n return this._animationPaused;\n }\n\n pauseAnimation() {\n this._animationPaused = true;\n this._renderer.pauseAnimation();\n }\n\n resumeAnimation() {\n this._animationPaused = false;\n this._renderer.resumeAnimation();\n }\n\n getAnimationSpeedScale() {\n return this._animationSpeedScale;\n }\n\n setAnimationSpeedScale(ratio: float): void {\n this._animationSpeedScale = ratio;\n }\n\n getAnimationElapsedTime(): float {\n return this._renderer.getAnimationElapsedTime();\n }\n\n setAnimationElapsedTime(time: float): void {\n this._renderer.setAnimationElapsedTime(time);\n if (!this._animationPaused) {\n this._renderer.resumeAnimation();\n }\n }\n\n getAnimationDuration(): float {\n return this._renderer.getAnimationDuration(\n this._animations[this._currentAnimationIndex].source\n );\n }\n\n getCenterX(): float {\n const centerPoint = this._renderer.getCenterPoint();\n return this.getWidth() * centerPoint[0];\n }\n\n getCenterY(): float {\n const centerPoint = this._renderer.getCenterPoint();\n return this.getHeight() * centerPoint[1];\n }\n\n getCenterZ(): float {\n const centerPoint = this._renderer.getCenterPoint();\n return this.getDepth() * centerPoint[2];\n }\n\n getDrawableX(): float {\n const originPoint = this._renderer.getOriginPoint();\n return this.getX() - this.getWidth() * originPoint[0];\n }\n\n getDrawableY(): float {\n const originPoint = this._renderer.getOriginPoint();\n return this.getY() - this.getHeight() * originPoint[1];\n }\n\n getDrawableZ(): float {\n const originPoint = this._renderer.getOriginPoint();\n return this.getZ() - this.getDepth() * originPoint[2];\n }\n }\n\n export namespace Model3DRuntimeObject {\n export enum MaterialType {\n Basic,\n StandardWithoutMetalness,\n KeepOriginal,\n }\n }\n gdjs.registerObject('Scene3D::Model3DObject', gdjs.Model3DRuntimeObject);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(T){let Q;(function(r){const e=new T.Logger("AdMob"),J={appOpen:{android:"ca-app-pub-3940256099942544/9257395921",ios:"ca-app-pub-3940256099942544/5575463023"},banner:{android:"ca-app-pub-3940256099942544/6300978111",ios:"ca-app-pub-3940256099942544/2934735716"},interstitial:{android:"ca-app-pub-3940256099942544/1033173712",ios:"ca-app-pub-3940256099942544/4411468910"},interstitialVideo:{android:"ca-app-pub-3940256099942544/8691691433",ios:"ca-app-pub-3940256099942544/5135589807"},rewarded:{android:"ca-app-pub-3940256099942544/5224354917",ios:"ca-app-pub-3940256099942544/1712485313"},rewardedInterstitial:{android:"ca-app-pub-3940256099942544/5354046379",ios:"ca-app-pub-3940256099942544/6978759866"},native:{android:"ca-app-pub-3940256099942544/2247696110",ios:"ca-app-pub-3940256099942544/3986624511"},nativeVideo:{android:"ca-app-pub-3940256099942544/1044960115",ios:"ca-app-pub-3940256099942544/2521693316"}};let l;(function(s){s[s.BANNER=0]="BANNER",s[s.LARGE_BANNER=1]="LARGE_BANNER",s[s.MEDIUM_RECTANGLE=2]="MEDIUM_RECTANGLE",s[s.FULL_BANNER=3]="FULL_BANNER",s[s.LEADERBOARD=4]="LEADERBOARD",s[s.SMART_BANNER=5]="SMART_BANNER"})(l||(l={}));const X={BANNER:0,LARGE_BANNER:1,MEDIUM_RECTANGLE:2,FULL_BANNER:3,LEADERBOARD:4,SMART_BANNER:5};let C;(function(n){n[n.Portrait=1]="Portrait",n[n.PortraitUpsideDown=2]="PortraitUpsideDown",n[n.LandscapeRight=3]="LandscapeRight",n[n.LandscapeLeft=4]="LandscapeLeft"})(C||(C={}));let G=!1,k=!1,q=!1,R,K=5,W=!1,S=!1,p=!1,O=!1,c,h=!1,A=!1,v=!1,E=!1,u,g=!1,I=!1,V=!1,y=!1,f,L=!1,N=!1,_=!1,F=!1,x=!1,w,B=!1,b=!1,U=!1,P=!1,m=!1,H="0";document.addEventListener("deviceready",async()=>{e.info("Starting AdMob."),k=!0,await admob.start(),e.info("AdMob successfully started."),k=!1,G=!0},!1);const d=async()=>{if(typeof cordova=="undefined")return e.warn("We are not on mobile, AdMob will not be available."),!1;if(typeof admob=="undefined")return e.warn("AdMob has not been configured properly."),!1;if(!G){if(k){let t=0;for(;!G&&t<5e3;)await new Promise(a=>setTimeout(a,100)),t+=100}if(!G)return e.warn("AdMob is not started."),!1}return!0},D=(t,a,o)=>{if(typeof cordova=="undefined"){e.warn("Cordova is not available.");return}return cordova.platformId==="android"?q?J[o].android:t:cordova.platformId==="ios"?q?J[o].ios:a:(e.error("Unsupported platform: ",cordova.platformId),null)};r.setTestMode=async t=>{!await d()||(e.info("Setting AdMob test mode to:",t),q=t)},r.isAppOpenLoading=()=>g,r.isAppOpenReady=()=>I,r.isAppOpenShowing=()=>V,r.isAppOpenErrored=()=>y,r.loadAppOpen=async(t,a,o,i)=>{if(!await d()||g||V)return;const n=D(t,a,"appOpen");if(!!n){g=!0,I=!1,y=!1,u=new admob.AppOpenAd({adUnitId:n,orientation:o?4:1}),u.on("load",()=>{I=!0,g=!1}),u.on("loadfail",()=>{g=!1,y=!0}),u.on("show",()=>{V=!0,I=!1}),u.on("showfail",()=>{V=!1,y=!0}),u.on("dismiss",()=>{V=!1});try{e.info("Loading Admob App Open."),await u.load(),e.info("AdMob App Open successfully loaded."),g=!1,I=!0,i&&r.showAppOpen()}catch(z){e.error("Error while loading an App Open:",z),g=!1,I=!1,y=!0}}},r.showAppOpen=async()=>{if(!!await d()){if(!u){e.warn("App Open has not been set up, call loadAppOpen first.");return}if(!I){e.info("App Open not loaded yet, cannot display it.");return}y=!1;try{e.info("Showing AdMob App Open."),await u.show()}catch(t){e.error("Error while showing an AdMob App Open:",t),V=!1,y=!0}}},r.isBannerConfigured=()=>W,r.isBannerLoaded=()=>S,r.isBannerShowing=()=>p,r.isBannerErrored=()=>O,r.setBannerAdSizeType=t=>{K=X[t]||5},r.setupBanner=async(t,a,o)=>{if(!await d())return;const i=D(t,a,"banner");!i||(R&&p&&(e.info("Banner already visible, hiding it to display new one."),await r.hideBanner()),W=!1,S=!1,R=new admob.BannerAd({adUnitId:i,position:o?"top":"bottom",size:K}),R.on("load",()=>{p=!0,S=!0}),R.on("loadfail",()=>{p=!1,S=!1,O=!0}),W=!0)},r.showBanner=async()=>{if(!R){e.info("Banner not configured, use setupBanner first.");return}if(p){e.info("Banner already visible. Ignoring.");return}O=!1;try{e.info("Showing AdMob banner."),await R.show(),S&&(p=!0)}catch(t){p=!1,O=!0,e.error("Error while showing an AdMob banner:",t)}},r.hideBanner=async()=>{if(!!await d()){if(!R||!p){e.warn("No banner is being shown.");return}await R.hide(),p=!1}},r.isInterstitialLoading=()=>h,r.isInterstitialReady=()=>A,r.isInterstitialShowing=()=>v,r.isInterstitialErrored=()=>E,r.loadInterstitial=async(t,a,o)=>{if(!await d()||h||v)return;const i=D(t,a,"interstitial");if(!!i){h=!0,A=!1,E=!1,c=new admob.InterstitialAd({adUnitId:i,npa:H}),c.on("load",()=>{A=!0,h=!1}),c.on("loadfail",()=>{h=!1,E=!0}),c.on("show",()=>{v=!0,A=!1}),c.on("showfail",()=>{v=!1,E=!0}),c.on("dismiss",()=>{v=!1});try{e.info("Loading Admob interstitial."),await c.load(),e.info("AdMob interstitial successfully loaded."),h=!1,A=!0,o&&r.showInterstitial()}catch(n){e.error("Error while loading a interstitial:",n),h=!1,A=!1,E=!0}}},r.showInterstitial=async()=>{if(!!await d()){if(!c){e.warn("Interstitial has not been set up, call loadInterstitial first.");return}if(!A){e.info("Interstitial not loaded yet, cannot display it.");return}E=!1;try{e.info("Showing AdMob interstitial."),await c.show()}catch(t){e.error("Error while showing an AdMob interstitial:",t),v=!1,E=!0}}},r.isRewardedInterstitialLoading=()=>L,r.isRewardedInterstitialReady=()=>N,r.isRewardedInterstitialShowing=()=>_,r.isRewardedInterstitialErrored=()=>x,r.wasRewardedInterstitialRewardReceived=function(t){const a=F;return t&&(F=!1),a},r.loadRewardedInterstitial=async(t,a,o)=>{if(!await d()||L||_)return;const i=D(t,a,"rewardedInterstitial");if(!!i){L=!0,N=!1,x=!1,f=new admob.RewardedInterstitialAd({adUnitId:i,npa:H}),f.on("load",()=>{N=!0,L=!1}),f.on("loadfail",()=>{L=!1,x=!0}),f.on("show",()=>{_=!0,N=!1}),f.on("showfail",()=>{_=!1,x=!0}),f.on("dismiss",()=>{_=!1}),f.on("reward",()=>{F=!0});try{e.info("Loading AdMob rewarded interstitial."),await f.load(),e.info("AdMob rewarded interstitial successfully loaded."),L=!1,N=!0,o&&r.showRewardedInterstitial()}catch(n){L=!1,N=!1,x=!0,e.error("Error while loading a rewarded interstitial:",n)}}},r.showRewardedInterstitial=async()=>{if(!!await d()){if(!f){e.warn("interstitial has not been set up, call loadRewardedInterstitial first.");return}N||e.info("Rewarded interstitial not loaded yet, cannot display it."),x=!1;try{e.info("Showing AdMob rewarded interstitial."),await f.show()}catch(t){e.error("Error while showing an AdMob rewarded interstitial:",t),_=!1,x=!0}}},r.markRewardedInterstitialRewardAsClaimed=()=>{F=!1},r.isRewardedVideoLoading=()=>B,r.isRewardedVideoReady=()=>b,r.isRewardedVideoShowing=()=>U,r.isRewardedVideoErrored=()=>m,r.wasRewardedVideoRewardReceived=function(t){const a=P;return t&&(P=!1),a},r.loadRewardedVideo=async(t,a,o)=>{if(!await d()||B||U)return;const i=D(t,a,"rewarded");if(!!i){B=!0,b=!1,m=!1,w=new admob.RewardedAd({adUnitId:i,npa:H}),w.on("load",()=>{b=!0,B=!1}),w.on("loadfail",()=>{B=!1,m=!0}),w.on("show",()=>{U=!0,b=!1}),w.on("showfail",()=>{U=!1,m=!0}),w.on("dismiss",()=>{U=!1}),w.on("reward",()=>{P=!0});try{e.info("Loading AdMob rewarded video."),await w.load(),e.info("AdMob rewarded video successfully loaded."),B=!1,b=!0,o&&r.showRewardedVideo()}catch(n){B=!1,b=!1,m=!0,e.error("Error while loading a rewarded video:",n)}}},r.showRewardedVideo=async()=>{if(!!await d()){if(!w){e.warn("Video has not been set up, call loadRewardedVideo first.");return}b||e.info("Rewarded video not loaded yet, cannot display it."),m=!1;try{e.info("Showing AdMob rewarded video."),await w.show()}catch(t){e.error("Error while showing an AdMob rewarded video:",t),U=!1,m=!0}}},r.markRewardedVideoRewardAsClaimed=()=>{P=!1}})(Q=T.adMob||(T.adMob={}))})(gdjs||(gdjs={}));
1
+ var gdjs;(function(T){let Q;(function(r){const e=new T.Logger("AdMob"),J={appOpen:{android:"ca-app-pub-3940256099942544/9257395921",ios:"ca-app-pub-3940256099942544/5575463023"},banner:{android:"ca-app-pub-3940256099942544/6300978111",ios:"ca-app-pub-3940256099942544/2934735716"},interstitial:{android:"ca-app-pub-3940256099942544/1033173712",ios:"ca-app-pub-3940256099942544/4411468910"},interstitialVideo:{android:"ca-app-pub-3940256099942544/8691691433",ios:"ca-app-pub-3940256099942544/5135589807"},rewarded:{android:"ca-app-pub-3940256099942544/5224354917",ios:"ca-app-pub-3940256099942544/1712485313"},rewardedInterstitial:{android:"ca-app-pub-3940256099942544/5354046379",ios:"ca-app-pub-3940256099942544/6978759866"},native:{android:"ca-app-pub-3940256099942544/2247696110",ios:"ca-app-pub-3940256099942544/3986624511"},nativeVideo:{android:"ca-app-pub-3940256099942544/1044960115",ios:"ca-app-pub-3940256099942544/2521693316"}};let l;(function(s){s[s.BANNER=0]="BANNER",s[s.LARGE_BANNER=1]="LARGE_BANNER",s[s.MEDIUM_RECTANGLE=2]="MEDIUM_RECTANGLE",s[s.FULL_BANNER=3]="FULL_BANNER",s[s.LEADERBOARD=4]="LEADERBOARD",s[s.SMART_BANNER=5]="SMART_BANNER"})(l||(l={}));const X={BANNER:0,LARGE_BANNER:1,MEDIUM_RECTANGLE:2,FULL_BANNER:3,LEADERBOARD:4,SMART_BANNER:5};let C;(function(n){n[n.Portrait=1]="Portrait",n[n.PortraitUpsideDown=2]="PortraitUpsideDown",n[n.LandscapeRight=3]="LandscapeRight",n[n.LandscapeLeft=4]="LandscapeLeft"})(C||(C={}));let G=!1,k=!1,q=!1,R,K=5,W=!1,S=!1,p=!1,O=!1,c,h=!1,A=!1,v=!1,E=!1,u,g=!1,I=!1,V=!1,y=!1,f,L=!1,N=!1,_=!1,F=!1,x=!1,w,B=!1,b=!1,U=!1,P=!1,m=!1,H="0";document.addEventListener("deviceready",async()=>{e.info("Starting AdMob."),k=!0,await admob.start(),e.info("AdMob successfully started."),k=!1,G=!0},!1);const d=async()=>{if(typeof cordova=="undefined")return e.warn("We are not on mobile, AdMob will not be available."),!1;if(typeof admob=="undefined")return e.warn("AdMob has not been configured properly."),!1;if(!G){if(k){let t=0;for(;!G&&t<5e3;)await new Promise(a=>setTimeout(a,100)),t+=100}if(!G)return e.warn("AdMob is not started."),!1}return!0},D=(t,a,o)=>{if(typeof cordova=="undefined"){e.warn("Cordova is not available.");return}return cordova.platformId==="android"?q?J[o].android:t:cordova.platformId==="ios"?q?J[o].ios:a:(e.error("Unsupported platform: ",cordova.platformId),null)};r.setTestMode=async t=>{!await d()||(e.info("Setting AdMob test mode to:",t),q=t)},r.isAppOpenLoading=()=>g,r.isAppOpenReady=()=>I,r.isAppOpenShowing=()=>V,r.isAppOpenErrored=()=>y,r.loadAppOpen=async(t,a,o,i)=>{if(!await d()||g||V)return;const n=D(t,a,"appOpen");if(!!n){g=!0,I=!1,y=!1,u=new admob.AppOpenAd({adUnitId:n,orientation:o?4:1}),u.on("load",()=>{I=!0,g=!1}),u.on("loadfail",()=>{g=!1,y=!0}),u.on("show",()=>{V=!0,I=!1}),u.on("showfail",()=>{V=!1,y=!0}),u.on("dismiss",()=>{V=!1});try{e.info("Loading Admob App Open."),await u.load(),e.info("AdMob App Open successfully loaded."),g=!1,I=!0,i&&r.showAppOpen()}catch(z){e.error("Error while loading an App Open:",z),g=!1,I=!1,y=!0}}},r.showAppOpen=async()=>{if(!!await d()){if(!u){e.warn("App Open has not been set up, call loadAppOpen first.");return}if(!I){e.info("App Open not loaded yet, cannot display it.");return}y=!1;try{e.info("Showing AdMob App Open."),await u.show()}catch(t){e.error("Error while showing an AdMob App Open:",t),V=!1,y=!0}}},r.isBannerConfigured=()=>W,r.isBannerLoaded=()=>S,r.isBannerShowing=()=>p,r.isBannerErrored=()=>O,r.setBannerAdSizeType=t=>{K=X[t]||5},r.setupBanner=async(t,a,o)=>{if(!await d())return;const i=D(t,a,"banner");!i||(R&&p&&(e.info("Banner already visible, hiding it to display new one."),await r.hideBanner()),W=!1,S=!1,R=new admob.BannerAd({adUnitId:i,position:o?"top":"bottom",size:K,offset:0}),R.on("load",()=>{p=!0,S=!0}),R.on("loadfail",()=>{p=!1,S=!1,O=!0}),W=!0)},r.showBanner=async()=>{if(!R){e.info("Banner not configured, use setupBanner first.");return}if(p){e.info("Banner already visible. Ignoring.");return}O=!1;try{e.info("Showing AdMob banner."),await R.show(),S&&(p=!0)}catch(t){p=!1,O=!0,e.error("Error while showing an AdMob banner:",t)}},r.hideBanner=async()=>{if(!!await d()){if(!R||!p){e.warn("No banner is being shown.");return}await R.hide(),p=!1}},r.isInterstitialLoading=()=>h,r.isInterstitialReady=()=>A,r.isInterstitialShowing=()=>v,r.isInterstitialErrored=()=>E,r.loadInterstitial=async(t,a,o)=>{if(!await d()||h||v)return;const i=D(t,a,"interstitial");if(!!i){h=!0,A=!1,E=!1,c=new admob.InterstitialAd({adUnitId:i,npa:H}),c.on("load",()=>{A=!0,h=!1}),c.on("loadfail",()=>{h=!1,E=!0}),c.on("show",()=>{v=!0,A=!1}),c.on("showfail",()=>{v=!1,E=!0}),c.on("dismiss",()=>{v=!1});try{e.info("Loading Admob interstitial."),await c.load(),e.info("AdMob interstitial successfully loaded."),h=!1,A=!0,o&&r.showInterstitial()}catch(n){e.error("Error while loading a interstitial:",n),h=!1,A=!1,E=!0}}},r.showInterstitial=async()=>{if(!!await d()){if(!c){e.warn("Interstitial has not been set up, call loadInterstitial first.");return}if(!A){e.info("Interstitial not loaded yet, cannot display it.");return}E=!1;try{e.info("Showing AdMob interstitial."),await c.show()}catch(t){e.error("Error while showing an AdMob interstitial:",t),v=!1,E=!0}}},r.isRewardedInterstitialLoading=()=>L,r.isRewardedInterstitialReady=()=>N,r.isRewardedInterstitialShowing=()=>_,r.isRewardedInterstitialErrored=()=>x,r.wasRewardedInterstitialRewardReceived=function(t){const a=F;return t&&(F=!1),a},r.loadRewardedInterstitial=async(t,a,o)=>{if(!await d()||L||_)return;const i=D(t,a,"rewardedInterstitial");if(!!i){L=!0,N=!1,x=!1,f=new admob.RewardedInterstitialAd({adUnitId:i,npa:H}),f.on("load",()=>{N=!0,L=!1}),f.on("loadfail",()=>{L=!1,x=!0}),f.on("show",()=>{_=!0,N=!1}),f.on("showfail",()=>{_=!1,x=!0}),f.on("dismiss",()=>{_=!1}),f.on("reward",()=>{F=!0});try{e.info("Loading AdMob rewarded interstitial."),await f.load(),e.info("AdMob rewarded interstitial successfully loaded."),L=!1,N=!0,o&&r.showRewardedInterstitial()}catch(n){L=!1,N=!1,x=!0,e.error("Error while loading a rewarded interstitial:",n)}}},r.showRewardedInterstitial=async()=>{if(!!await d()){if(!f){e.warn("interstitial has not been set up, call loadRewardedInterstitial first.");return}N||e.info("Rewarded interstitial not loaded yet, cannot display it."),x=!1;try{e.info("Showing AdMob rewarded interstitial."),await f.show()}catch(t){e.error("Error while showing an AdMob rewarded interstitial:",t),_=!1,x=!0}}},r.markRewardedInterstitialRewardAsClaimed=()=>{F=!1},r.isRewardedVideoLoading=()=>B,r.isRewardedVideoReady=()=>b,r.isRewardedVideoShowing=()=>U,r.isRewardedVideoErrored=()=>m,r.wasRewardedVideoRewardReceived=function(t){const a=P;return t&&(P=!1),a},r.loadRewardedVideo=async(t,a,o)=>{if(!await d()||B||U)return;const i=D(t,a,"rewarded");if(!!i){B=!0,b=!1,m=!1,w=new admob.RewardedAd({adUnitId:i,npa:H}),w.on("load",()=>{b=!0,B=!1}),w.on("loadfail",()=>{B=!1,m=!0}),w.on("show",()=>{U=!0,b=!1}),w.on("showfail",()=>{U=!1,m=!0}),w.on("dismiss",()=>{U=!1}),w.on("reward",()=>{P=!0});try{e.info("Loading AdMob rewarded video."),await w.load(),e.info("AdMob rewarded video successfully loaded."),B=!1,b=!0,o&&r.showRewardedVideo()}catch(n){B=!1,b=!1,m=!0,e.error("Error while loading a rewarded video:",n)}}},r.showRewardedVideo=async()=>{if(!!await d()){if(!w){e.warn("Video has not been set up, call loadRewardedVideo first.");return}b||e.info("Rewarded video not loaded yet, cannot display it."),m=!1;try{e.info("Showing AdMob rewarded video."),await w.show()}catch(t){e.error("Error while showing an AdMob rewarded video:",t),U=!1,m=!0}}},r.markRewardedVideoRewardAsClaimed=()=>{P=!1}})(Q=T.adMob||(T.adMob={}))})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=admobtools.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/AdMob/admobtools.ts"],
4
- "sourcesContent": ["namespace gdjs {\n declare var admob: any;\n declare var cordova: any;\n\n export namespace adMob {\n const logger = new gdjs.Logger('AdMob');\n\n const testAdIds = {\n appOpen: {\n android: 'ca-app-pub-3940256099942544/9257395921',\n ios: 'ca-app-pub-3940256099942544/5575463023',\n },\n banner: {\n android: 'ca-app-pub-3940256099942544/6300978111',\n ios: 'ca-app-pub-3940256099942544/2934735716',\n },\n interstitial: {\n android: 'ca-app-pub-3940256099942544/1033173712',\n ios: 'ca-app-pub-3940256099942544/4411468910',\n },\n interstitialVideo: {\n android: 'ca-app-pub-3940256099942544/8691691433',\n ios: 'ca-app-pub-3940256099942544/5135589807',\n },\n rewarded: {\n android: 'ca-app-pub-3940256099942544/5224354917',\n ios: 'ca-app-pub-3940256099942544/1712485313',\n },\n rewardedInterstitial: {\n android: 'ca-app-pub-3940256099942544/5354046379',\n ios: 'ca-app-pub-3940256099942544/6978759866',\n },\n native: {\n android: 'ca-app-pub-3940256099942544/2247696110',\n ios: 'ca-app-pub-3940256099942544/3986624511',\n },\n nativeVideo: {\n android: 'ca-app-pub-3940256099942544/1044960115',\n ios: 'ca-app-pub-3940256099942544/2521693316',\n },\n };\n\n enum AdSizeType {\n BANNER,\n LARGE_BANNER,\n MEDIUM_RECTANGLE,\n FULL_BANNER,\n LEADERBOARD,\n SMART_BANNER,\n }\n\n const adSizeTypes = {\n BANNER: AdSizeType.BANNER,\n LARGE_BANNER: AdSizeType.LARGE_BANNER,\n MEDIUM_RECTANGLE: AdSizeType.MEDIUM_RECTANGLE,\n FULL_BANNER: AdSizeType.FULL_BANNER,\n LEADERBOARD: AdSizeType.LEADERBOARD,\n SMART_BANNER: AdSizeType.SMART_BANNER,\n };\n\n enum AppOpenAdOrientation {\n Portrait = 1,\n PortraitUpsideDown = 2,\n LandscapeRight = 3,\n LandscapeLeft = 4,\n }\n\n // Admob does not initialize automatically, so we store a flag to know if it's initialized.\n let admobStarted = false;\n let isStarting = false;\n let isUsingTestAds = false;\n\n // Banner\n let banner;\n let bannerRequestedAdSizeType: AdSizeType = AdSizeType.SMART_BANNER;\n let bannerConfigured = false; // Becomes true when the user configures the ad id and the position of the banner.\n let bannerLoaded = false; // Becomes true when the banner is loaded by loaded.\n let bannerShowing = false; // Becomes true when loaded or when the user shows/hides the banner.\n let bannerErrored = false; // Becomes true when the banner fails to load.\n\n // Interstitial\n let interstitial;\n let interstitialLoading = false; // Becomes true when the interstitial is loading.\n let interstitialReady = false; // Becomes true when the interstitial is loaded and ready to be shown.\n let interstitialShowing = false; // Becomes true when the interstitial is showing.\n let interstitialErrored = false; // Becomes true when the interstitial fails to load.\n\n // App Open\n let appOpen;\n let appOpenLoading = false; // Becomes true when the appOpen is loading.\n let appOpenReady = false; // Becomes true when the appOpen is loaded and ready to be shown.\n let appOpenShowing = false; // Becomes true when the appOpen is showing.\n let appOpenErrored = false; // Becomes true when the appOpen fails to load.\n\n // Rewarded interstitial\n let rewardedInterstitial;\n let rewardedInterstitialLoading = false; // Becomes true when the interstitial is loading.\n let rewardedInterstitialReady = false; // Becomes true when the interstitial is loaded and ready to be shown.\n let rewardedInterstitialShowing = false; // Becomes true when the interstitial is showing.\n let rewardedInterstitialRewardReceived = false; // Becomes true when the interstitial is closed and the reward is received.\n let rewardedInterstitialErrored = false; // Becomes true when the interstitial fails to load.\n\n // Rewarded video\n let rewardedVideo;\n let rewardedVideoLoading = false; // Becomes true when the video is loading.\n let rewardedVideoReady = false; // Becomes true when the video is loaded and ready to be shown.\n let rewardedVideoShowing = false; // Becomes true when the video is showing.\n let rewardedVideoRewardReceived = false; // Becomes true when the video is closed and the reward is received.\n let rewardedVideoErrored = false; // Becomes true when the video fails to load.\n\n let npaValue = '0'; // TODO: expose an API to change this and also an automatic way using the consent SDK.\n\n // Admob initialization listener\n document.addEventListener(\n 'deviceready',\n async () => {\n // Obtain user consent ?\n\n logger.info('Starting AdMob.');\n isStarting = true;\n\n await admob.start();\n\n logger.info('AdMob successfully started.');\n isStarting = false;\n admobStarted = true;\n },\n false\n );\n\n /**\n * Helper to know if we are on mobile and admob is correctly initialized.\n */\n const checkIfAdMobIsAvailable = async () => {\n if (typeof cordova === 'undefined') {\n logger.warn('We are not on mobile, AdMob will not be available.');\n return false;\n }\n if (typeof admob === 'undefined') {\n logger.warn('AdMob has not been configured properly.');\n return false;\n }\n\n if (!admobStarted) {\n if (isStarting) {\n // Delay the call until AdMob is started, up to 5 seconds.\n let time = 0;\n while (!admobStarted && time < 5000) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n time += 100;\n }\n }\n\n if (!admobStarted) {\n logger.warn('AdMob is not started.');\n return false;\n }\n }\n\n return true;\n };\n\n /**\n * Helper to get the correct ad id depending on the platform. Android and iOS use different ids.\n */\n const getAdUnitId = (androidAdUnitId, iosAdUnitId, type) => {\n if (typeof cordova === 'undefined') {\n logger.warn('Cordova is not available.');\n return;\n }\n if (cordova.platformId === 'android') {\n return isUsingTestAds ? testAdIds[type].android : androidAdUnitId;\n } else if (cordova.platformId === 'ios') {\n return isUsingTestAds ? testAdIds[type].ios : iosAdUnitId;\n }\n\n logger.error('Unsupported platform: ', cordova.platformId);\n return null;\n };\n\n /**\n * Activate or deactivate the test mode (\"development\" mode).\n * When activated, tests ads will be served instead of real ones.\n *\n * It is important to enable test ads during development so that you can click on them without\n * charging advertisers. If you click on too many ads without being in test mode, you risk your\n * account being flagged for invalid activity.\n */\n export const setTestMode = async (enable: boolean) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n logger.info('Setting AdMob test mode to:', enable);\n\n isUsingTestAds = enable;\n };\n\n // -------------------\n // ---- App Open -----\n // -------------------\n export const isAppOpenLoading = () => appOpenLoading;\n export const isAppOpenReady = () => appOpenReady;\n export const isAppOpenShowing = () => appOpenShowing;\n export const isAppOpenErrored = () => appOpenErrored;\n\n /** Load an AppOpen. */\n export const loadAppOpen = async (\n androidAdUnitId,\n iosAdUnitId,\n displayLandscape,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n // If an appOpen is already loading or showing, we don't stop it.\n if (appOpenLoading || appOpenShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(androidAdUnitId, iosAdUnitId, 'appOpen');\n if (!adUnitId) return;\n\n appOpenLoading = true;\n appOpenReady = false;\n appOpenErrored = false;\n\n appOpen = new admob.AppOpenAd({\n adUnitId,\n orientation: displayLandscape\n ? AppOpenAdOrientation.LandscapeLeft\n : AppOpenAdOrientation.Portrait,\n });\n\n appOpen.on('load', () => {\n appOpenReady = true;\n appOpenLoading = false;\n });\n appOpen.on('loadfail', () => {\n appOpenLoading = false;\n appOpenErrored = true;\n });\n appOpen.on('show', () => {\n appOpenShowing = true;\n appOpenReady = false;\n });\n appOpen.on('showfail', () => {\n appOpenShowing = false;\n appOpenErrored = true;\n });\n appOpen.on('dismiss', () => {\n appOpenShowing = false;\n });\n\n try {\n logger.info('Loading Admob App Open.');\n await appOpen.load();\n logger.info('AdMob App Open successfully loaded.');\n appOpenLoading = false;\n appOpenReady = true;\n if (displayWhenLoaded) showAppOpen();\n } catch (error) {\n logger.error('Error while loading an App Open:', error);\n appOpenLoading = false;\n appOpenReady = false;\n appOpenErrored = true;\n }\n };\n\n /** Show the loaded appOpen. */\n export const showAppOpen = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!appOpen) {\n logger.warn('App Open has not been set up, call loadAppOpen first.');\n return;\n }\n if (!appOpenReady) {\n logger.info('App Open not loaded yet, cannot display it.');\n return;\n }\n appOpenErrored = false;\n\n try {\n logger.info('Showing AdMob App Open.');\n await appOpen.show();\n // AppOpen will be shown and\n // `appOpenShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error('Error while showing an AdMob App Open:', error);\n appOpenShowing = false;\n appOpenErrored = true;\n }\n };\n\n // -----------------\n // ---- Banner -----\n // -----------------\n export const isBannerConfigured = () => bannerConfigured;\n export const isBannerLoaded = () => bannerLoaded;\n export const isBannerShowing = () => bannerShowing;\n export const isBannerErrored = () => bannerErrored;\n\n export const setBannerAdSizeType = (\n bannerAdSizeType:\n | 'BANNER'\n | 'LARGE_BANNER'\n | 'MEDIUM_RECTANGLE'\n | 'FULL_BANNER'\n | 'LEADERBOARD'\n | 'SMART_BANNER'\n ) => {\n bannerRequestedAdSizeType =\n adSizeTypes[bannerAdSizeType] || AdSizeType.SMART_BANNER;\n };\n\n /**\n * Set up a banner that can then be displayed by calling `showBanner`.\n * If a banner is already set up, it will be hidden and replaced by the new one.\n */\n export const setupBanner = async (androidAdUnitId, iosAdUnitId, atTop) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n const adUnitId = getAdUnitId(androidAdUnitId, iosAdUnitId, 'banner');\n if (!adUnitId) return;\n\n if (banner && bannerShowing) {\n logger.info('Banner already visible, hiding it to display new one.');\n await hideBanner();\n }\n\n bannerConfigured = false;\n bannerLoaded = false;\n\n banner = new admob.BannerAd({\n adUnitId,\n position: atTop ? 'top' : 'bottom',\n size: bannerRequestedAdSizeType,\n });\n\n banner.on('load', () => {\n bannerShowing = true;\n bannerLoaded = true;\n });\n banner.on('loadfail', () => {\n bannerShowing = false;\n bannerLoaded = false;\n bannerErrored = true;\n });\n\n bannerConfigured = true;\n };\n\n /**\n * Display a banner that was set up with `setupBanner` (and `setBannerAdSizeType`).\n */\n export const showBanner = async () => {\n if (!banner) {\n logger.info('Banner not configured, use setupBanner first.');\n return;\n }\n if (bannerShowing) {\n logger.info('Banner already visible. Ignoring.');\n return;\n }\n bannerErrored = false;\n\n try {\n logger.info('Showing AdMob banner.');\n await banner.show();\n if (bannerLoaded) {\n // Banner is already loaded, so it will be shown immediately.\n bannerShowing = true;\n }\n } catch (error) {\n bannerShowing = false;\n bannerErrored = true;\n logger.error('Error while showing an AdMob banner:', error);\n }\n };\n\n /** Hide the banner shown on screen. */\n export const hideBanner = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!banner || !bannerShowing) {\n logger.warn('No banner is being shown.');\n return;\n }\n\n await banner.hide();\n bannerShowing = false;\n // Note that the banner is still loaded, which is why bannerLoaded is not set to false.\n // We hide the banner, but keep it configured to display it again if needed.\n };\n\n // -----------------------\n // ---- Interstitial -----\n // -----------------------\n export const isInterstitialLoading = () => interstitialLoading;\n export const isInterstitialReady = () => interstitialReady;\n export const isInterstitialShowing = () => interstitialShowing;\n export const isInterstitialErrored = () => interstitialErrored;\n\n /** Load an interstitial. */\n export const loadInterstitial = async (\n androidAdUnitId,\n iosAdUnitId,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n // If an interstitial is already loading or showing, we don't stop it.\n if (interstitialLoading || interstitialShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(\n androidAdUnitId,\n iosAdUnitId,\n 'interstitial'\n );\n if (!adUnitId) return;\n\n interstitialLoading = true;\n interstitialReady = false;\n interstitialErrored = false;\n\n interstitial = new admob.InterstitialAd({\n adUnitId,\n npa: npaValue,\n });\n\n interstitial.on('load', () => {\n interstitialReady = true;\n interstitialLoading = false;\n });\n interstitial.on('loadfail', () => {\n interstitialLoading = false;\n interstitialErrored = true;\n });\n interstitial.on('show', () => {\n interstitialShowing = true;\n interstitialReady = false;\n });\n interstitial.on('showfail', () => {\n interstitialShowing = false;\n interstitialErrored = true;\n });\n interstitial.on('dismiss', () => {\n interstitialShowing = false;\n });\n\n try {\n logger.info('Loading Admob interstitial.');\n await interstitial.load();\n logger.info('AdMob interstitial successfully loaded.');\n interstitialLoading = false;\n interstitialReady = true;\n if (displayWhenLoaded) showInterstitial();\n } catch (error) {\n logger.error('Error while loading a interstitial:', error);\n interstitialLoading = false;\n interstitialReady = false;\n interstitialErrored = true;\n }\n };\n\n /** Show the loaded interstitial. */\n export const showInterstitial = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!interstitial) {\n logger.warn(\n 'Interstitial has not been set up, call loadInterstitial first.'\n );\n return;\n }\n if (!interstitialReady) {\n logger.info('Interstitial not loaded yet, cannot display it.');\n return;\n }\n interstitialErrored = false;\n\n try {\n logger.info('Showing AdMob interstitial.');\n await interstitial.show();\n // Interstitial will be shown and\n // `interstitialShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error('Error while showing an AdMob interstitial:', error);\n interstitialShowing = false;\n interstitialErrored = true;\n }\n };\n\n // --------------------------------\n // ---- Rewarded Interstitial -----\n // --------------------------------\n export const isRewardedInterstitialLoading = () =>\n rewardedInterstitialLoading;\n export const isRewardedInterstitialReady = () => rewardedInterstitialReady;\n export const isRewardedInterstitialShowing = () =>\n rewardedInterstitialShowing;\n export const isRewardedInterstitialErrored = () =>\n rewardedInterstitialErrored;\n\n /** Check if the reward of the rewarded interstitial was received. */\n export const wasRewardedInterstitialRewardReceived = function (\n markAsClaimed\n ) {\n const reward = rewardedInterstitialRewardReceived;\n if (markAsClaimed) {\n rewardedInterstitialRewardReceived = false;\n }\n return reward;\n };\n\n /** Load a rewarded interstitial. */\n export const loadRewardedInterstitial = async (\n androidAdUnitID,\n iosAdUnitID,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n if (rewardedInterstitialLoading || rewardedInterstitialShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(\n androidAdUnitID,\n iosAdUnitID,\n 'rewardedInterstitial'\n );\n if (!adUnitId) return;\n\n rewardedInterstitialLoading = true;\n rewardedInterstitialReady = false;\n rewardedInterstitialErrored = false;\n\n rewardedInterstitial = new admob.RewardedInterstitialAd({\n adUnitId,\n npa: npaValue,\n });\n\n // Rewarded video event listeners\n rewardedInterstitial.on('load', () => {\n rewardedInterstitialReady = true;\n rewardedInterstitialLoading = false;\n });\n rewardedInterstitial.on('loadfail', () => {\n rewardedInterstitialLoading = false;\n rewardedInterstitialErrored = true;\n });\n rewardedInterstitial.on('show', () => {\n rewardedInterstitialShowing = true;\n rewardedInterstitialReady = false;\n });\n rewardedInterstitial.on('showfail', () => {\n rewardedInterstitialShowing = false;\n rewardedInterstitialErrored = true;\n });\n rewardedInterstitial.on('dismiss', () => {\n rewardedInterstitialShowing = false;\n });\n rewardedInterstitial.on('reward', () => {\n rewardedInterstitialRewardReceived = true;\n });\n\n try {\n logger.info('Loading AdMob rewarded interstitial.');\n await rewardedInterstitial.load();\n logger.info('AdMob rewarded interstitial successfully loaded.');\n rewardedInterstitialLoading = false;\n rewardedInterstitialReady = true;\n if (displayWhenLoaded) showRewardedInterstitial();\n } catch (error) {\n rewardedInterstitialLoading = false;\n rewardedInterstitialReady = false;\n rewardedInterstitialErrored = true;\n logger.error('Error while loading a rewarded interstitial:', error);\n }\n };\n\n /** Show the loaded reward interstitial. */\n export const showRewardedInterstitial = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!rewardedInterstitial) {\n logger.warn(\n 'interstitial has not been set up, call loadRewardedInterstitial first.'\n );\n return;\n }\n if (!rewardedInterstitialReady) {\n logger.info('Rewarded interstitial not loaded yet, cannot display it.');\n }\n rewardedInterstitialErrored = false;\n\n try {\n logger.info('Showing AdMob rewarded interstitial.');\n await rewardedInterstitial.show();\n // Rewarded interstitial will be shown and\n // `rewardedInterstitialShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error(\n 'Error while showing an AdMob rewarded interstitial:',\n error\n );\n rewardedInterstitialShowing = false;\n rewardedInterstitialErrored = true;\n }\n };\n\n /** Mark the reward of the interstitial as claimed. */\n export const markRewardedInterstitialRewardAsClaimed = () => {\n rewardedInterstitialRewardReceived = false;\n };\n\n // -------------------------\n // ---- Rewarded Video -----\n // -------------------------\n export const isRewardedVideoLoading = () => rewardedVideoLoading;\n export const isRewardedVideoReady = () => rewardedVideoReady;\n export const isRewardedVideoShowing = () => rewardedVideoShowing;\n export const isRewardedVideoErrored = () => rewardedVideoErrored;\n\n /** Check if the reward of the rewarded video was received. */\n export const wasRewardedVideoRewardReceived = function (markAsClaimed) {\n const reward = rewardedVideoRewardReceived;\n if (markAsClaimed) {\n rewardedVideoRewardReceived = false;\n }\n return reward;\n };\n\n /** Load a rewarded video. */\n export const loadRewardedVideo = async (\n androidAdUnitID,\n iosAdUnitID,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n if (rewardedVideoLoading || rewardedVideoShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(androidAdUnitID, iosAdUnitID, 'rewarded');\n if (!adUnitId) return;\n\n rewardedVideoLoading = true;\n rewardedVideoReady = false;\n rewardedVideoErrored = false;\n\n rewardedVideo = new admob.RewardedAd({\n adUnitId,\n npa: npaValue,\n });\n\n // Rewarded video event listeners\n rewardedVideo.on('load', () => {\n rewardedVideoReady = true;\n rewardedVideoLoading = false;\n });\n rewardedVideo.on('loadfail', () => {\n rewardedVideoLoading = false;\n rewardedVideoErrored = true;\n });\n rewardedVideo.on('show', () => {\n rewardedVideoShowing = true;\n rewardedVideoReady = false;\n });\n rewardedVideo.on('showfail', () => {\n rewardedVideoShowing = false;\n rewardedVideoErrored = true;\n });\n rewardedVideo.on('dismiss', () => {\n rewardedVideoShowing = false;\n });\n rewardedVideo.on('reward', () => {\n rewardedVideoRewardReceived = true;\n });\n\n try {\n logger.info('Loading AdMob rewarded video.');\n await rewardedVideo.load();\n logger.info('AdMob rewarded video successfully loaded.');\n rewardedVideoLoading = false;\n rewardedVideoReady = true;\n if (displayWhenLoaded) showRewardedVideo();\n } catch (error) {\n rewardedVideoLoading = false;\n rewardedVideoReady = false;\n rewardedVideoErrored = true;\n logger.error('Error while loading a rewarded video:', error);\n }\n };\n\n /** Show the loaded reward video. */\n export const showRewardedVideo = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!rewardedVideo) {\n logger.warn('Video has not been set up, call loadRewardedVideo first.');\n return;\n }\n if (!rewardedVideoReady) {\n logger.info('Rewarded video not loaded yet, cannot display it.');\n }\n rewardedVideoErrored = false;\n\n try {\n logger.info('Showing AdMob rewarded video.');\n await rewardedVideo.show();\n // Rewarded video will be shown and\n // `rewardedVideoShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error('Error while showing an AdMob rewarded video:', error);\n rewardedVideoShowing = false;\n rewardedVideoErrored = true;\n }\n };\n\n /** Mark the reward of the video as claimed. */\n export const markRewardedVideoRewardAsClaimed = () => {\n rewardedVideoRewardReceived = false;\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["namespace gdjs {\n declare var admob: any;\n declare var cordova: any;\n\n export namespace adMob {\n const logger = new gdjs.Logger('AdMob');\n\n const testAdIds = {\n appOpen: {\n android: 'ca-app-pub-3940256099942544/9257395921',\n ios: 'ca-app-pub-3940256099942544/5575463023',\n },\n banner: {\n android: 'ca-app-pub-3940256099942544/6300978111',\n ios: 'ca-app-pub-3940256099942544/2934735716',\n },\n interstitial: {\n android: 'ca-app-pub-3940256099942544/1033173712',\n ios: 'ca-app-pub-3940256099942544/4411468910',\n },\n interstitialVideo: {\n android: 'ca-app-pub-3940256099942544/8691691433',\n ios: 'ca-app-pub-3940256099942544/5135589807',\n },\n rewarded: {\n android: 'ca-app-pub-3940256099942544/5224354917',\n ios: 'ca-app-pub-3940256099942544/1712485313',\n },\n rewardedInterstitial: {\n android: 'ca-app-pub-3940256099942544/5354046379',\n ios: 'ca-app-pub-3940256099942544/6978759866',\n },\n native: {\n android: 'ca-app-pub-3940256099942544/2247696110',\n ios: 'ca-app-pub-3940256099942544/3986624511',\n },\n nativeVideo: {\n android: 'ca-app-pub-3940256099942544/1044960115',\n ios: 'ca-app-pub-3940256099942544/2521693316',\n },\n };\n\n enum AdSizeType {\n BANNER,\n LARGE_BANNER,\n MEDIUM_RECTANGLE,\n FULL_BANNER,\n LEADERBOARD,\n SMART_BANNER,\n }\n\n const adSizeTypes = {\n BANNER: AdSizeType.BANNER,\n LARGE_BANNER: AdSizeType.LARGE_BANNER,\n MEDIUM_RECTANGLE: AdSizeType.MEDIUM_RECTANGLE,\n FULL_BANNER: AdSizeType.FULL_BANNER,\n LEADERBOARD: AdSizeType.LEADERBOARD,\n SMART_BANNER: AdSizeType.SMART_BANNER,\n };\n\n enum AppOpenAdOrientation {\n Portrait = 1,\n PortraitUpsideDown = 2,\n LandscapeRight = 3,\n LandscapeLeft = 4,\n }\n\n // Admob does not initialize automatically, so we store a flag to know if it's initialized.\n let admobStarted = false;\n let isStarting = false;\n let isUsingTestAds = false;\n\n // Banner\n let banner;\n let bannerRequestedAdSizeType: AdSizeType = AdSizeType.SMART_BANNER;\n let bannerConfigured = false; // Becomes true when the user configures the ad id and the position of the banner.\n let bannerLoaded = false; // Becomes true when the banner is loaded by loaded.\n let bannerShowing = false; // Becomes true when loaded or when the user shows/hides the banner.\n let bannerErrored = false; // Becomes true when the banner fails to load.\n\n // Interstitial\n let interstitial;\n let interstitialLoading = false; // Becomes true when the interstitial is loading.\n let interstitialReady = false; // Becomes true when the interstitial is loaded and ready to be shown.\n let interstitialShowing = false; // Becomes true when the interstitial is showing.\n let interstitialErrored = false; // Becomes true when the interstitial fails to load.\n\n // App Open\n let appOpen;\n let appOpenLoading = false; // Becomes true when the appOpen is loading.\n let appOpenReady = false; // Becomes true when the appOpen is loaded and ready to be shown.\n let appOpenShowing = false; // Becomes true when the appOpen is showing.\n let appOpenErrored = false; // Becomes true when the appOpen fails to load.\n\n // Rewarded interstitial\n let rewardedInterstitial;\n let rewardedInterstitialLoading = false; // Becomes true when the interstitial is loading.\n let rewardedInterstitialReady = false; // Becomes true when the interstitial is loaded and ready to be shown.\n let rewardedInterstitialShowing = false; // Becomes true when the interstitial is showing.\n let rewardedInterstitialRewardReceived = false; // Becomes true when the interstitial is closed and the reward is received.\n let rewardedInterstitialErrored = false; // Becomes true when the interstitial fails to load.\n\n // Rewarded video\n let rewardedVideo;\n let rewardedVideoLoading = false; // Becomes true when the video is loading.\n let rewardedVideoReady = false; // Becomes true when the video is loaded and ready to be shown.\n let rewardedVideoShowing = false; // Becomes true when the video is showing.\n let rewardedVideoRewardReceived = false; // Becomes true when the video is closed and the reward is received.\n let rewardedVideoErrored = false; // Becomes true when the video fails to load.\n\n let npaValue = '0'; // TODO: expose an API to change this and also an automatic way using the consent SDK.\n\n // Admob initialization listener\n document.addEventListener(\n 'deviceready',\n async () => {\n // Obtain user consent ?\n\n logger.info('Starting AdMob.');\n isStarting = true;\n\n await admob.start();\n\n logger.info('AdMob successfully started.');\n isStarting = false;\n admobStarted = true;\n },\n false\n );\n\n /**\n * Helper to know if we are on mobile and admob is correctly initialized.\n */\n const checkIfAdMobIsAvailable = async () => {\n if (typeof cordova === 'undefined') {\n logger.warn('We are not on mobile, AdMob will not be available.');\n return false;\n }\n if (typeof admob === 'undefined') {\n logger.warn('AdMob has not been configured properly.');\n return false;\n }\n\n if (!admobStarted) {\n if (isStarting) {\n // Delay the call until AdMob is started, up to 5 seconds.\n let time = 0;\n while (!admobStarted && time < 5000) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n time += 100;\n }\n }\n\n if (!admobStarted) {\n logger.warn('AdMob is not started.');\n return false;\n }\n }\n\n return true;\n };\n\n /**\n * Helper to get the correct ad id depending on the platform. Android and iOS use different ids.\n */\n const getAdUnitId = (androidAdUnitId, iosAdUnitId, type) => {\n if (typeof cordova === 'undefined') {\n logger.warn('Cordova is not available.');\n return;\n }\n if (cordova.platformId === 'android') {\n return isUsingTestAds ? testAdIds[type].android : androidAdUnitId;\n } else if (cordova.platformId === 'ios') {\n return isUsingTestAds ? testAdIds[type].ios : iosAdUnitId;\n }\n\n logger.error('Unsupported platform: ', cordova.platformId);\n return null;\n };\n\n /**\n * Activate or deactivate the test mode (\"development\" mode).\n * When activated, tests ads will be served instead of real ones.\n *\n * It is important to enable test ads during development so that you can click on them without\n * charging advertisers. If you click on too many ads without being in test mode, you risk your\n * account being flagged for invalid activity.\n */\n export const setTestMode = async (enable: boolean) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n logger.info('Setting AdMob test mode to:', enable);\n\n isUsingTestAds = enable;\n };\n\n // -------------------\n // ---- App Open -----\n // -------------------\n export const isAppOpenLoading = () => appOpenLoading;\n export const isAppOpenReady = () => appOpenReady;\n export const isAppOpenShowing = () => appOpenShowing;\n export const isAppOpenErrored = () => appOpenErrored;\n\n /** Load an AppOpen. */\n export const loadAppOpen = async (\n androidAdUnitId,\n iosAdUnitId,\n displayLandscape,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n // If an appOpen is already loading or showing, we don't stop it.\n if (appOpenLoading || appOpenShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(androidAdUnitId, iosAdUnitId, 'appOpen');\n if (!adUnitId) return;\n\n appOpenLoading = true;\n appOpenReady = false;\n appOpenErrored = false;\n\n appOpen = new admob.AppOpenAd({\n adUnitId,\n orientation: displayLandscape\n ? AppOpenAdOrientation.LandscapeLeft\n : AppOpenAdOrientation.Portrait,\n });\n\n appOpen.on('load', () => {\n appOpenReady = true;\n appOpenLoading = false;\n });\n appOpen.on('loadfail', () => {\n appOpenLoading = false;\n appOpenErrored = true;\n });\n appOpen.on('show', () => {\n appOpenShowing = true;\n appOpenReady = false;\n });\n appOpen.on('showfail', () => {\n appOpenShowing = false;\n appOpenErrored = true;\n });\n appOpen.on('dismiss', () => {\n appOpenShowing = false;\n });\n\n try {\n logger.info('Loading Admob App Open.');\n await appOpen.load();\n logger.info('AdMob App Open successfully loaded.');\n appOpenLoading = false;\n appOpenReady = true;\n if (displayWhenLoaded) showAppOpen();\n } catch (error) {\n logger.error('Error while loading an App Open:', error);\n appOpenLoading = false;\n appOpenReady = false;\n appOpenErrored = true;\n }\n };\n\n /** Show the loaded appOpen. */\n export const showAppOpen = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!appOpen) {\n logger.warn('App Open has not been set up, call loadAppOpen first.');\n return;\n }\n if (!appOpenReady) {\n logger.info('App Open not loaded yet, cannot display it.');\n return;\n }\n appOpenErrored = false;\n\n try {\n logger.info('Showing AdMob App Open.');\n await appOpen.show();\n // AppOpen will be shown and\n // `appOpenShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error('Error while showing an AdMob App Open:', error);\n appOpenShowing = false;\n appOpenErrored = true;\n }\n };\n\n // -----------------\n // ---- Banner -----\n // -----------------\n export const isBannerConfigured = () => bannerConfigured;\n export const isBannerLoaded = () => bannerLoaded;\n export const isBannerShowing = () => bannerShowing;\n export const isBannerErrored = () => bannerErrored;\n\n export const setBannerAdSizeType = (\n bannerAdSizeType:\n | 'BANNER'\n | 'LARGE_BANNER'\n | 'MEDIUM_RECTANGLE'\n | 'FULL_BANNER'\n | 'LEADERBOARD'\n | 'SMART_BANNER'\n ) => {\n bannerRequestedAdSizeType =\n adSizeTypes[bannerAdSizeType] || AdSizeType.SMART_BANNER;\n };\n\n /**\n * Set up a banner that can then be displayed by calling `showBanner`.\n * If a banner is already set up, it will be hidden and replaced by the new one.\n */\n export const setupBanner = async (androidAdUnitId, iosAdUnitId, atTop) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n const adUnitId = getAdUnitId(androidAdUnitId, iosAdUnitId, 'banner');\n if (!adUnitId) return;\n\n if (banner && bannerShowing) {\n logger.info('Banner already visible, hiding it to display new one.');\n await hideBanner();\n }\n\n bannerConfigured = false;\n bannerLoaded = false;\n\n banner = new admob.BannerAd({\n adUnitId,\n position: atTop ? 'top' : 'bottom',\n size: bannerRequestedAdSizeType,\n offset: 0,\n });\n\n banner.on('load', () => {\n bannerShowing = true;\n bannerLoaded = true;\n });\n banner.on('loadfail', () => {\n bannerShowing = false;\n bannerLoaded = false;\n bannerErrored = true;\n });\n\n bannerConfigured = true;\n };\n\n /**\n * Display a banner that was set up with `setupBanner` (and `setBannerAdSizeType`).\n */\n export const showBanner = async () => {\n if (!banner) {\n logger.info('Banner not configured, use setupBanner first.');\n return;\n }\n if (bannerShowing) {\n logger.info('Banner already visible. Ignoring.');\n return;\n }\n bannerErrored = false;\n\n try {\n logger.info('Showing AdMob banner.');\n await banner.show();\n if (bannerLoaded) {\n // Banner is already loaded, so it will be shown immediately.\n bannerShowing = true;\n }\n } catch (error) {\n bannerShowing = false;\n bannerErrored = true;\n logger.error('Error while showing an AdMob banner:', error);\n }\n };\n\n /** Hide the banner shown on screen. */\n export const hideBanner = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!banner || !bannerShowing) {\n logger.warn('No banner is being shown.');\n return;\n }\n\n await banner.hide();\n bannerShowing = false;\n // Note that the banner is still loaded, which is why bannerLoaded is not set to false.\n // We hide the banner, but keep it configured to display it again if needed.\n };\n\n // -----------------------\n // ---- Interstitial -----\n // -----------------------\n export const isInterstitialLoading = () => interstitialLoading;\n export const isInterstitialReady = () => interstitialReady;\n export const isInterstitialShowing = () => interstitialShowing;\n export const isInterstitialErrored = () => interstitialErrored;\n\n /** Load an interstitial. */\n export const loadInterstitial = async (\n androidAdUnitId,\n iosAdUnitId,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n // If an interstitial is already loading or showing, we don't stop it.\n if (interstitialLoading || interstitialShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(\n androidAdUnitId,\n iosAdUnitId,\n 'interstitial'\n );\n if (!adUnitId) return;\n\n interstitialLoading = true;\n interstitialReady = false;\n interstitialErrored = false;\n\n interstitial = new admob.InterstitialAd({\n adUnitId,\n npa: npaValue,\n });\n\n interstitial.on('load', () => {\n interstitialReady = true;\n interstitialLoading = false;\n });\n interstitial.on('loadfail', () => {\n interstitialLoading = false;\n interstitialErrored = true;\n });\n interstitial.on('show', () => {\n interstitialShowing = true;\n interstitialReady = false;\n });\n interstitial.on('showfail', () => {\n interstitialShowing = false;\n interstitialErrored = true;\n });\n interstitial.on('dismiss', () => {\n interstitialShowing = false;\n });\n\n try {\n logger.info('Loading Admob interstitial.');\n await interstitial.load();\n logger.info('AdMob interstitial successfully loaded.');\n interstitialLoading = false;\n interstitialReady = true;\n if (displayWhenLoaded) showInterstitial();\n } catch (error) {\n logger.error('Error while loading a interstitial:', error);\n interstitialLoading = false;\n interstitialReady = false;\n interstitialErrored = true;\n }\n };\n\n /** Show the loaded interstitial. */\n export const showInterstitial = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!interstitial) {\n logger.warn(\n 'Interstitial has not been set up, call loadInterstitial first.'\n );\n return;\n }\n if (!interstitialReady) {\n logger.info('Interstitial not loaded yet, cannot display it.');\n return;\n }\n interstitialErrored = false;\n\n try {\n logger.info('Showing AdMob interstitial.');\n await interstitial.show();\n // Interstitial will be shown and\n // `interstitialShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error('Error while showing an AdMob interstitial:', error);\n interstitialShowing = false;\n interstitialErrored = true;\n }\n };\n\n // --------------------------------\n // ---- Rewarded Interstitial -----\n // --------------------------------\n export const isRewardedInterstitialLoading = () =>\n rewardedInterstitialLoading;\n export const isRewardedInterstitialReady = () => rewardedInterstitialReady;\n export const isRewardedInterstitialShowing = () =>\n rewardedInterstitialShowing;\n export const isRewardedInterstitialErrored = () =>\n rewardedInterstitialErrored;\n\n /** Check if the reward of the rewarded interstitial was received. */\n export const wasRewardedInterstitialRewardReceived = function (\n markAsClaimed\n ) {\n const reward = rewardedInterstitialRewardReceived;\n if (markAsClaimed) {\n rewardedInterstitialRewardReceived = false;\n }\n return reward;\n };\n\n /** Load a rewarded interstitial. */\n export const loadRewardedInterstitial = async (\n androidAdUnitID,\n iosAdUnitID,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n if (rewardedInterstitialLoading || rewardedInterstitialShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(\n androidAdUnitID,\n iosAdUnitID,\n 'rewardedInterstitial'\n );\n if (!adUnitId) return;\n\n rewardedInterstitialLoading = true;\n rewardedInterstitialReady = false;\n rewardedInterstitialErrored = false;\n\n rewardedInterstitial = new admob.RewardedInterstitialAd({\n adUnitId,\n npa: npaValue,\n });\n\n // Rewarded video event listeners\n rewardedInterstitial.on('load', () => {\n rewardedInterstitialReady = true;\n rewardedInterstitialLoading = false;\n });\n rewardedInterstitial.on('loadfail', () => {\n rewardedInterstitialLoading = false;\n rewardedInterstitialErrored = true;\n });\n rewardedInterstitial.on('show', () => {\n rewardedInterstitialShowing = true;\n rewardedInterstitialReady = false;\n });\n rewardedInterstitial.on('showfail', () => {\n rewardedInterstitialShowing = false;\n rewardedInterstitialErrored = true;\n });\n rewardedInterstitial.on('dismiss', () => {\n rewardedInterstitialShowing = false;\n });\n rewardedInterstitial.on('reward', () => {\n rewardedInterstitialRewardReceived = true;\n });\n\n try {\n logger.info('Loading AdMob rewarded interstitial.');\n await rewardedInterstitial.load();\n logger.info('AdMob rewarded interstitial successfully loaded.');\n rewardedInterstitialLoading = false;\n rewardedInterstitialReady = true;\n if (displayWhenLoaded) showRewardedInterstitial();\n } catch (error) {\n rewardedInterstitialLoading = false;\n rewardedInterstitialReady = false;\n rewardedInterstitialErrored = true;\n logger.error('Error while loading a rewarded interstitial:', error);\n }\n };\n\n /** Show the loaded reward interstitial. */\n export const showRewardedInterstitial = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!rewardedInterstitial) {\n logger.warn(\n 'interstitial has not been set up, call loadRewardedInterstitial first.'\n );\n return;\n }\n if (!rewardedInterstitialReady) {\n logger.info('Rewarded interstitial not loaded yet, cannot display it.');\n }\n rewardedInterstitialErrored = false;\n\n try {\n logger.info('Showing AdMob rewarded interstitial.');\n await rewardedInterstitial.show();\n // Rewarded interstitial will be shown and\n // `rewardedInterstitialShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error(\n 'Error while showing an AdMob rewarded interstitial:',\n error\n );\n rewardedInterstitialShowing = false;\n rewardedInterstitialErrored = true;\n }\n };\n\n /** Mark the reward of the interstitial as claimed. */\n export const markRewardedInterstitialRewardAsClaimed = () => {\n rewardedInterstitialRewardReceived = false;\n };\n\n // -------------------------\n // ---- Rewarded Video -----\n // -------------------------\n export const isRewardedVideoLoading = () => rewardedVideoLoading;\n export const isRewardedVideoReady = () => rewardedVideoReady;\n export const isRewardedVideoShowing = () => rewardedVideoShowing;\n export const isRewardedVideoErrored = () => rewardedVideoErrored;\n\n /** Check if the reward of the rewarded video was received. */\n export const wasRewardedVideoRewardReceived = function (markAsClaimed) {\n const reward = rewardedVideoRewardReceived;\n if (markAsClaimed) {\n rewardedVideoRewardReceived = false;\n }\n return reward;\n };\n\n /** Load a rewarded video. */\n export const loadRewardedVideo = async (\n androidAdUnitID,\n iosAdUnitID,\n displayWhenLoaded\n ) => {\n if (!(await checkIfAdMobIsAvailable())) return;\n if (rewardedVideoLoading || rewardedVideoShowing) {\n return;\n }\n\n const adUnitId = getAdUnitId(androidAdUnitID, iosAdUnitID, 'rewarded');\n if (!adUnitId) return;\n\n rewardedVideoLoading = true;\n rewardedVideoReady = false;\n rewardedVideoErrored = false;\n\n rewardedVideo = new admob.RewardedAd({\n adUnitId,\n npa: npaValue,\n });\n\n // Rewarded video event listeners\n rewardedVideo.on('load', () => {\n rewardedVideoReady = true;\n rewardedVideoLoading = false;\n });\n rewardedVideo.on('loadfail', () => {\n rewardedVideoLoading = false;\n rewardedVideoErrored = true;\n });\n rewardedVideo.on('show', () => {\n rewardedVideoShowing = true;\n rewardedVideoReady = false;\n });\n rewardedVideo.on('showfail', () => {\n rewardedVideoShowing = false;\n rewardedVideoErrored = true;\n });\n rewardedVideo.on('dismiss', () => {\n rewardedVideoShowing = false;\n });\n rewardedVideo.on('reward', () => {\n rewardedVideoRewardReceived = true;\n });\n\n try {\n logger.info('Loading AdMob rewarded video.');\n await rewardedVideo.load();\n logger.info('AdMob rewarded video successfully loaded.');\n rewardedVideoLoading = false;\n rewardedVideoReady = true;\n if (displayWhenLoaded) showRewardedVideo();\n } catch (error) {\n rewardedVideoLoading = false;\n rewardedVideoReady = false;\n rewardedVideoErrored = true;\n logger.error('Error while loading a rewarded video:', error);\n }\n };\n\n /** Show the loaded reward video. */\n export const showRewardedVideo = async () => {\n if (!(await checkIfAdMobIsAvailable())) return;\n\n if (!rewardedVideo) {\n logger.warn('Video has not been set up, call loadRewardedVideo first.');\n return;\n }\n if (!rewardedVideoReady) {\n logger.info('Rewarded video not loaded yet, cannot display it.');\n }\n rewardedVideoErrored = false;\n\n try {\n logger.info('Showing AdMob rewarded video.');\n await rewardedVideo.show();\n // Rewarded video will be shown and\n // `rewardedVideoShowing` will be updated thanks to events\n // (but it's too early to change it now).\n } catch (error) {\n logger.error('Error while showing an AdMob rewarded video:', error);\n rewardedVideoShowing = false;\n rewardedVideoErrored = true;\n }\n };\n\n /** Mark the reward of the video as claimed. */\n export const markRewardedVideoRewardAsClaimed = () => {\n rewardedVideoRewardReceived = false;\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(i){let l;(function(c){let u;(function(s){const t=n=>{const e=n.getGame().getRenderer().getElectronRemote();return e?e.getCurrentWindow():null};s.focus=function(n,e){const o=t(e);o&&(n?o.focus():o.blur())},s.isFocused=function(n){const e=t(n);return e?e.isFocused():!1},s.show=function(n,e){const o=t(e);o&&(n?o.showInactive():o.hide())},s.isVisible=function(n){const e=t(n);return e?e.isVisible():!1},s.maximize=function(n,e){const o=t(e);o&&(n?o.maximize():o.unmaximize())},s.isMaximized=function(n){const e=t(n);return e?e.isMaximized():!1},s.minimize=function(n,e){const o=t(e);o&&(n?o.minimize():o.restore())},s.isMinimized=function(n){const e=t(n);return e?e.isMinimized():!1},s.enable=function(n,e){const o=t(e);o&&o.setEnabled(n)},s.isEnabled=function(n){const e=t(n);return e?e.isEnabled():!1},s.setResizable=function(n,e){const o=t(e);o&&o.setResizable(n)},s.isResizable=function(n){const e=t(n);return e?e.isResizable():!1},s.setMovable=function(n,e){const o=t(e);o&&o.setMovable(n)},s.isMovable=function(n){const e=t(n);return e?e.isMovable():!1},s.setMaximizable=function(n,e){const o=t(e);o&&o.setMaximizable(n)},s.isMaximizable=function(n){const e=t(n);return e?e.isMaximizable():!1},s.setMinimizable=function(n,e){const o=t(e);o&&o.setMinimizable(n)},s.isMinimizable=function(n){const e=t(n);return e?e.isMinimizable():!1},s.setFullScreenable=function(n,e){const o=t(e);o&&o.setFullScreenable(n)},s.isFullScreenable=function(n){const e=t(n);return e?e.isFullScreenable():!1},s.setClosable=function(n,e){const o=t(e);o&&o.setClosable(n)},s.isClosable=function(n){const e=t(n);return e?e.isClosable():!1},s.setAlwaysOnTop=function(n,e,o){const r=t(o);r&&r.setAlwaysOnTop(n,e)},s.isAlwaysOnTop=function(n){const e=t(n);return e?e.isAlwaysOnTop():!1},s.setPosition=function(n,e,o){const r=t(o);r&&r.setPosition(~~n,~~e)},s.getPositionX=function(n){const e=t(n);return e?e.getPosition()[0]:0},s.getPositionY=function(n){const e=t(n);return e?e.getPosition()[1]:0},s.setKiosk=function(n,e){const o=t(e);o&&o.setKiosk(n)},s.isKiosk=function(n){const e=t(n);return e?e.isKiosk():!1},s.flash=function(n,e){const o=t(e);o&&o.flashFrame(n)},s.setHasShadow=function(n,e){const o=t(e);o&&o.setHasShadow(n)},s.hasShadow=function(n){const e=t(n);return e?e.hasShadow():!1},s.setOpacity=function(n,e){const o=t(e);o&&o.setOpacity(n)},s.getOpacity=function(n){const e=t(n);return e?e.getOpacity():1},s.setContentProtection=function(n,e){const o=t(e);o&&o.setContentProtection(n)},s.setFocusable=function(n,e){const o=t(e);o&&o.setFocusable(n)}})(u=c.advancedWindow||(c.advancedWindow={}))})(l=i.evtTools||(i.evtTools={}))})(gdjs||(gdjs={}));
1
+ var gdjs;(function(i){let l;(function(c){let u;(function(s){const t=n=>{try{const e=n.getGame().getRenderer().getElectronRemote();return e?e.getCurrentWindow():null}catch{return null}};s.focus=function(n,e){const o=t(e);o&&(n?o.focus():o.blur())},s.isFocused=function(n){const e=t(n);return e?e.isFocused():!1},s.show=function(n,e){const o=t(e);o&&(n?o.showInactive():o.hide())},s.isVisible=function(n){const e=t(n);return e?e.isVisible():!1},s.maximize=function(n,e){const o=t(e);o&&(n?o.maximize():o.unmaximize())},s.isMaximized=function(n){const e=t(n);return e?e.isMaximized():!1},s.minimize=function(n,e){const o=t(e);o&&(n?o.minimize():o.restore())},s.isMinimized=function(n){const e=t(n);return e?e.isMinimized():!1},s.enable=function(n,e){const o=t(e);o&&o.setEnabled(n)},s.isEnabled=function(n){const e=t(n);return e?e.isEnabled():!1},s.setResizable=function(n,e){const o=t(e);o&&o.setResizable(n)},s.isResizable=function(n){const e=t(n);return e?e.isResizable():!1},s.setMovable=function(n,e){const o=t(e);o&&o.setMovable(n)},s.isMovable=function(n){const e=t(n);return e?e.isMovable():!1},s.setMaximizable=function(n,e){const o=t(e);o&&o.setMaximizable(n)},s.isMaximizable=function(n){const e=t(n);return e?e.isMaximizable():!1},s.setMinimizable=function(n,e){const o=t(e);o&&o.setMinimizable(n)},s.isMinimizable=function(n){const e=t(n);return e?e.isMinimizable():!1},s.setFullScreenable=function(n,e){const o=t(e);o&&o.setFullScreenable(n)},s.isFullScreenable=function(n){const e=t(n);return e?e.isFullScreenable():!1},s.setClosable=function(n,e){const o=t(e);o&&o.setClosable(n)},s.isClosable=function(n){const e=t(n);return e?e.isClosable():!1},s.setAlwaysOnTop=function(n,e,o){const r=t(o);r&&r.setAlwaysOnTop(n,e)},s.isAlwaysOnTop=function(n){const e=t(n);return e?e.isAlwaysOnTop():!1},s.setPosition=function(n,e,o){const r=t(o);r&&r.setPosition(~~n,~~e)},s.getPositionX=function(n){const e=t(n);return e?e.getPosition()[0]:0},s.getPositionY=function(n){const e=t(n);return e?e.getPosition()[1]:0},s.setKiosk=function(n,e){const o=t(e);o&&o.setKiosk(n)},s.isKiosk=function(n){const e=t(n);return e?e.isKiosk():!1},s.flash=function(n,e){const o=t(e);o&&o.flashFrame(n)},s.setHasShadow=function(n,e){const o=t(e);o&&o.setHasShadow(n)},s.hasShadow=function(n){const e=t(n);return e?e.hasShadow():!1},s.setOpacity=function(n,e){const o=t(e);o&&o.setOpacity(n)},s.getOpacity=function(n){const e=t(n);return e?e.getOpacity():1},s.setContentProtection=function(n,e){const o=t(e);o&&o.setContentProtection(n)},s.setFocusable=function(n,e){const o=t(e);o&&o.setFocusable(n)}})(u=c.advancedWindow||(c.advancedWindow={}))})(l=i.evtTools||(i.evtTools={}))})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=electron-advancedwindowtools.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../GDevelop/Extensions/AdvancedWindow/electron-advancedwindowtools.ts"],
4
- "sourcesContent": ["namespace gdjs {\n /**\n * Tools to manipulate the game window positioning and\n * interactions with the operating system.\n * @author arthuro555\n */\n export namespace evtTools {\n export namespace advancedWindow {\n const getElectronBrowserWindow = (runtimeScene: gdjs.RuntimeScene) => {\n const electronRemote = runtimeScene\n .getGame()\n .getRenderer()\n .getElectronRemote();\n if (electronRemote) {\n return electronRemote.getCurrentWindow();\n }\n\n return null;\n };\n\n export const focus = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.focus();\n } else {\n electronBrowserWindow.blur();\n }\n }\n };\n\n export const isFocused = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isFocused();\n }\n return false;\n };\n\n export const show = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.showInactive();\n } else {\n electronBrowserWindow.hide();\n }\n }\n };\n\n export const isVisible = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isVisible();\n }\n return false;\n };\n\n export const maximize = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.maximize();\n } else {\n electronBrowserWindow.unmaximize();\n }\n }\n };\n\n export const isMaximized = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMaximized();\n }\n return false;\n };\n\n export const minimize = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.minimize();\n } else {\n electronBrowserWindow.restore();\n }\n }\n };\n\n export const isMinimized = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMinimized();\n }\n return false;\n };\n\n export const enable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setEnabled(activate);\n }\n };\n\n export const isEnabled = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isEnabled();\n }\n return false;\n };\n\n export const setResizable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setResizable(activate);\n }\n };\n\n export const isResizable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isResizable();\n }\n return false;\n };\n\n export const setMovable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setMovable(activate);\n }\n };\n\n export const isMovable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMovable();\n }\n return false;\n };\n\n export const setMaximizable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setMaximizable(activate);\n }\n };\n\n export const isMaximizable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMaximizable();\n }\n return false;\n };\n\n export const setMinimizable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setMinimizable(activate);\n }\n };\n\n export const isMinimizable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMinimizable();\n }\n return false;\n };\n\n export const setFullScreenable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setFullScreenable(activate);\n }\n };\n\n export const isFullScreenable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isFullScreenable();\n }\n return false;\n };\n\n export const setClosable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setClosable(activate);\n }\n };\n\n export const isClosable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isClosable();\n }\n return false;\n };\n\n export const setAlwaysOnTop = function (\n activate: boolean,\n level:\n | 'normal'\n | 'floating'\n | 'torn-off-menu'\n | 'modal-panel'\n | 'main-menu'\n | 'status'\n | 'pop-up-menu'\n | 'screen-saver',\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setAlwaysOnTop(activate, level);\n }\n };\n\n export const isAlwaysOnTop = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isAlwaysOnTop();\n }\n return false;\n };\n\n export const setPosition = function (\n x: float,\n y: float,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n // Convert x and y to (32 bit) integers to avoid Electron errors.\n electronBrowserWindow.setPosition(~~x, ~~y);\n }\n };\n\n export const getPositionX = function (\n runtimeScene: gdjs.RuntimeScene\n ): number {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.getPosition()[0];\n }\n return 0;\n };\n\n export const getPositionY = function (\n runtimeScene: gdjs.RuntimeScene\n ): number {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.getPosition()[1];\n }\n return 0;\n };\n\n export const setKiosk = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setKiosk(activate);\n }\n };\n\n export const isKiosk = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isKiosk();\n }\n return false;\n };\n\n export const flash = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.flashFrame(activate);\n }\n };\n\n export const setHasShadow = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setHasShadow(activate);\n }\n };\n\n export const hasShadow = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.hasShadow();\n }\n return false;\n };\n\n export const setOpacity = function (\n opacity: float,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setOpacity(opacity);\n }\n };\n\n export const getOpacity = function (\n runtimeScene: gdjs.RuntimeScene\n ): number {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.getOpacity();\n }\n return 1;\n };\n\n export const setContentProtection = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setContentProtection(activate);\n }\n };\n\n export const setFocusable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setFocusable(activate);\n }\n };\n }\n }\n}\n"],
5
- "mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CAMS,GAAU,GAAV,UAAU,EAAV,CACE,GAAU,GAAV,UAAU,EAAV,CACL,KAAM,GAA2B,AAAC,GAAoC,CACpE,KAAM,GAAiB,EACpB,UACA,cACA,oBACH,MAAI,GACK,EAAe,mBAGjB,MAGF,AAAM,QAAQ,SACnB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,CAAI,EACF,EAAsB,QAEtB,EAAsB,SAKf,YAAY,SACvB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,YAExB,IAGI,OAAO,SAClB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,CAAI,EACF,EAAsB,eAEtB,EAAsB,SAKf,YAAY,SACvB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,YAExB,IAGI,WAAW,SACtB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,CAAI,EACF,EAAsB,WAEtB,EAAsB,eAKf,cAAc,SACzB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,cAExB,IAGI,WAAW,SACtB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,CAAI,EACF,EAAsB,WAEtB,EAAsB,YAKf,cAAc,SACzB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,cAExB,IAGI,SAAS,SACpB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,WAAW,IAIxB,YAAY,SACvB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,YAExB,IAGI,eAAe,SAC1B,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,aAAa,IAI1B,cAAc,SACzB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,cAExB,IAGI,aAAa,SACxB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,WAAW,IAIxB,YAAY,SACvB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,YAExB,IAGI,iBAAiB,SAC5B,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,eAAe,IAI5B,gBAAgB,SAC3B,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,gBAExB,IAGI,iBAAiB,SAC5B,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,eAAe,IAI5B,gBAAgB,SAC3B,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,gBAExB,IAGI,oBAAoB,SAC/B,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,kBAAkB,IAI/B,mBAAmB,SAC9B,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,mBAExB,IAGI,cAAc,SACzB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,YAAY,IAIzB,aAAa,SACxB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,aAExB,IAGI,iBAAiB,SAC5B,EACA,EASA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,eAAe,EAAU,IAItC,gBAAgB,SAC3B,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,gBAExB,IAGI,cAAc,SACzB,EACA,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GAEF,EAAsB,YAAY,CAAC,CAAC,EAAG,CAAC,CAAC,IAIhC,eAAe,SAC1B,EACQ,CACR,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,cAAc,GAEtC,GAGI,eAAe,SAC1B,EACQ,CACR,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,cAAc,GAEtC,GAGI,WAAW,SACtB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,SAAS,IAItB,UAAU,SACrB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,UAExB,IAGI,QAAQ,SACnB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,WAAW,IAIxB,eAAe,SAC1B,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,aAAa,IAI1B,YAAY,SACvB,EACS,CACT,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,YAExB,IAGI,aAAa,SACxB,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,WAAW,IAIxB,aAAa,SACxB,EACQ,CACR,KAAM,GAAwB,EAAyB,GACvD,MAAI,GACK,EAAsB,aAExB,GAGI,uBAAuB,SAClC,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,qBAAqB,IAIlC,eAAe,SAC1B,EACA,EACA,CACA,KAAM,GAAwB,EAAyB,GACvD,AAAI,GACF,EAAsB,aAAa,MA5YxB,6CADF,iCANT",
4
+ "sourcesContent": ["namespace gdjs {\n /**\n * Tools to manipulate the game window positioning and\n * interactions with the operating system.\n * @author arthuro555\n */\n export namespace evtTools {\n export namespace advancedWindow {\n const getElectronBrowserWindow = (runtimeScene: gdjs.RuntimeScene) => {\n try {\n const electronRemote = runtimeScene\n .getGame()\n .getRenderer()\n .getElectronRemote();\n if (electronRemote) {\n return electronRemote.getCurrentWindow();\n }\n return null;\n } catch (error) {\n return null;\n }\n };\n\n export const focus = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.focus();\n } else {\n electronBrowserWindow.blur();\n }\n }\n };\n\n export const isFocused = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isFocused();\n }\n return false;\n };\n\n export const show = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.showInactive();\n } else {\n electronBrowserWindow.hide();\n }\n }\n };\n\n export const isVisible = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isVisible();\n }\n return false;\n };\n\n export const maximize = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.maximize();\n } else {\n electronBrowserWindow.unmaximize();\n }\n }\n };\n\n export const isMaximized = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMaximized();\n }\n return false;\n };\n\n export const minimize = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n if (activate) {\n electronBrowserWindow.minimize();\n } else {\n electronBrowserWindow.restore();\n }\n }\n };\n\n export const isMinimized = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMinimized();\n }\n return false;\n };\n\n export const enable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setEnabled(activate);\n }\n };\n\n export const isEnabled = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isEnabled();\n }\n return false;\n };\n\n export const setResizable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setResizable(activate);\n }\n };\n\n export const isResizable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isResizable();\n }\n return false;\n };\n\n export const setMovable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setMovable(activate);\n }\n };\n\n export const isMovable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMovable();\n }\n return false;\n };\n\n export const setMaximizable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setMaximizable(activate);\n }\n };\n\n export const isMaximizable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMaximizable();\n }\n return false;\n };\n\n export const setMinimizable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setMinimizable(activate);\n }\n };\n\n export const isMinimizable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isMinimizable();\n }\n return false;\n };\n\n export const setFullScreenable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setFullScreenable(activate);\n }\n };\n\n export const isFullScreenable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isFullScreenable();\n }\n return false;\n };\n\n export const setClosable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setClosable(activate);\n }\n };\n\n export const isClosable = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isClosable();\n }\n return false;\n };\n\n export const setAlwaysOnTop = function (\n activate: boolean,\n level:\n | 'normal'\n | 'floating'\n | 'torn-off-menu'\n | 'modal-panel'\n | 'main-menu'\n | 'status'\n | 'pop-up-menu'\n | 'screen-saver',\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setAlwaysOnTop(activate, level);\n }\n };\n\n export const isAlwaysOnTop = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isAlwaysOnTop();\n }\n return false;\n };\n\n export const setPosition = function (\n x: float,\n y: float,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n // Convert x and y to (32 bit) integers to avoid Electron errors.\n electronBrowserWindow.setPosition(~~x, ~~y);\n }\n };\n\n export const getPositionX = function (\n runtimeScene: gdjs.RuntimeScene\n ): number {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.getPosition()[0];\n }\n return 0;\n };\n\n export const getPositionY = function (\n runtimeScene: gdjs.RuntimeScene\n ): number {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.getPosition()[1];\n }\n return 0;\n };\n\n export const setKiosk = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setKiosk(activate);\n }\n };\n\n export const isKiosk = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.isKiosk();\n }\n return false;\n };\n\n export const flash = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.flashFrame(activate);\n }\n };\n\n export const setHasShadow = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setHasShadow(activate);\n }\n };\n\n export const hasShadow = function (\n runtimeScene: gdjs.RuntimeScene\n ): boolean {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.hasShadow();\n }\n return false;\n };\n\n export const setOpacity = function (\n opacity: float,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setOpacity(opacity);\n }\n };\n\n export const getOpacity = function (\n runtimeScene: gdjs.RuntimeScene\n ): number {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n return electronBrowserWindow.getOpacity();\n }\n return 1;\n };\n\n export const setContentProtection = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setContentProtection(activate);\n }\n };\n\n export const setFocusable = function (\n activate: boolean,\n runtimeScene: gdjs.RuntimeScene\n ) {\n const electronBrowserWindow = getElectronBrowserWindow(runtimeScene);\n if (electronBrowserWindow) {\n electronBrowserWindow.setFocusable(activate);\n }\n };\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var gdjs;(function(c){const t=class extends c.RuntimeBehavior{constructor(o,e,s){super(o,e,s);this._invalidDistances=!0;this._leftEdgeDistance=0;this._rightEdgeDistance=0;this._topEdgeDistance=0;this._bottomEdgeDistance=0;this._useLegacyBottomAndRightAnchors=!1;this._relativeToOriginalWindowSize=!!e.relativeToOriginalWindowSize,this._leftEdgeAnchor=e.leftEdgeAnchor,this._rightEdgeAnchor=e.rightEdgeAnchor,this._topEdgeAnchor=e.topEdgeAnchor,this._bottomEdgeAnchor=e.bottomEdgeAnchor,this._useLegacyBottomAndRightAnchors=e.useLegacyBottomAndRightAnchors===void 0?!0:e.useLegacyBottomAndRightAnchors}updateFromBehaviorData(o,e){return o.leftEdgeAnchor!==e.leftEdgeAnchor&&(this._leftEdgeAnchor=e.leftEdgeAnchor),o.rightEdgeAnchor!==e.rightEdgeAnchor&&(this._rightEdgeAnchor=e.rightEdgeAnchor),o.topEdgeAnchor!==e.topEdgeAnchor&&(this._topEdgeAnchor=e.topEdgeAnchor),o.bottomEdgeAnchor!==e.bottomEdgeAnchor&&(this._bottomEdgeAnchor=e.bottomEdgeAnchor),o.useLegacyTrajectory!==e.useLegacyTrajectory&&(this._useLegacyBottomAndRightAnchors=e.useLegacyBottomAndRightAnchors),o.relativeToOriginalWindowSize===e.relativeToOriginalWindowSize}onActivate(){this._invalidDistances=!0}doStepPreEvents(o){const e=c.staticArray(c.AnchorRuntimeBehavior.prototype.doStepPreEvents),s=o.getGame();let r=s.getGameResolutionWidth(),h=s.getGameResolutionHeight();const A=o.getLayer(this.owner.getLayer());if(this._invalidDistances){this._relativeToOriginalWindowSize&&(r=s.getOriginalWidth(),h=s.getOriginalHeight());const i=A.convertCoords(this.owner.getDrawableX(),this.owner.getDrawableY(),0,e);this._leftEdgeAnchor===t.HorizontalAnchor.WINDOW_LEFT?this._leftEdgeDistance=i[0]:this._leftEdgeAnchor===t.HorizontalAnchor.WINDOW_RIGHT?this._leftEdgeDistance=r-i[0]:this._leftEdgeAnchor===t.HorizontalAnchor.PROPORTIONAL&&(this._leftEdgeDistance=i[0]/r),this._topEdgeAnchor===t.VerticalAnchor.WINDOW_TOP?this._topEdgeDistance=i[1]:this._topEdgeAnchor===t.VerticalAnchor.WINDOW_BOTTOM?this._topEdgeDistance=h-i[1]:this._topEdgeAnchor===t.VerticalAnchor.PROPORTIONAL&&(this._topEdgeDistance=i[1]/h);const n=A.convertCoords(this.owner.getDrawableX()+this.owner.getWidth(),this.owner.getDrawableY()+this.owner.getHeight(),0,e);this._rightEdgeAnchor===t.HorizontalAnchor.WINDOW_LEFT?this._rightEdgeDistance=n[0]:this._rightEdgeAnchor===t.HorizontalAnchor.WINDOW_RIGHT?this._rightEdgeDistance=r-n[0]:this._rightEdgeAnchor===t.HorizontalAnchor.PROPORTIONAL&&(this._rightEdgeDistance=n[0]/r),this._bottomEdgeAnchor===t.VerticalAnchor.WINDOW_TOP?this._bottomEdgeDistance=n[1]:this._bottomEdgeAnchor===t.VerticalAnchor.WINDOW_BOTTOM?this._bottomEdgeDistance=h-n[1]:this._bottomEdgeAnchor===t.VerticalAnchor.PROPORTIONAL&&(this._bottomEdgeDistance=n[1]/h),this._invalidDistances=!1}else{let i=0,n=0,d=0,E=0;this._leftEdgeAnchor===t.HorizontalAnchor.WINDOW_LEFT?i=this._leftEdgeDistance:this._leftEdgeAnchor===t.HorizontalAnchor.WINDOW_RIGHT?i=r-this._leftEdgeDistance:this._leftEdgeAnchor===t.HorizontalAnchor.PROPORTIONAL&&(i=this._leftEdgeDistance*r),this._topEdgeAnchor===t.VerticalAnchor.WINDOW_TOP?n=this._topEdgeDistance:this._topEdgeAnchor===t.VerticalAnchor.WINDOW_BOTTOM?n=h-this._topEdgeDistance:this._topEdgeAnchor===t.VerticalAnchor.PROPORTIONAL&&(n=this._topEdgeDistance*h),this._rightEdgeAnchor===t.HorizontalAnchor.WINDOW_LEFT?d=this._rightEdgeDistance:this._rightEdgeAnchor===t.HorizontalAnchor.WINDOW_RIGHT?d=r-this._rightEdgeDistance:this._rightEdgeAnchor===t.HorizontalAnchor.PROPORTIONAL&&(d=this._rightEdgeDistance*r),this._bottomEdgeAnchor===t.VerticalAnchor.WINDOW_TOP?E=this._bottomEdgeDistance:this._bottomEdgeAnchor===t.VerticalAnchor.WINDOW_BOTTOM?E=h-this._bottomEdgeDistance:this._bottomEdgeAnchor===t.VerticalAnchor.PROPORTIONAL&&(E=this._bottomEdgeDistance*h);const _=A.convertInverseCoords(i,n,0,e),g=_[0],l=_[1],N=A.convertInverseCoords(d,E,0,e),O=N[0],f=N[1];this._useLegacyBottomAndRightAnchors?(this._rightEdgeAnchor!==t.HorizontalAnchor.NONE&&this.owner.setWidth(O-g),this._bottomEdgeAnchor!==t.VerticalAnchor.NONE&&this.owner.setHeight(f-l),this._leftEdgeAnchor!==t.HorizontalAnchor.NONE&&this.owner.setX(g+this.owner.getX()-this.owner.getDrawableX()),this._topEdgeAnchor!==t.VerticalAnchor.NONE&&this.owner.setY(l+this.owner.getY()-this.owner.getDrawableY())):(this._rightEdgeAnchor!==t.HorizontalAnchor.NONE&&this._leftEdgeAnchor!==t.HorizontalAnchor.NONE?(this.owner.setWidth(O-g),this.owner.setX(g)):(this._leftEdgeAnchor!==t.HorizontalAnchor.NONE&&this.owner.setX(g+this.owner.getX()-this.owner.getDrawableX()),this._rightEdgeAnchor!==t.HorizontalAnchor.NONE&&this.owner.setX(O+this.owner.getX()-this.owner.getDrawableX()-this.owner.getWidth())),this._bottomEdgeAnchor!==t.VerticalAnchor.NONE&&this._topEdgeAnchor!==t.VerticalAnchor.NONE?(this.owner.setHeight(f-l),this.owner.setY(l)):(this._topEdgeAnchor!==t.VerticalAnchor.NONE&&this.owner.setY(l+this.owner.getY()-this.owner.getDrawableY()),this._bottomEdgeAnchor!==t.VerticalAnchor.NONE&&this.owner.setY(f+this.owner.getY()-this.owner.getDrawableY()-this.owner.getHeight())))}}doStepPostEvents(o){}};let a=t;a.HorizontalAnchor={NONE:0,WINDOW_LEFT:1,WINDOW_RIGHT:2,PROPORTIONAL:3},a.VerticalAnchor={NONE:0,WINDOW_TOP:1,WINDOW_BOTTOM:2,PROPORTIONAL:3},c.AnchorRuntimeBehavior=a,c.registerBehavior("AnchorBehavior::AnchorBehavior",c.AnchorRuntimeBehavior)})(gdjs||(gdjs={}));
1
+ var gdjs;(function(_){let o;(function(t){t[t.None=0]="None",t[t.WindowLeft=1]="WindowLeft",t[t.WindowRight=2]="WindowRight",t[t.Proportional=3]="Proportional",t[t.WindowCenter=4]="WindowCenter"})(o||(o={}));let n;(function(t){t[t.None=0]="None",t[t.WindowTop=1]="WindowTop",t[t.WindowBottom=2]="WindowBottom",t[t.Proportional=3]="Proportional",t[t.WindowCenter=4]="WindowCenter"})(n||(n={}));class R extends _.RuntimeBehavior{constructor(e,i,s){super(e,i,s);this._invalidDistances=!0;this._leftEdgeDistance=0;this._rightEdgeDistance=0;this._topEdgeDistance=0;this._bottomEdgeDistance=0;this._useLegacyBottomAndRightAnchors=!1;this._relativeToOriginalWindowSize=!!i.relativeToOriginalWindowSize,this._leftEdgeAnchor=i.leftEdgeAnchor,this._rightEdgeAnchor=i.rightEdgeAnchor,this._topEdgeAnchor=i.topEdgeAnchor,this._bottomEdgeAnchor=i.bottomEdgeAnchor,this._useLegacyBottomAndRightAnchors=i.useLegacyBottomAndRightAnchors===void 0?!0:i.useLegacyBottomAndRightAnchors}updateFromBehaviorData(e,i){return e.leftEdgeAnchor!==i.leftEdgeAnchor&&(this._leftEdgeAnchor=i.leftEdgeAnchor),e.rightEdgeAnchor!==i.rightEdgeAnchor&&(this._rightEdgeAnchor=i.rightEdgeAnchor),e.topEdgeAnchor!==i.topEdgeAnchor&&(this._topEdgeAnchor=i.topEdgeAnchor),e.bottomEdgeAnchor!==i.bottomEdgeAnchor&&(this._bottomEdgeAnchor=i.bottomEdgeAnchor),e.useLegacyTrajectory!==i.useLegacyTrajectory&&(this._useLegacyBottomAndRightAnchors=i.useLegacyBottomAndRightAnchors),e.relativeToOriginalWindowSize===i.relativeToOriginalWindowSize}onActivate(){this._invalidDistances=!0}doStepPreEvents(e){const i=_.staticArray(_.AnchorRuntimeBehavior.prototype.doStepPreEvents);let s=e.getUnrotatedViewportMinX(),h=e.getUnrotatedViewportMinY(),t=e.getUnrotatedViewportMaxX(),d=e.getUnrotatedViewportMaxY(),l=(t+s)/2,f=(d+h)/2,w=t-s,A=d-h;const b=e.getLayer(this.owner.getLayer());if(this._invalidDistances){this._relativeToOriginalWindowSize&&(s=e.getInitialUnrotatedViewportMinX(),h=e.getInitialUnrotatedViewportMinY(),t=e.getInitialUnrotatedViewportMaxX(),d=e.getInitialUnrotatedViewportMaxY(),l=(t+s)/2,f=(d+h)/2,w=t-s,A=d-h);const r=this._convertCoords(e,b,this.owner.getDrawableX(),this.owner.getDrawableY(),i);this._leftEdgeAnchor===1?this._leftEdgeDistance=r[0]-s:this._leftEdgeAnchor===2?this._leftEdgeDistance=r[0]-t:this._leftEdgeAnchor===3?this._leftEdgeDistance=(r[0]-s)/w:this._leftEdgeAnchor===4&&(this._leftEdgeDistance=r[0]-l),this._topEdgeAnchor===1?this._topEdgeDistance=r[1]-h:this._topEdgeAnchor===2?this._topEdgeDistance=r[1]-d:this._topEdgeAnchor===3?this._topEdgeDistance=(r[1]-h)/A:this._topEdgeAnchor===4&&(this._topEdgeDistance=r[1]-f);const g=this._convertCoords(e,b,this.owner.getDrawableX()+this.owner.getWidth(),this.owner.getDrawableY()+this.owner.getHeight(),i);this._rightEdgeAnchor===1?this._rightEdgeDistance=g[0]-s:this._rightEdgeAnchor===2?this._rightEdgeDistance=g[0]-t:this._rightEdgeAnchor===3?this._rightEdgeDistance=(g[0]-s)/w:this._rightEdgeAnchor===4&&(this._rightEdgeDistance=g[0]-l),this._bottomEdgeAnchor===1?this._bottomEdgeDistance=g[1]-h:this._bottomEdgeAnchor===2?this._bottomEdgeDistance=g[1]-d:this._bottomEdgeAnchor===3?this._bottomEdgeDistance=(g[1]-h)/A:this._bottomEdgeAnchor===4&&(this._bottomEdgeDistance=g[1]-f),this._invalidDistances=!1}else{let r=0,g=0,a=0,p=0;this._leftEdgeAnchor===1?r=s+this._leftEdgeDistance:this._leftEdgeAnchor===2?r=t+this._leftEdgeDistance:this._leftEdgeAnchor===3?r=s+this._leftEdgeDistance*w:this._leftEdgeAnchor===4&&(r=l+this._leftEdgeDistance),this._topEdgeAnchor===1?g=h+this._topEdgeDistance:this._topEdgeAnchor===2?g=d+this._topEdgeDistance:this._topEdgeAnchor===3?g=h+this._topEdgeDistance*A:this._topEdgeAnchor===4&&(g=f+this._topEdgeDistance),this._rightEdgeAnchor===1?a=s+this._rightEdgeDistance:this._rightEdgeAnchor===2?a=t+this._rightEdgeDistance:this._rightEdgeAnchor===3?a=s+this._rightEdgeDistance*w:this._rightEdgeAnchor===4&&(a=l+this._rightEdgeDistance),this._bottomEdgeAnchor===1?p=h+this._bottomEdgeDistance:this._bottomEdgeAnchor===2?p=d+this._bottomEdgeDistance:this._bottomEdgeAnchor===3?p=h+this._bottomEdgeDistance*A:this._bottomEdgeAnchor===4&&(p=f+this._bottomEdgeDistance);const D=this._convertInverseCoords(e,b,r,g,i),c=D[0],E=D[1],P=this._convertInverseCoords(e,b,a,p,i),W=P[0],u=P[1];if(this._useLegacyBottomAndRightAnchors)this._rightEdgeAnchor!==0&&this.owner.setWidth(W-c),this._bottomEdgeAnchor!==0&&this.owner.setHeight(u-E),this._leftEdgeAnchor!==0&&this.owner.setX(c+this.owner.getX()-this.owner.getDrawableX()),this._topEdgeAnchor!==0&&this.owner.setY(E+this.owner.getY()-this.owner.getDrawableY());else{if(this._rightEdgeAnchor!==0&&this._leftEdgeAnchor!==0){const m=W-c;this.owner.setX(this.owner.getX()===this.owner.getDrawableX()?c:c+(this.owner.getX()-this.owner.getDrawableX())*m/this.owner.getWidth()),this.owner.setWidth(m)}else this._leftEdgeAnchor!==0&&this.owner.setX(c+this.owner.getX()-this.owner.getDrawableX()),this._rightEdgeAnchor!==0&&this.owner.setX(W+this.owner.getX()-this.owner.getDrawableX()-this.owner.getWidth());if(this._bottomEdgeAnchor!==0&&this._topEdgeAnchor!==0){const m=u-E;this.owner.setY(this.owner.getY()===this.owner.getDrawableY()?E:E+(this.owner.getY()-this.owner.getDrawableY())*m/this.owner.getHeight()),this.owner.setHeight(m)}else this._topEdgeAnchor!==0&&this.owner.setY(E+this.owner.getY()-this.owner.getDrawableY()),this._bottomEdgeAnchor!==0&&this.owner.setY(u+this.owner.getY()-this.owner.getDrawableY()-this.owner.getHeight())}}}doStepPostEvents(e){}_convertCoords(e,i,s,h,t){return e!==e.getScene()?(t[0]=s,t[1]=h,t):i.convertCoords(s,h,0,t)}_convertInverseCoords(e,i,s,h,t){return e!==e.getScene()?(t[0]=s,t[1]=h,t):i.convertInverseCoords(s,h,0,t)}}_.AnchorRuntimeBehavior=R,_.registerBehavior("AnchorBehavior::AnchorBehavior",_.AnchorRuntimeBehavior)})(gdjs||(gdjs={}));
2
2
  //# sourceMappingURL=anchorruntimebehavior.js.map