gdcore-tools 2.0.0-beta2 → 2.0.0-beta4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Runtime/AsyncTasksManager.js +2 -2
- package/dist/Runtime/AsyncTasksManager.js.map +2 -2
- package/dist/Runtime/Cordova/config.xml +23 -1
- package/dist/Runtime/Cordova/www/LICENSE.GDevelop.txt +2 -0
- package/dist/Runtime/Cordova/www/index.html +1 -1
- package/dist/Runtime/CustomRuntimeObject.js +1 -1
- package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
- package/dist/Runtime/CustomRuntimeObject2D.js +2 -0
- package/dist/Runtime/CustomRuntimeObject2D.js.map +7 -0
- package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
- package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
- package/dist/Runtime/Electron/LICENSE.GDevelop.txt +2 -0
- package/dist/Runtime/Electron/package.json +3 -0
- package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js +1 -1
- package/dist/Runtime/Extensions/3D/A_RuntimeObject3D.js.map +2 -2
- package/dist/Runtime/Extensions/3D/A_RuntimeObject3DRenderer.js +1 -1
- package/dist/Runtime/Extensions/3D/A_RuntimeObject3DRenderer.js.map +2 -2
- package/dist/Runtime/Extensions/3D/AmbientLight.js +1 -1
- package/dist/Runtime/Extensions/3D/AmbientLight.js.map +2 -2
- package/dist/Runtime/Extensions/3D/Base3DBehavior.js +1 -1
- package/dist/Runtime/Extensions/3D/Base3DBehavior.js.map +2 -2
- package/dist/Runtime/Extensions/3D/BloomEffect.js +1 -1
- package/dist/Runtime/Extensions/3D/BloomEffect.js.map +2 -2
- package/dist/Runtime/Extensions/3D/BrightnessAndContrastEffect.js +1 -1
- package/dist/Runtime/Extensions/3D/BrightnessAndContrastEffect.js.map +2 -2
- package/dist/Runtime/Extensions/3D/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/3D/Cube3DRuntimeObject.js +1 -1
- package/dist/Runtime/Extensions/3D/Cube3DRuntimeObject.js.map +2 -2
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +2 -0
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +7 -0
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3DRenderer.js +2 -0
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3DRenderer.js.map +7 -0
- package/dist/Runtime/Extensions/3D/DirectionalLight.js +1 -1
- package/dist/Runtime/Extensions/3D/DirectionalLight.js.map +2 -2
- package/dist/Runtime/Extensions/3D/ExponentialFog.js +1 -1
- package/dist/Runtime/Extensions/3D/ExponentialFog.js.map +2 -2
- package/dist/Runtime/Extensions/3D/ExposureEffect.js +1 -1
- package/dist/Runtime/Extensions/3D/ExposureEffect.js.map +2 -2
- package/dist/Runtime/Extensions/3D/HemisphereLight.js +1 -1
- package/dist/Runtime/Extensions/3D/HemisphereLight.js.map +2 -2
- package/dist/Runtime/Extensions/3D/HueAndSaturationEffect.js +1 -1
- package/dist/Runtime/Extensions/3D/HueAndSaturationEffect.js.map +2 -2
- package/dist/Runtime/Extensions/3D/JsExtension.js +56 -24
- package/dist/Runtime/Extensions/3D/LinearFog.js +1 -1
- package/dist/Runtime/Extensions/3D/LinearFog.js.map +2 -2
- package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js +1 -1
- package/dist/Runtime/Extensions/3D/Model3DRuntimeObject.js.map +2 -2
- package/dist/Runtime/Extensions/3D/Model3DRuntimeObject3DRenderer.js +1 -1
- package/dist/Runtime/Extensions/3D/Model3DRuntimeObject3DRenderer.js.map +2 -2
- package/dist/Runtime/Extensions/AdMob/JsExtension.js +11 -10
- package/dist/Runtime/Extensions/AdMob/admobtools.js +1 -1
- package/dist/Runtime/Extensions/AdMob/admobtools.js.map +2 -2
- package/dist/Runtime/Extensions/AnchorBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/BBText/JsExtension.js +20 -11
- package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/BBText/bbtextruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/BitmapText/JsExtension.js +2 -8
- package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/CMakeLists.txt +35 -0
- package/dist/Runtime/Extensions/CMakeUtils.txt +81 -0
- package/dist/Runtime/Extensions/DestroyOutsideBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/DestroyOutsideBehavior/destroyoutsideruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/DialogueTree/bondage.js/version.txt +5 -0
- package/dist/Runtime/Extensions/DraggableBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/Effects/adjustment-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/adjustment-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/advanced-bloom-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/advanced-bloom-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/ascii-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/ascii-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/bevel-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/black-and-white-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/black-and-white-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/blending-mode-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/blending-mode-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/blur-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/blur-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/brightness-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/brightness-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/bulge-pinch-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/bulge-pinch-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/color-map-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/color-map-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/color-replace-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/crt-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/crt-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/displacement-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/displacement-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/dot-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/dot-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/drop-shadow-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/glitch-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/glitch-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/glow-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/godray-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/godray-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/hsl-adjustment-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/hsl-adjustment-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/kawase-blur-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/kawase-blur-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/light-night-pixi-filter.js +2 -2
- package/dist/Runtime/Extensions/Effects/light-night-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/motion-blur-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/motion-blur-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/night-pixi-filter.js +2 -2
- package/dist/Runtime/Extensions/Effects/night-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/noise-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/noise-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/old-film-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/old-film-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/outline-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/pixelate-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/pixelate-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/radial-blur-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/radial-blur-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/reflection-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/reflection-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/rgb-split-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/rgb-split-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/sepia-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/sepia-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/shockwave-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/shockwave-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/tilt-shift-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/tilt-shift-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/twist-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/twist-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/Effects/zoom-blur-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/zoom-blur-pixi-filter.js.map +2 -2
- package/dist/Runtime/Extensions/ExampleJsExtension/JsExtension.js +2 -11
- package/dist/Runtime/Extensions/ExampleJsExtension/dummyeffect.js +1 -1
- package/dist/Runtime/Extensions/ExampleJsExtension/dummyeffect.js.map +2 -2
- package/dist/Runtime/Extensions/FileSystem/JsExtension.js +22 -0
- package/dist/Runtime/Extensions/FileSystem/filesystemtools.js +1 -1
- package/dist/Runtime/Extensions/FileSystem/filesystemtools.js.map +2 -2
- package/dist/Runtime/Extensions/Firebase/A_firebasejs/NOTICE.txt +6 -0
- package/dist/Runtime/Extensions/Inventory/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +13 -4
- package/dist/Runtime/Extensions/Leaderboards/JsExtension.js +42 -1
- package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js +1 -1
- package/dist/Runtime/Extensions/Leaderboards/leaderboardstools.js.map +2 -2
- package/dist/Runtime/Extensions/Lighting/JsExtension.js +2 -11
- package/dist/Runtime/Extensions/Lighting/lightruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/Lighting/lightruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/LinkedObjects/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/LinkedObjects/linkedobjects.js +1 -1
- package/dist/Runtime/Extensions/LinkedObjects/linkedobjects.js.map +2 -2
- package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +1130 -0
- package/dist/Runtime/Extensions/Multiplayer/messageManager.js +2 -0
- package/dist/Runtime/Extensions/Multiplayer/messageManager.js.map +7 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayerVariablesManager.js +2 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayerVariablesManager.js.map +7 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js +2 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayercomponents.js.map +7 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +2 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +7 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js +2 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +7 -0
- package/dist/Runtime/Extensions/Multiplayer/peer.js +10 -0
- package/dist/Runtime/Extensions/Multiplayer/peer.js.map +1 -0
- package/dist/Runtime/Extensions/Multiplayer/peerJsHelper.js +2 -0
- package/dist/Runtime/Extensions/Multiplayer/peerJsHelper.js.map +7 -0
- package/dist/Runtime/Extensions/Multiplayer/peerjs.d.ts +509 -0
- package/dist/Runtime/Extensions/P2P/A_peer.js +8 -2
- package/dist/Runtime/Extensions/P2P/A_peer.js.map +1 -1
- package/dist/Runtime/Extensions/P2P/B_p2ptools.js +1 -1
- package/dist/Runtime/Extensions/P2P/B_p2ptools.js.map +2 -2
- package/dist/Runtime/Extensions/P2P/JsExtension.js +27 -0
- package/dist/Runtime/Extensions/PanelSpriteObject/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/ParticleSystem/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js +1 -1
- package/dist/Runtime/Extensions/ParticleSystem/particleemitterobject.js.map +2 -2
- package/dist/Runtime/Extensions/PathfindingBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/PathfindingBehavior/pathfindingruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/PathfindingBehavior/pathfindingruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +47 -4
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/PhysicsBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/PlatformBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/PlatformBehavior/platformerobjectruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/PlatformBehavior/platformerobjectruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/PlatformBehavior/platformruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/PlatformBehavior/platformruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/PlayerAuthentication/JsExtension.js +6 -3
- package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationcomponents.js +4 -4
- package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationcomponents.js.map +2 -2
- package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js +1 -1
- package/dist/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js.map +2 -2
- package/dist/Runtime/Extensions/PrimitiveDrawing/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/Shopify/CMakeLists.txt +26 -0
- package/dist/Runtime/Extensions/Spine/CMakeLists.txt +20 -0
- package/dist/Runtime/Extensions/Spine/JsExtension.js +11 -2
- package/dist/Runtime/Extensions/Spine/managers/pixi-spine-atlas-manager.js +1 -1
- package/dist/Runtime/Extensions/Spine/managers/pixi-spine-atlas-manager.js.map +2 -2
- package/dist/Runtime/Extensions/Spine/managers/pixi-spine-manager.js +1 -1
- package/dist/Runtime/Extensions/Spine/managers/pixi-spine-manager.js.map +2 -2
- package/dist/Runtime/Extensions/Spine/pixi-spine/Spine-Runtimes-License-Agreement.txt +11 -0
- package/dist/Runtime/Extensions/Spine/pixi-spine/pixi-spine.js +5 -3
- package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/SystemInfo/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/TextEntryObject/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/TextInput/JsExtension.js +3 -10
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TextObject/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/TextObject/textruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TextObject/textruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/JsExtension.js +834 -23
- package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js +1 -1
- package/dist/Runtime/Extensions/TileMap/TileMapRuntimeManager.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js +1 -1
- package/dist/Runtime/Extensions/TileMap/collision/TransformedTileMap.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.d.ts +2 -0
- package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/CommonTypes.d.ts +12 -0
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/CommonTypes.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts +119 -5
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts +25 -0
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapManager.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +16 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +2 -0
- package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +7 -0
- package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TiledSpriteObject/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TopDownMovementBehavior/CMakeLists.txt +23 -0
- package/dist/Runtime/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/TweenBehavior/JsExtension.js +2 -2
- package/dist/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Video/JsExtension.js +2 -11
- package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
- package/dist/Runtime/RuntimeInstanceContainer.js +1 -1
- package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
- package/dist/Runtime/SpriteAnimator.js +2 -0
- package/dist/Runtime/SpriteAnimator.js.map +7 -0
- package/dist/Runtime/debugger-client/hot-reloader.js +1 -1
- package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
- package/dist/Runtime/events-tools/objecttools.js +1 -1
- package/dist/Runtime/events-tools/objecttools.js.map +2 -2
- package/dist/Runtime/events-tools/runtimescenetools.js +1 -1
- package/dist/Runtime/events-tools/runtimescenetools.js.map +2 -2
- package/dist/Runtime/force.js +1 -1
- package/dist/Runtime/force.js.map +2 -2
- package/dist/Runtime/object-capabilities/TextContainerBehavior.js.map +1 -1
- package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +2 -0
- package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js.map +7 -0
- package/dist/Runtime/pixi-renderers/DebuggerPixiRenderer.js +1 -1
- package/dist/Runtime/pixi-renderers/DebuggerPixiRenderer.js.map +2 -2
- package/dist/Runtime/pixi-renderers/layer-pixi-renderer.js +2 -2
- package/dist/Runtime/pixi-renderers/layer-pixi-renderer.js.map +2 -2
- package/dist/Runtime/pixi-renderers/pixi-filters-tools.js +1 -1
- package/dist/Runtime/pixi-renderers/pixi-filters-tools.js.map +2 -2
- package/dist/Runtime/pixi-renderers/pixi-image-manager.js.map +2 -2
- package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js +1 -1
- package/dist/Runtime/pixi-renderers/runtimegame-pixi-renderer.js.map +2 -2
- package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/pixi-renderers/spriteruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/polygon.js +1 -1
- package/dist/Runtime/polygon.js.map +2 -2
- package/dist/Runtime/runtimebehavior.js +1 -1
- package/dist/Runtime/runtimebehavior.js.map +2 -2
- package/dist/Runtime/runtimegame.js +1 -1
- package/dist/Runtime/runtimegame.js.map +2 -2
- package/dist/Runtime/runtimeobject.js +1 -1
- package/dist/Runtime/runtimeobject.js.map +2 -2
- package/dist/Runtime/runtimescene.js +1 -1
- package/dist/Runtime/runtimescene.js.map +2 -2
- package/dist/Runtime/scenestack.js +1 -1
- package/dist/Runtime/scenestack.js.map +2 -2
- package/dist/Runtime/spriteruntimeobject.js +1 -1
- package/dist/Runtime/spriteruntimeobject.js.map +2 -2
- package/dist/Runtime/timer.js +1 -1
- package/dist/Runtime/timer.js.map +2 -2
- package/dist/Runtime/types/project-data.d.ts +115 -0
- package/dist/Runtime/variable.js +1 -1
- package/dist/Runtime/variable.js.map +2 -2
- package/dist/Runtime/variablescontainer.js +1 -1
- package/dist/Runtime/variablescontainer.js.map +2 -2
- package/dist/lib/libGD.cjs +2 -1
- package/dist/lib/libGD.wasm +0 -0
- package/dist/loaders.cjs +2 -1
- package/gd.d.ts +217 -223
- package/package.json +15 -7
- package/src/index.js +2 -0
- package/src/open_project.js +1 -1
- package/types/index.d.ts +2 -2
- package/types/open_project.d.ts +5 -5
- package/dist/Runtime/Extensions/Spine/pixi-spine/pixi-spine.js.map +0 -7
- package/dist/Runtime/pixi-renderers/CustomObjectPixiRenderer.js +0 -2
- package/dist/Runtime/pixi-renderers/CustomObjectPixiRenderer.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../GDevelop/Extensions/PlatformBehavior/platformruntimebehavior.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nGDevelop - Platform Behavior Extension\nCopyright (c) 2013-2016 Florian Rival (Florian.Rival@gmail.com)\n */\nnamespace gdjs {\n declare var rbush: any;\n type SearchArea = { minX: float; minY: float; maxX: float; maxY: float };\n\n /**\n * Manages the common objects shared by objects having a\n * platform behavior: in particular, the platforms behaviors are required to\n * declare themselves (see PlatformObjectsManager.addPlatform) to the manager\n * of their associated container (see PlatformRuntimeBehavior.getManager).\n */\n export class PlatformObjectsManager {\n private _platformRBush: any;\n\n constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n this._platformRBush = new rbush();\n }\n\n /**\n * Get the platforms manager of an instance container.\n */\n static getManager(instanceContainer: gdjs.RuntimeInstanceContainer) {\n // @ts-ignore\n if (!instanceContainer.platformsObjectsManager) {\n //Create the shared manager if necessary.\n // @ts-ignore\n instanceContainer.platformsObjectsManager = new gdjs.PlatformObjectsManager(\n instanceContainer\n );\n }\n // @ts-ignore\n return instanceContainer.platformsObjectsManager;\n }\n\n /**\n * Add a platform to the list of existing platforms.\n */\n addPlatform(platformBehavior: gdjs.PlatformRuntimeBehavior) {\n if (platformBehavior.currentRBushAABB)\n platformBehavior.currentRBushAABB.updateAABBFromOwner();\n else\n platformBehavior.currentRBushAABB = new gdjs.BehaviorRBushAABB(\n platformBehavior\n );\n this._platformRBush.insert(platformBehavior.currentRBushAABB);\n }\n\n /**\n * Remove a platform from the list of existing platforms. Be sure that the platform was\n * added before.\n */\n removePlatform(platformBehavior: gdjs.PlatformRuntimeBehavior) {\n this._platformRBush.remove(platformBehavior.currentRBushAABB);\n }\n\n /**\n * Returns all the platforms around the specified object.\n * @param maxMovementLength The maximum distance, in pixels, the object is going to do.\n * @return An array with all platforms near the object.\n */\n getAllPlatformsAround(\n object: gdjs.RuntimeObject,\n maxMovementLength: number,\n result: PlatformRuntimeBehavior[]\n ): any {\n // TODO: This would better be done using the object AABB (getAABB), as (`getCenterX`;`getCenterY`) point\n // is not necessarily in the middle of the object (for sprites for example).\n const ow = object.getWidth();\n const oh = object.getHeight();\n const x = object.getDrawableX() + object.getCenterX();\n const y = object.getDrawableY() + object.getCenterY();\n const searchArea: SearchArea = gdjs.staticObject(\n PlatformObjectsManager.prototype.getAllPlatformsAround\n ) as SearchArea;\n searchArea.minX = x - ow / 2 - maxMovementLength;\n searchArea.minY = y - oh / 2 - maxMovementLength;\n searchArea.maxX = x + ow / 2 + maxMovementLength;\n searchArea.maxY = y + oh / 2 + maxMovementLength;\n const nearbyPlatforms: gdjs.BehaviorRBushAABB<\n PlatformRuntimeBehavior\n >[] = this._platformRBush.search(searchArea);\n\n result.length = 0;\n\n // Extra check on the platform owner AABB\n // TODO: PR https://github.com/4ian/GDevelop/pull/2602 should remove the need\n // for this extra check once merged.\n for (let i = 0; i < nearbyPlatforms.length; i++) {\n const platform = nearbyPlatforms[i].behavior;\n const platformAABB = platform.owner.getAABB();\n const platformIsStillAround =\n platformAABB.min[0] <= searchArea.maxX &&\n platformAABB.min[1] <= searchArea.maxY &&\n platformAABB.max[0] >= searchArea.minX &&\n platformAABB.max[1] >= searchArea.minY;\n // Filter platforms that are not in the searched area anymore.\n // This can happen because platforms are not updated in the RBush before that\n // characters movement are being processed.\n if (platformIsStillAround) {\n result.push(platform);\n }\n }\n }\n }\n\n /**\n * PlatformRuntimeBehavior represents a behavior allowing objects to be\n * considered as a platform by objects having PlatformerObject Behavior.\n */\n export class PlatformRuntimeBehavior extends gdjs.RuntimeBehavior {\n //Load the platform type\n _platformType: integer;\n _canBeGrabbed: boolean;\n _yGrabOffset: float;\n\n //Note that we can't use getX(), getWidth()... of owner here: The owner is not fully constructed.\n _oldX: float = 0;\n _oldY: float = 0;\n _oldWidth: float = 0;\n _oldHeight: float = 0;\n _oldAngle: float = 0;\n currentRBushAABB: gdjs.BehaviorRBushAABB<\n PlatformRuntimeBehavior\n > | null = null;\n _manager: gdjs.PlatformObjectsManager;\n _registeredInManager: boolean = false;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject\n ) {\n super(instanceContainer, behaviorData, owner);\n this._platformType = behaviorData.platformType;\n if (behaviorData.platformType === 'Ladder') {\n this._platformType = PlatformRuntimeBehavior.LADDER;\n } else if (behaviorData.platformType === 'Jumpthru') {\n this._platformType = PlatformRuntimeBehavior.JUMPTHRU;\n } else {\n this._platformType = PlatformRuntimeBehavior.NORMALPLATFORM;\n }\n this._canBeGrabbed = behaviorData.canBeGrabbed || false;\n this._yGrabOffset = behaviorData.yGrabOffset || 0;\n this._manager = PlatformObjectsManager.getManager(instanceContainer);\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n if (oldBehaviorData.platformType !== newBehaviorData.platformType) {\n this.changePlatformType(newBehaviorData.platformType);\n }\n if (oldBehaviorData.canBeGrabbed !== newBehaviorData.canBeGrabbed) {\n this._canBeGrabbed = newBehaviorData.canBeGrabbed;\n }\n if (oldBehaviorData.yGrabOffset !== newBehaviorData.yGrabOffset) {\n this._yGrabOffset = newBehaviorData.yGrabOffset;\n }\n return true;\n }\n\n onDestroy() {\n if (this._manager && this._registeredInManager) {\n this._manager.removePlatform(this);\n }\n }\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {\n //Scene change is not supported\n /*if ( parentScene != &scene ) //Parent scene has changed\n {\n if ( sceneManager ) //Remove the object from any old scene manager.\n sceneManager->RemovePlatform(this);\n parentScene = &scene;\n sceneManager = parentScene ? &ScenePlatformObjectsManager::managers[&scene] : NULL;\n registeredInManager = false;\n }*/\n\n //Make sure the platform is or is not in the platforms manager.\n if (!this.activated() && this._registeredInManager) {\n this._manager.removePlatform(this);\n this._registeredInManager = false;\n } else {\n if (this.activated() && !this._registeredInManager) {\n this._manager.addPlatform(this);\n this._registeredInManager = true;\n }\n }\n\n //Track changes in size or position\n if (\n this._oldX !== this.owner.getX() ||\n this._oldY !== this.owner.getY() ||\n this._oldWidth !== this.owner.getWidth() ||\n this._oldHeight !== this.owner.getHeight() ||\n this._oldAngle !== this.owner.getAngle()\n ) {\n if (this._registeredInManager) {\n this._manager.removePlatform(this);\n this._manager.addPlatform(this);\n }\n this._oldX = this.owner.getX();\n this._oldY = this.owner.getY();\n this._oldWidth = this.owner.getWidth();\n this._oldHeight = this.owner.getHeight();\n this._oldAngle = this.owner.getAngle();\n }\n }\n\n doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n onActivate() {\n if (this._registeredInManager) {\n return;\n }\n this._manager.addPlatform(this);\n this._registeredInManager = true;\n }\n\n onDeActivate() {\n if (!this._registeredInManager) {\n return;\n }\n this._manager.removePlatform(this);\n this._registeredInManager = false;\n }\n\n changePlatformType(platformType: string) {\n if (platformType === 'Ladder') {\n this._platformType = PlatformRuntimeBehavior.LADDER;\n } else if (platformType === 'Jumpthru') {\n this._platformType = PlatformRuntimeBehavior.JUMPTHRU;\n } else {\n this._platformType = PlatformRuntimeBehavior.NORMALPLATFORM;\n }\n }\n\n getPlatformType() {\n return this._platformType;\n }\n\n canBeGrabbed() {\n return this._canBeGrabbed;\n }\n\n getYGrabOffset() {\n return this._yGrabOffset;\n }\n\n static NORMALPLATFORM = 0;\n /** @deprecated Use NORMALPLATFORM instead. */\n static NORMALPLAFTORM = PlatformRuntimeBehavior.NORMALPLATFORM;\n static JUMPTHRU = 1;\n static LADDER = 2;\n\n static isOnPlatformTest(\n object1: gdjs.RuntimeObject,\n object2: gdjs.RuntimeObject,\n behaviorName: string\n ): boolean {\n const behavior1 = object1.getBehavior(\n behaviorName\n ) as PlatformerObjectRuntimeBehavior;\n return behavior1.isOnFloorObject(object2);\n }\n }\n gdjs.registerBehavior(\n 'PlatformBehavior::PlatformBehavior',\n gdjs.PlatformRuntimeBehavior\n );\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/*\nGDevelop - Platform Behavior Extension\nCopyright (c) 2013-2016 Florian Rival (Florian.Rival@gmail.com)\n */\nnamespace gdjs {\n declare var rbush: any;\n type SearchArea = { minX: float; minY: float; maxX: float; maxY: float };\n\n /**\n * Manages the common objects shared by objects having a\n * platform behavior: in particular, the platforms behaviors are required to\n * declare themselves (see PlatformObjectsManager.addPlatform) to the manager\n * of their associated container (see PlatformRuntimeBehavior.getManager).\n */\n export class PlatformObjectsManager {\n private _platformRBush: any;\n\n constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n this._platformRBush = new rbush();\n }\n\n /**\n * Get the platforms manager of an instance container.\n */\n static getManager(instanceContainer: gdjs.RuntimeInstanceContainer) {\n // @ts-ignore\n if (!instanceContainer.platformsObjectsManager) {\n //Create the shared manager if necessary.\n // @ts-ignore\n instanceContainer.platformsObjectsManager = new gdjs.PlatformObjectsManager(\n instanceContainer\n );\n }\n // @ts-ignore\n return instanceContainer.platformsObjectsManager;\n }\n\n /**\n * Add a platform to the list of existing platforms.\n */\n addPlatform(platformBehavior: gdjs.PlatformRuntimeBehavior) {\n if (platformBehavior.currentRBushAABB)\n platformBehavior.currentRBushAABB.updateAABBFromOwner();\n else\n platformBehavior.currentRBushAABB = new gdjs.BehaviorRBushAABB(\n platformBehavior\n );\n this._platformRBush.insert(platformBehavior.currentRBushAABB);\n }\n\n /**\n * Remove a platform from the list of existing platforms. Be sure that the platform was\n * added before.\n */\n removePlatform(platformBehavior: gdjs.PlatformRuntimeBehavior) {\n this._platformRBush.remove(platformBehavior.currentRBushAABB);\n }\n\n /**\n * Returns all the platforms around the specified object.\n * @param maxMovementLength The maximum distance, in pixels, the object is going to do.\n * @return An array with all platforms near the object.\n */\n getAllPlatformsAround(\n object: gdjs.RuntimeObject,\n maxMovementLength: number,\n result: PlatformRuntimeBehavior[]\n ): any {\n // TODO: This would better be done using the object AABB (getAABB), as (`getCenterX`;`getCenterY`) point\n // is not necessarily in the middle of the object (for sprites for example).\n const ow = object.getWidth();\n const oh = object.getHeight();\n const x = object.getDrawableX() + object.getCenterX();\n const y = object.getDrawableY() + object.getCenterY();\n const searchArea: SearchArea = gdjs.staticObject(\n PlatformObjectsManager.prototype.getAllPlatformsAround\n ) as SearchArea;\n searchArea.minX = x - ow / 2 - maxMovementLength;\n searchArea.minY = y - oh / 2 - maxMovementLength;\n searchArea.maxX = x + ow / 2 + maxMovementLength;\n searchArea.maxY = y + oh / 2 + maxMovementLength;\n const nearbyPlatforms: gdjs.BehaviorRBushAABB<\n PlatformRuntimeBehavior\n >[] = this._platformRBush.search(searchArea);\n\n result.length = 0;\n\n // Extra check on the platform owner AABB\n // TODO: PR https://github.com/4ian/GDevelop/pull/2602 should remove the need\n // for this extra check once merged.\n for (let i = 0; i < nearbyPlatforms.length; i++) {\n const platform = nearbyPlatforms[i].behavior;\n const platformAABB = platform.owner.getAABB();\n const platformIsStillAround =\n platformAABB.min[0] <= searchArea.maxX &&\n platformAABB.min[1] <= searchArea.maxY &&\n platformAABB.max[0] >= searchArea.minX &&\n platformAABB.max[1] >= searchArea.minY;\n // Filter platforms that are not in the searched area anymore.\n // This can happen because platforms are not updated in the RBush before that\n // characters movement are being processed.\n if (platformIsStillAround) {\n result.push(platform);\n }\n }\n }\n }\n\n /**\n * PlatformRuntimeBehavior represents a behavior allowing objects to be\n * considered as a platform by objects having PlatformerObject Behavior.\n */\n export class PlatformRuntimeBehavior extends gdjs.RuntimeBehavior {\n //Load the platform type\n _platformType: integer;\n _canBeGrabbed: boolean;\n _yGrabOffset: float;\n\n //Note that we can't use getX(), getWidth()... of owner here: The owner is not fully constructed.\n _oldX: float = 0;\n _oldY: float = 0;\n _oldWidth: float = 0;\n _oldHeight: float = 0;\n _oldAngle: float = 0;\n currentRBushAABB: gdjs.BehaviorRBushAABB<\n PlatformRuntimeBehavior\n > | null = null;\n _manager: gdjs.PlatformObjectsManager;\n _registeredInManager: boolean = false;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n behaviorData,\n owner: gdjs.RuntimeObject\n ) {\n super(instanceContainer, behaviorData, owner);\n this._platformType = behaviorData.platformType;\n if (behaviorData.platformType === 'Ladder') {\n this._platformType = PlatformRuntimeBehavior.LADDER;\n } else if (behaviorData.platformType === 'Jumpthru') {\n this._platformType = PlatformRuntimeBehavior.JUMPTHRU;\n } else {\n this._platformType = PlatformRuntimeBehavior.NORMALPLATFORM;\n }\n this._canBeGrabbed = behaviorData.canBeGrabbed || false;\n this._yGrabOffset = behaviorData.yGrabOffset || 0;\n this._manager = PlatformObjectsManager.getManager(instanceContainer);\n }\n\n updateFromBehaviorData(oldBehaviorData, newBehaviorData): boolean {\n if (oldBehaviorData.platformType !== newBehaviorData.platformType) {\n this.changePlatformType(newBehaviorData.platformType);\n }\n if (oldBehaviorData.canBeGrabbed !== newBehaviorData.canBeGrabbed) {\n this._canBeGrabbed = newBehaviorData.canBeGrabbed;\n }\n if (oldBehaviorData.yGrabOffset !== newBehaviorData.yGrabOffset) {\n this._yGrabOffset = newBehaviorData.yGrabOffset;\n }\n return true;\n }\n\n onDestroy() {\n if (this._manager && this._registeredInManager) {\n this._manager.removePlatform(this);\n }\n }\n\n doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {\n //Scene change is not supported\n /*if ( parentScene != &scene ) //Parent scene has changed\n {\n if ( sceneManager ) //Remove the object from any old scene manager.\n sceneManager->RemovePlatform(this);\n parentScene = &scene;\n sceneManager = parentScene ? &ScenePlatformObjectsManager::managers[&scene] : NULL;\n registeredInManager = false;\n }*/\n\n //Make sure the platform is or is not in the platforms manager.\n if (!this.activated() && this._registeredInManager) {\n this._manager.removePlatform(this);\n this._registeredInManager = false;\n } else {\n if (this.activated() && !this._registeredInManager) {\n this._manager.addPlatform(this);\n this._registeredInManager = true;\n }\n }\n\n //Track changes in size or position\n if (\n this._oldX !== this.owner.getX() ||\n this._oldY !== this.owner.getY() ||\n this._oldWidth !== this.owner.getWidth() ||\n this._oldHeight !== this.owner.getHeight() ||\n this._oldAngle !== this.owner.getAngle()\n ) {\n if (this._registeredInManager) {\n this._manager.removePlatform(this);\n this._manager.addPlatform(this);\n }\n this._oldX = this.owner.getX();\n this._oldY = this.owner.getY();\n this._oldWidth = this.owner.getWidth();\n this._oldHeight = this.owner.getHeight();\n this._oldAngle = this.owner.getAngle();\n }\n }\n\n doStepPostEvents(instanceContainer: gdjs.RuntimeInstanceContainer) {}\n\n onActivate() {\n if (this._registeredInManager) {\n return;\n }\n this._manager.addPlatform(this);\n this._registeredInManager = true;\n }\n\n onDeActivate() {\n if (!this._registeredInManager) {\n return;\n }\n this._manager.removePlatform(this);\n this._registeredInManager = false;\n }\n\n changePlatformType(platformType: string) {\n if (platformType === 'Ladder') {\n this._platformType = PlatformRuntimeBehavior.LADDER;\n } else if (platformType === 'Jumpthru') {\n this._platformType = PlatformRuntimeBehavior.JUMPTHRU;\n } else {\n this._platformType = PlatformRuntimeBehavior.NORMALPLATFORM;\n }\n }\n\n getPlatformType() {\n return this._platformType;\n }\n\n canBeGrabbed() {\n return this._canBeGrabbed;\n }\n\n getYGrabOffset() {\n return this._yGrabOffset;\n }\n\n static NORMALPLATFORM = 0;\n /** @deprecated Use NORMALPLATFORM instead. */\n static NORMALPLAFTORM = PlatformRuntimeBehavior.NORMALPLATFORM;\n static JUMPTHRU = 1;\n static LADDER = 2;\n\n static isOnPlatformTest(\n object1: gdjs.RuntimeObject,\n object2: gdjs.RuntimeObject,\n behaviorName: string\n ): boolean {\n const behavior1 = object1.getBehavior(\n behaviorName\n ) as PlatformerObjectRuntimeBehavior;\n if (!behavior1) {\n return false;\n }\n return behavior1.isOnFloorObject(object2);\n }\n }\n gdjs.registerBehavior(\n 'PlatformBehavior::PlatformBehavior',\n gdjs.PlatformRuntimeBehavior\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -33,9 +33,9 @@ module.exports = {
|
|
|
33
33
|
|
|
34
34
|
extension
|
|
35
35
|
.addDependency()
|
|
36
|
-
.setName('
|
|
36
|
+
.setName('Safari View Controller Cordova plugin')
|
|
37
37
|
.setDependencyType('cordova')
|
|
38
|
-
.setExportName('cordova-plugin-
|
|
38
|
+
.setExportName('cordova-plugin-safariviewcontroller');
|
|
39
39
|
|
|
40
40
|
extension
|
|
41
41
|
.addAction(
|
|
@@ -100,7 +100,10 @@ module.exports = {
|
|
|
100
100
|
.addIncludeFile(
|
|
101
101
|
'Extensions/PlayerAuthentication/playerauthenticationtools.js'
|
|
102
102
|
)
|
|
103
|
-
.setFunctionName('gdjs.playerAuthentication.openAuthenticationWindow')
|
|
103
|
+
.setFunctionName('gdjs.playerAuthentication.openAuthenticationWindow')
|
|
104
|
+
.setAsyncFunctionName(
|
|
105
|
+
'gdjs.playerAuthentication.openAuthenticationWindow'
|
|
106
|
+
);
|
|
104
107
|
|
|
105
108
|
extension
|
|
106
109
|
.addCondition(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var gdjs;(function(y){const d=new y.Logger("Player Authentication");let m;(function(s){const u=({platform:
|
|
2
|
-
Logged as ${e}`,c.style.margin="0px";const a=document.createElement("p");return a.id="changeAccountText",a.innerText="Click here to switch to another account.",a.style.margin="0px",a.style.marginTop="4px",a.style.textDecoration="underline",a.style.cursor="pointer",r(a,
|
|
3
|
-
Logged as ${t}`,"success")},s.displayLoggedOutNotification=function(
|
|
4
|
-
Logged out`,"success")},s.displayErrorNotification=function(
|
|
1
|
+
var gdjs;(function(y){const d=new y.Logger("Player Authentication");let m;(function(s){const u=({platform:n,isGameRegistered:t})=>t?{title:"Logging in...",text1:n==="cordova-websocket"?"One moment, we're opening a window for you to log in.":"One moment, we're opening a new page with your web browser for you to log in.",text2:n==="cordova-websocket"?"":"If the window did not open, please check your pop-up blocker and click the button below to try again."}:{title:"Publish your game!",text1:"GDevelop's player accounts are only available for published games.",text2:"Click the button below to learn how to publish your game then try again."};s.computeAuthenticationContainer=function(n){const t=document.createElement("div");t.id="authentication-root-container",t.style.position="relative",t.style.backgroundColor="rgba(14, 6, 45, 0.5)",t.style.opacity="1",t.style.width="100%",t.style.height="100%",t.style.zIndex="2",t.style.pointerEvents="all";const i=document.createElement("div");i.id="authentication-frame-container",i.style.backgroundColor="#FFFFFF",i.style.position="absolute",i.style.top="16px",i.style.bottom="16px",i.style.left="16px",i.style.right="16px",i.style.borderRadius="8px",i.style.boxShadow="0px 4px 4px rgba(0, 0, 0, 0.25)",i.style.padding="16px";const l=document.createElement("div");l.style.cursor="pointer",l.style.display="flex",l.style.justifyContent="right",l.style.alignItems="center",l.style.zIndex="3",r(l,n);const e=document.createElement("img");e.setAttribute("width","15px"),e.setAttribute("src","data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuODUzNTUgMC4xNDY0NDdDOC4wNDg4MiAwLjM0MTcwOSA4LjA0ODgyIDAuNjU4MjkxIDcuODUzNTUgMC44NTM1NTNMMC44NTM1NTMgNy44NTM1NUMwLjY1ODI5MSA4LjA0ODgyIDAuMzQxNzA5IDguMDQ4ODIgMC4xNDY0NDcgNy44NTM1NUMtMC4wNDg4MTU1IDcuNjU4MjkgLTAuMDQ4ODE1NSA3LjM0MTcxIDAuMTQ2NDQ3IDcuMTQ2NDVMNy4xNDY0NSAwLjE0NjQ0N0M3LjM0MTcxIC0wLjA0ODgxNTUgNy42NTgyOSAtMC4wNDg4MTU1IDcuODUzNTUgMC4xNDY0NDdaIiBmaWxsPSIjMUQxRDI2Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMC4xNDY0NDcgMC4xNDY0NDdDMC4zNDE3MDkgLTAuMDQ4ODE1NSAwLjY1ODI5MSAtMC4wNDg4MTU1IDAuODUzNTUzIDAuMTQ2NDQ3TDcuODUzNTUgNy4xNDY0NUM4LjA0ODgyIDcuMzQxNzEgOC4wNDg4MiA3LjY1ODI5IDcuODUzNTUgNy44NTM1NUM3LjY1ODI5IDguMDQ4ODIgNy4zNDE3MSA4LjA0ODgyIDcuMTQ2NDUgNy44NTM1NUwwLjE0NjQ0NyAwLjg1MzU1M0MtMC4wNDg4MTU1IDAuNjU4MjkxIC0wLjA0ODgxNTUgMC4zNDE3MDkgMC4xNDY0NDcgMC4xNDY0NDdaIiBmaWxsPSIjMUQxRDI2Ii8+Cjwvc3ZnPgo="),l.appendChild(e);const o=document.createElement("div");o.id="authentication-container-loader",o.style.display="flex",o.style.flexDirection="column",o.style.height="100%",o.style.width="100%",o.style.justifyContent="center",o.style.alignItems="center";const c=document.createElement("img");c.setAttribute("width","28px"),c.setAttribute("src","data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iYW5pbWF0ZS1zcGluIC1tbC0xIG1yLTMgaC01IHctNSB0ZXh0LXdoaXRlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CjxjaXJjbGUgb3BhY2l0eT0nMC4yNScgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSI0Ij48L2NpcmNsZT4KPHBhdGggb3BhY2l0eT0nMC43NScgZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6bTIgNS4yOTFBNy45NjIgNy45NjIgMCAwMTQgMTJIMGMwIDMuMDQyIDEuMTM1IDUuODI0IDMgNy45MzhsMy0yLjY0N3oiPjwvcGF0aD4KPC9zdmc+"),c.style.marginTop="50px";try{c.animate([{transform:"rotate(0deg)"},{transform:"rotate(359deg)"}],{duration:3e3,iterations:1/0})}catch{d.warn("Animation not supported, loader will be fixed.")}o.appendChild(c);const a=document.createElement("div");return a.style.display="flex",a.style.flexDirection="column",a.style.height="100%",a.style.width="100%",a.style.justifyContent="stretch",a.style.alignItems="stretch",a.style.display="none",i.appendChild(l),i.appendChild(o),i.appendChild(a),t.appendChild(i),{rootContainer:t,loaderContainer:o,iframeContainer:a}},s.displayIframeInsideAuthenticationContainer=(n,t,i,l)=>{const e=document.createElement("iframe");e.setAttribute("sandbox","allow-forms allow-modals allow-orientation-lock allow-popups allow-same-origin allow-scripts"),e.addEventListener("load",()=>{n.style.display="flex",t.style.display="none"}),e.addEventListener("loaderror",()=>{s.addAuthenticationUrlToTextsContainer(()=>{n.removeChild(e),n.style.display="none",t.style.display="flex",s.displayIframeInsideAuthenticationContainer(n,t,i,l)},i)}),e.src=l,e.style.flex="1",e.style.border="0",n.appendChild(e)},s.addAuthenticationTextsToLoadingContainer=(n,t,i,l)=>{const e=document.createElement("div");e.id="authentication-container-texts",e.style.display="flex",e.style.flexDirection="column",e.style.width="100%",e.style.justifyContent="center",e.style.alignItems="center",e.style.position="relative",e.style.zIndex="3",e.style.fontSize="11pt",e.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"';const o=u({platform:t,isGameRegistered:i}),c=document.createElement("h1");c.innerText=o.title,c.style.fontSize="20pt",c.style.fontWeight="bold";const a=document.createElement("p");a.innerText=o.text1;const D=document.createElement("p");if(D.innerText=o.text2,e.appendChild(c),e.appendChild(a),e.appendChild(D),!i&&(n.innerHTML="",l)){const M=document.createElement("a");r(M,l),M.innerText="How to publish my game",M.style.color="#0078d4",M.style.textDecoration="none",M.style.textDecoration="underline",M.style.cursor="pointer",e.appendChild(M)}return n.prepend(e),e},s.addAuthenticationUrlToTextsContainer=(n,t)=>{const i=document.createElement("a");r(i,n),i.innerText="Try again",i.style.color="#0078d4",i.style.textDecoration="none",i.style.textDecoration="underline",i.style.cursor="pointer",t.appendChild(i)},s.computeDismissableBanner=function(n){const t=document.createElement("div");t.id="authenticated-banner",t.style.position="absolute",t.style.pointerEvents="all",t.style.backgroundColor="#0E062D",t.style.top="0px",t.style.height="48px",t.style.left="0px",t.style.width="100%",t.style.padding="6px 16px",t.style.zIndex="1",t.style.display="flex",t.style.flexDirection="row-reverse",t.style.justifyContent="space-between",t.style.alignItems="center",t.style.boxShadow="0px 4px 4px rgba(0, 0, 0, 0.25)",t.style.fontSize="11pt",t.style.color="#FFFFFF",t.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"';const i=document.createElement("div");i.style.cursor="pointer",i.style.display="flex",i.style.justifyContent="center",i.style.alignItems="center",i.style.zIndex="3",i.style.marginRight="32px",i.style.height="100%",r(i,n);const l=document.createElement("img");return l.setAttribute("width","30px"),l.setAttribute("src","data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjc1IDguMDEyNUwyMS45ODc1IDYuMjVMMTUgMTMuMjM3NUw4LjAxMjUgNi4yNUw2LjI1IDguMDEyNUwxMy4yMzc1IDE1TDYuMjUgMjEuOTg3NUw4LjAxMjUgMjMuNzVMMTUgMTYuNzYyNUwyMS45ODc1IDIzLjc1TDIzLjc1IDIxLjk4NzVMMTYuNzYyNSAxNUwyMy43NSA4LjAxMjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"),i.appendChild(l),t.appendChild(i),t},s.computeAuthenticatedBanner=function(n,t,i){const l=s.computeDismissableBanner(t),e=i||"Anonymous",o=document.createElement("div"),c=document.createElement("p");c.id="loggedText",c.innerHTML=`<img style="margin-right:4px" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K" />
|
|
2
|
+
Logged as ${e}`,c.style.margin="0px";const a=document.createElement("p");return a.id="changeAccountText",a.innerText="Click here to switch to another account.",a.style.margin="0px",a.style.marginTop="4px",a.style.textDecoration="underline",a.style.cursor="pointer",r(a,n),o.appendChild(c),o.appendChild(a),l.appendChild(o),l},s.computeNotAuthenticatedBanner=function(n,t){const i=s.computeDismissableBanner(t),l=document.createElement("div"),e=document.createElement("p");e.id="loggedText",e.innerHTML="You are not authenticated.",e.style.margin="0px";const o=document.createElement("p");return o.id="changeAccountText",o.innerText="Click here to log in.",o.style.margin="0px",o.style.marginTop="4px",o.style.textDecoration="underline",o.style.cursor="pointer",r(o,n),l.appendChild(e),l.appendChild(o),i.appendChild(l),i},s.displayLoggedInNotification=function(n,t){s.showNotification(n,"authenticated-notification",`<img style="margin-right:4px" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K" />
|
|
3
|
+
Logged as ${t}`,"success")},s.displayLoggedOutNotification=function(n){s.showNotification(n,"authenticated-notification",`<img style="margin-right:4px" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K" />
|
|
4
|
+
Logged out`,"success")},s.displayErrorNotification=function(n){s.showNotification(n,"error-notification","An error occurred while authenticating, please try again.","error")},s.showNotification=function(n,t,i,l){const e=document.createElement("div");e.id=t,e.style.position="absolute",e.style.pointerEvents="all",e.style.backgroundColor=l==="success"?"#0E062D":"red",e.style.top="12px",e.style.right="16px",e.style.padding="6px 32px 6px 6px",e.style.zIndex="1",e.style.display="flex",e.style.flexDirection="row-reverse",e.style.justifyContent="space-between",e.style.alignItems="center",e.style.boxShadow="0px 4px 4px rgba(0, 0, 0, 0.25)",e.style.borderRadius="4px",e.style.fontSize="11pt",e.style.color="#FFFFFF",e.style.fontFamily='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"';try{e.animate([{transform:"translateY(-30px)",opacity:0},{transform:"translateY(0px)",opacity:1}],{duration:700,easing:"ease-out"})}catch{d.warn("Animation not supported, div will be fixed.")}const o=document.createElement("p");o.id="loggedText",o.innerHTML=i,o.style.margin="0px",e.appendChild(o),n.appendChild(e);const c=700,a=5e3;setTimeout(()=>{try{e.animate([{transform:"translateY(0px)",opacity:1},{transform:"translateY(-30px)",opacity:0}],{duration:c,easing:"ease-in"})}catch{d.warn("Animation not supported, div will be fixed.")}},a),setTimeout(()=>{e.remove()},a+c)};const r=function(n,t){n.addEventListener("touchstart",i=>{t()}),n.addEventListener("click",i=>{t()})}})(m=y.playerAuthenticationComponents||(y.playerAuthenticationComponents={}))})(gdjs||(gdjs={}));
|
|
5
5
|
//# sourceMappingURL=playerauthenticationcomponents.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../GDevelop/Extensions/PlayerAuthentication/playerauthenticationcomponents.ts"],
|
|
4
|
-
"sourcesContent": ["namespace gdjs {\n const logger = new gdjs.Logger('Player Authentication');\n export namespace playerAuthenticationComponents {\n const getPlayerLoginMessages = ({\n platform,\n isGameRegistered,\n }: {\n platform: 'cordova' | 'electron' | 'web';\n isGameRegistered: boolean;\n }) =>\n isGameRegistered\n ? {\n title: 'Logging in...',\n text1:\n platform === 'cordova'\n ? \"One moment, we're opening a window for you to log in.\"\n : \"One moment, we're opening a new page with your web browser for you to log in.\",\n text2:\n 'If the window did not open, please check your pop-up blocker and click the button below to try again.',\n }\n : {\n title: 'Publish your game!',\n text1:\n \"GDevelop's player accounts are only available for published games.\",\n text2:\n 'Click the button below to learn how to publish your game then try again.',\n };\n\n /**\n * Creates a DOM element that will contain the loader or a message if the game is not registered.\n */\n export const computeAuthenticationContainer = function (\n onCloseAuthenticationContainer: () => void\n ): {\n rootContainer: HTMLDivElement;\n loaderContainer: HTMLDivElement;\n iframeContainer: HTMLDivElement;\n } {\n const rootContainer = document.createElement('div');\n rootContainer.id = 'authentication-root-container';\n rootContainer.style.position = 'relative';\n rootContainer.style.backgroundColor = 'rgba(14, 6, 45, 0.5)';\n rootContainer.style.opacity = '1';\n rootContainer.style.width = '100%';\n rootContainer.style.height = '100%';\n rootContainer.style.zIndex = '2';\n rootContainer.style.pointerEvents = 'all';\n\n const frameContainer = document.createElement('div');\n frameContainer.id = 'authentication-frame-container';\n frameContainer.style.backgroundColor = '#FFFFFF';\n frameContainer.style.position = 'absolute';\n frameContainer.style.top = '16px';\n frameContainer.style.bottom = '16px';\n frameContainer.style.left = '16px';\n frameContainer.style.right = '16px';\n frameContainer.style.borderRadius = '8px';\n frameContainer.style.boxShadow = '0px 4px 4px rgba(0, 0, 0, 0.25)';\n frameContainer.style.padding = '16px';\n\n const _closeContainer: HTMLDivElement = document.createElement('div');\n _closeContainer.style.cursor = 'pointer';\n _closeContainer.style.display = 'flex';\n _closeContainer.style.justifyContent = 'right';\n _closeContainer.style.alignItems = 'center';\n _closeContainer.style.zIndex = '3';\n addTouchAndClickEventListeners(\n _closeContainer,\n onCloseAuthenticationContainer\n );\n\n const _close = document.createElement('img');\n _close.setAttribute('width', '15px');\n _close.setAttribute(\n 'src',\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuODUzNTUgMC4xNDY0NDdDOC4wNDg4MiAwLjM0MTcwOSA4LjA0ODgyIDAuNjU4MjkxIDcuODUzNTUgMC44NTM1NTNMMC44NTM1NTMgNy44NTM1NUMwLjY1ODI5MSA4LjA0ODgyIDAuMzQxNzA5IDguMDQ4ODIgMC4xNDY0NDcgNy44NTM1NUMtMC4wNDg4MTU1IDcuNjU4MjkgLTAuMDQ4ODE1NSA3LjM0MTcxIDAuMTQ2NDQ3IDcuMTQ2NDVMNy4xNDY0NSAwLjE0NjQ0N0M3LjM0MTcxIC0wLjA0ODgxNTUgNy42NTgyOSAtMC4wNDg4MTU1IDcuODUzNTUgMC4xNDY0NDdaIiBmaWxsPSIjMUQxRDI2Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMC4xNDY0NDcgMC4xNDY0NDdDMC4zNDE3MDkgLTAuMDQ4ODE1NSAwLjY1ODI5MSAtMC4wNDg4MTU1IDAuODUzNTUzIDAuMTQ2NDQ3TDcuODUzNTUgNy4xNDY0NUM4LjA0ODgyIDcuMzQxNzEgOC4wNDg4MiA3LjY1ODI5IDcuODUzNTUgNy44NTM1NUM3LjY1ODI5IDguMDQ4ODIgNy4zNDE3MSA4LjA0ODgyIDcuMTQ2NDUgNy44NTM1NUwwLjE0NjQ0NyAwLjg1MzU1M0MtMC4wNDg4MTU1IDAuNjU4MjkxIC0wLjA0ODgxNTUgMC4zNDE3MDkgMC4xNDY0NDcgMC4xNDY0NDdaIiBmaWxsPSIjMUQxRDI2Ii8+Cjwvc3ZnPgo='\n );\n _closeContainer.appendChild(_close);\n\n const loaderContainer: HTMLDivElement = document.createElement('div');\n loaderContainer.id = 'authentication-container-loader';\n loaderContainer.style.display = 'flex';\n loaderContainer.style.flexDirection = 'column';\n loaderContainer.style.height = '100%';\n loaderContainer.style.width = '100%';\n loaderContainer.style.justifyContent = 'center';\n loaderContainer.style.alignItems = 'center';\n\n const _loader = document.createElement('img');\n _loader.setAttribute('width', '28px');\n _loader.setAttribute(\n 'src',\n 'data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iYW5pbWF0ZS1zcGluIC1tbC0xIG1yLTMgaC01IHctNSB0ZXh0LXdoaXRlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CjxjaXJjbGUgb3BhY2l0eT0nMC4yNScgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSI0Ij48L2NpcmNsZT4KPHBhdGggb3BhY2l0eT0nMC43NScgZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6bTIgNS4yOTFBNy45NjIgNy45NjIgMCAwMTQgMTJIMGMwIDMuMDQyIDEuMTM1IDUuODI0IDMgNy45MzhsMy0yLjY0N3oiPjwvcGF0aD4KPC9zdmc+'\n );\n _loader.style.marginTop = '50px';\n try {\n _loader.animate(\n [{ transform: 'rotate(0deg)' }, { transform: 'rotate(359deg)' }],\n {\n duration: 3000,\n iterations: Infinity,\n }\n );\n } catch {\n logger.warn('Animation not supported, loader will be fixed.');\n }\n\n loaderContainer.appendChild(_loader);\n\n const iframeContainer: HTMLDivElement = document.createElement('div');\n iframeContainer.style.display = 'flex';\n iframeContainer.style.flexDirection = 'column';\n iframeContainer.style.height = '100%';\n iframeContainer.style.width = '100%';\n iframeContainer.style.justifyContent = 'stretch';\n iframeContainer.style.alignItems = 'stretch';\n iframeContainer.style.display = 'none';\n\n frameContainer.appendChild(_closeContainer);\n frameContainer.appendChild(loaderContainer);\n frameContainer.appendChild(iframeContainer);\n rootContainer.appendChild(frameContainer);\n\n return { rootContainer, loaderContainer, iframeContainer };\n };\n\n export const displayIframeInsideAuthenticationContainer = (\n iframeContainer: HTMLDivElement,\n loaderContainer: HTMLDivElement,\n textContainer: HTMLDivElement,\n url: string\n ) => {\n const iframe = document.createElement('iframe');\n iframe.setAttribute(\n 'sandbox',\n 'allow-forms allow-modals allow-orientation-lock allow-popups allow-same-origin allow-scripts'\n );\n iframe.addEventListener('load', () => {\n iframeContainer.style.display = 'flex';\n loaderContainer.style.display = 'none';\n });\n iframe.addEventListener('loaderror', () => {\n addAuthenticationUrlToTextsContainer(() => {\n // Try again.\n iframeContainer.removeChild(iframe);\n iframeContainer.style.display = 'none';\n loaderContainer.style.display = 'flex';\n displayIframeInsideAuthenticationContainer(\n iframeContainer,\n loaderContainer,\n textContainer,\n url\n );\n }, textContainer);\n });\n iframe.src = url;\n iframe.style.flex = '1';\n iframe.style.border = '0';\n\n iframeContainer.appendChild(iframe);\n };\n\n /**\n * Helper to add the texts to the authentication container\n * based on the platform or if the game is registered.\n */\n export const addAuthenticationTextsToLoadingContainer = (\n loaderContainer: HTMLDivElement,\n platform,\n isGameRegistered,\n wikiOpenAction\n ) => {\n const textContainer: HTMLDivElement = document.createElement('div');\n textContainer.id = 'authentication-container-texts';\n textContainer.style.display = 'flex';\n textContainer.style.flexDirection = 'column';\n textContainer.style.width = '100%';\n textContainer.style.justifyContent = 'center';\n textContainer.style.alignItems = 'center';\n textContainer.style.position = 'relative';\n textContainer.style.zIndex = '3';\n textContainer.style.fontSize = '11pt';\n textContainer.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n\n const messages = getPlayerLoginMessages({\n platform,\n isGameRegistered,\n });\n const title = document.createElement('h1');\n title.innerText = messages.title;\n title.style.fontSize = '20pt';\n title.style.fontWeight = 'bold';\n const text1 = document.createElement('p');\n text1.innerText = messages.text1;\n const text2 = document.createElement('p');\n text2.innerText = messages.text2;\n textContainer.appendChild(title);\n textContainer.appendChild(text1);\n textContainer.appendChild(text2);\n\n if (!isGameRegistered) {\n // Remove the loader and add the wiki link.\n loaderContainer.innerHTML = '';\n\n if (wikiOpenAction) {\n const link = document.createElement('a');\n addTouchAndClickEventListeners(link, wikiOpenAction);\n link.innerText = 'How to publish my game';\n link.style.color = '#0078d4';\n link.style.textDecoration = 'none';\n link.style.textDecoration = 'underline';\n link.style.cursor = 'pointer';\n\n textContainer.appendChild(link);\n }\n }\n\n loaderContainer.prepend(textContainer);\n\n return textContainer;\n };\n\n /**\n * Helper to add the authentication link in case the window hasn't opened properly.\n * Useful for Electron & Web platforms.\n */\n export const addAuthenticationUrlToTextsContainer = (\n onClick: () => void,\n textContainer: HTMLDivElement\n ) => {\n const link = document.createElement('a');\n addTouchAndClickEventListeners(link, onClick);\n link.innerText = 'Try again';\n link.style.color = '#0078d4';\n link.style.textDecoration = 'none';\n link.style.textDecoration = 'underline';\n link.style.cursor = 'pointer';\n\n textContainer.appendChild(link);\n };\n\n /**\n * Creates a DOM element to display a dismissable banner.\n */\n export const computeDismissableBanner = function (\n onDismissBanner: () => void\n ): HTMLDivElement {\n const divContainer = document.createElement('div');\n\n divContainer.id = 'authenticated-banner';\n divContainer.style.position = 'absolute';\n divContainer.style.pointerEvents = 'all';\n divContainer.style.backgroundColor = '#0E062D';\n divContainer.style.top = '0px';\n divContainer.style.height = '48px';\n divContainer.style.left = '0px';\n divContainer.style.width = '100%';\n divContainer.style.padding = '6px 16px';\n // Use zIndex 1 to make sure it is below the authentication iframe or webview.\n divContainer.style.zIndex = '1';\n divContainer.style.display = 'flex';\n divContainer.style.flexDirection = 'row-reverse';\n divContainer.style.justifyContent = 'space-between';\n divContainer.style.alignItems = 'center';\n divContainer.style.boxShadow = '0px 4px 4px rgba(0, 0, 0, 0.25)';\n divContainer.style.fontSize = '11pt';\n divContainer.style.color = '#FFFFFF';\n divContainer.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n\n const _closeContainer: HTMLDivElement = document.createElement('div');\n _closeContainer.style.cursor = 'pointer';\n _closeContainer.style.display = 'flex';\n _closeContainer.style.justifyContent = 'center';\n _closeContainer.style.alignItems = 'center';\n _closeContainer.style.zIndex = '3';\n _closeContainer.style.marginRight = '32px';\n _closeContainer.style.height = '100%';\n addTouchAndClickEventListeners(_closeContainer, onDismissBanner);\n\n const _close = document.createElement('img');\n _close.setAttribute('width', '30px');\n _close.setAttribute(\n 'src',\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjc1IDguMDEyNUwyMS45ODc1IDYuMjVMMTUgMTMuMjM3NUw4LjAxMjUgNi4yNUw2LjI1IDguMDEyNUwxMy4yMzc1IDE1TDYuMjUgMjEuOTg3NUw4LjAxMjUgMjMuNzVMMTUgMTYuNzYyNUwyMS45ODc1IDIzLjc1TDIzLjc1IDIxLjk4NzVMMTYuNzYyNSAxNUwyMy43NSA4LjAxMjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K'\n );\n\n _closeContainer.appendChild(_close);\n divContainer.appendChild(_closeContainer);\n\n return divContainer;\n };\n\n /**\n * Creates a DOM element representing a banner for the user to know which account\n * they're using and also to allow switching to another account.\n */\n export const computeAuthenticatedBanner = function (\n onOpenAuthenticationWindow: () => void,\n onDismissBanner: () => void,\n username: string | null\n ): HTMLDivElement {\n const divContainer = computeDismissableBanner(onDismissBanner);\n\n const playerUsername = username || 'Anonymous';\n\n const _textContainer: HTMLDivElement = document.createElement('div');\n const loggedText = document.createElement('p');\n loggedText.id = 'loggedText';\n loggedText.innerHTML = `<img style=\"margin-right:4px\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K\" />\n Logged as ${playerUsername}`;\n loggedText.style.margin = '0px';\n\n const changeAccountText = document.createElement('p');\n changeAccountText.id = 'changeAccountText';\n changeAccountText.innerText = `Click here to switch to another account.`;\n changeAccountText.style.margin = '0px';\n changeAccountText.style.marginTop = '4px';\n changeAccountText.style.textDecoration = 'underline';\n changeAccountText.style.cursor = 'pointer';\n addTouchAndClickEventListeners(\n changeAccountText,\n onOpenAuthenticationWindow\n );\n\n _textContainer.appendChild(loggedText);\n _textContainer.appendChild(changeAccountText);\n divContainer.appendChild(_textContainer);\n\n return divContainer;\n };\n\n /**\n * Creates a DOM element representing a banner for the user to know\n * they are not connected and to allow logging in.\n */\n export const computeNotAuthenticatedBanner = function (\n onOpenAuthenticationWindow: () => void,\n onDismissBanner: () => void\n ): HTMLDivElement {\n const divContainer = computeDismissableBanner(onDismissBanner);\n\n const _textContainer: HTMLDivElement = document.createElement('div');\n const loggedText = document.createElement('p');\n loggedText.id = 'loggedText';\n loggedText.innerHTML = `You are not authenticated.`;\n loggedText.style.margin = '0px';\n\n const changeAccountText = document.createElement('p');\n changeAccountText.id = 'changeAccountText';\n changeAccountText.innerText = `Click here to log in.`;\n changeAccountText.style.margin = '0px';\n changeAccountText.style.marginTop = '4px';\n changeAccountText.style.textDecoration = 'underline';\n changeAccountText.style.cursor = 'pointer';\n addTouchAndClickEventListeners(\n changeAccountText,\n onOpenAuthenticationWindow\n );\n\n _textContainer.appendChild(loggedText);\n _textContainer.appendChild(changeAccountText);\n divContainer.appendChild(_textContainer);\n\n return divContainer;\n };\n\n /**\n * Create, display, and hide the logged in confirmation.\n */\n export const displayLoggedInNotification = function (\n domContainer: HTMLDivElement,\n username: string\n ) {\n showNotification(\n domContainer,\n 'authenticated-notification',\n `<img style=\"margin-right:4px\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K\" />\n Logged as ${username}`,\n 'success'\n );\n };\n\n /**\n * Create, display, and hide the logged in confirmation.\n */\n export const displayLoggedOutNotification = function (\n domContainer: HTMLDivElement\n ) {\n showNotification(\n domContainer,\n 'authenticated-notification',\n `<img style=\"margin-right:4px\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K\" />\n Logged out`,\n 'success'\n );\n };\n\n /**\n * Create, display, and hide an error notification.\n */\n export const displayErrorNotification = function (\n domContainer: HTMLDivElement\n ) {\n showNotification(\n domContainer,\n 'error-notification',\n 'An error occurred while authenticating, please try again.',\n 'error'\n );\n };\n\n /**\n * Helper to show a notification to the user, that disappears automatically.\n */\n export const showNotification = function (\n domContainer: HTMLDivElement,\n id: string,\n content: string,\n type: 'success' | 'error'\n ) {\n const divContainer = document.createElement('div');\n\n divContainer.id = id;\n divContainer.style.position = 'absolute';\n divContainer.style.pointerEvents = 'all';\n divContainer.style.backgroundColor =\n type === 'success' ? '#0E062D' : 'red';\n divContainer.style.top = '12px';\n divContainer.style.right = '16px';\n divContainer.style.padding = '6px 32px 6px 6px';\n // Use zIndex 1 to make sure it is below the authentication iframe or webview.\n divContainer.style.zIndex = '1';\n divContainer.style.display = 'flex';\n divContainer.style.flexDirection = 'row-reverse';\n divContainer.style.justifyContent = 'space-between';\n divContainer.style.alignItems = 'center';\n divContainer.style.boxShadow = '0px 4px 4px rgba(0, 0, 0, 0.25)';\n divContainer.style.borderRadius = '4px';\n divContainer.style.fontSize = '11pt';\n divContainer.style.color = '#FFFFFF';\n divContainer.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n try {\n divContainer.animate(\n [\n { transform: 'translateY(-30px)', opacity: 0 },\n { transform: 'translateY(0px)', opacity: 1 },\n ],\n {\n duration: 700,\n easing: 'ease-out',\n }\n );\n } catch {\n logger.warn('Animation not supported, div will be fixed.');\n }\n const loggedText = document.createElement('p');\n loggedText.id = 'loggedText';\n loggedText.innerHTML = content;\n loggedText.style.margin = '0px';\n\n divContainer.appendChild(loggedText);\n\n domContainer.appendChild(divContainer);\n const animationTime = 700;\n const notificationTime = 5000;\n setTimeout(() => {\n try {\n divContainer.animate(\n [\n { transform: 'translateY(0px)', opacity: 1 },\n { transform: 'translateY(-30px)', opacity: 0 },\n ],\n {\n duration: animationTime,\n easing: 'ease-in',\n }\n );\n } catch {\n logger.warn('Animation not supported, div will be fixed.');\n }\n }, notificationTime);\n // Use timeout because onanimationend listener does not work.\n setTimeout(() => {\n divContainer.remove();\n }, notificationTime + animationTime);\n };\n\n /**\n * Helper to add event listeners on a pressable/clickable element\n * to work on both desktop and mobile.\n */\n const addTouchAndClickEventListeners = function (\n element: HTMLElement,\n action: () => void\n ) {\n // Touch start event listener for mobile.\n element.addEventListener('touchstart', (event) => {\n action();\n });\n // Click event listener for desktop.\n element.addEventListener('click', (event) => {\n action();\n });\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CACE,KAAM,GAAS,GAAI,GAAK,OAAO,yBACxB,GAAU,GAAV,UAAU,EAAV,CACL,KAAM,GAAyB,CAAC,CAC9B,WACA,sBAKA,EACI,CACE,MAAO,gBACP,MACE,IAAa,
|
|
4
|
+
"sourcesContent": ["namespace gdjs {\n const logger = new gdjs.Logger('Player Authentication');\n export namespace playerAuthenticationComponents {\n const getPlayerLoginMessages = ({\n platform,\n isGameRegistered,\n }: {\n platform: 'cordova-websocket' | 'electron' | 'web-iframe' | 'web';\n isGameRegistered: boolean;\n }) =>\n isGameRegistered\n ? {\n title: 'Logging in...',\n text1:\n platform === 'cordova-websocket'\n ? \"One moment, we're opening a window for you to log in.\"\n : \"One moment, we're opening a new page with your web browser for you to log in.\",\n text2:\n platform === 'cordova-websocket'\n ? ''\n : 'If the window did not open, please check your pop-up blocker and click the button below to try again.',\n }\n : {\n title: 'Publish your game!',\n text1:\n \"GDevelop's player accounts are only available for published games.\",\n text2:\n 'Click the button below to learn how to publish your game then try again.',\n };\n\n /**\n * Creates a DOM element that will contain the loader or a message if the game is not registered.\n */\n export const computeAuthenticationContainer = function (\n onCloseAuthenticationContainer: () => void\n ): {\n rootContainer: HTMLDivElement;\n loaderContainer: HTMLDivElement;\n iframeContainer: HTMLDivElement;\n } {\n const rootContainer = document.createElement('div');\n rootContainer.id = 'authentication-root-container';\n rootContainer.style.position = 'relative';\n rootContainer.style.backgroundColor = 'rgba(14, 6, 45, 0.5)';\n rootContainer.style.opacity = '1';\n rootContainer.style.width = '100%';\n rootContainer.style.height = '100%';\n rootContainer.style.zIndex = '2';\n rootContainer.style.pointerEvents = 'all';\n\n const frameContainer = document.createElement('div');\n frameContainer.id = 'authentication-frame-container';\n frameContainer.style.backgroundColor = '#FFFFFF';\n frameContainer.style.position = 'absolute';\n frameContainer.style.top = '16px';\n frameContainer.style.bottom = '16px';\n frameContainer.style.left = '16px';\n frameContainer.style.right = '16px';\n frameContainer.style.borderRadius = '8px';\n frameContainer.style.boxShadow = '0px 4px 4px rgba(0, 0, 0, 0.25)';\n frameContainer.style.padding = '16px';\n\n const _closeContainer: HTMLDivElement = document.createElement('div');\n _closeContainer.style.cursor = 'pointer';\n _closeContainer.style.display = 'flex';\n _closeContainer.style.justifyContent = 'right';\n _closeContainer.style.alignItems = 'center';\n _closeContainer.style.zIndex = '3';\n addTouchAndClickEventListeners(\n _closeContainer,\n onCloseAuthenticationContainer\n );\n\n const _close = document.createElement('img');\n _close.setAttribute('width', '15px');\n _close.setAttribute(\n 'src',\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOCIgaGVpZ2h0PSI4IiB2aWV3Qm94PSIwIDAgOCA4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuODUzNTUgMC4xNDY0NDdDOC4wNDg4MiAwLjM0MTcwOSA4LjA0ODgyIDAuNjU4MjkxIDcuODUzNTUgMC44NTM1NTNMMC44NTM1NTMgNy44NTM1NUMwLjY1ODI5MSA4LjA0ODgyIDAuMzQxNzA5IDguMDQ4ODIgMC4xNDY0NDcgNy44NTM1NUMtMC4wNDg4MTU1IDcuNjU4MjkgLTAuMDQ4ODE1NSA3LjM0MTcxIDAuMTQ2NDQ3IDcuMTQ2NDVMNy4xNDY0NSAwLjE0NjQ0N0M3LjM0MTcxIC0wLjA0ODgxNTUgNy42NTgyOSAtMC4wNDg4MTU1IDcuODUzNTUgMC4xNDY0NDdaIiBmaWxsPSIjMUQxRDI2Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMC4xNDY0NDcgMC4xNDY0NDdDMC4zNDE3MDkgLTAuMDQ4ODE1NSAwLjY1ODI5MSAtMC4wNDg4MTU1IDAuODUzNTUzIDAuMTQ2NDQ3TDcuODUzNTUgNy4xNDY0NUM4LjA0ODgyIDcuMzQxNzEgOC4wNDg4MiA3LjY1ODI5IDcuODUzNTUgNy44NTM1NUM3LjY1ODI5IDguMDQ4ODIgNy4zNDE3MSA4LjA0ODgyIDcuMTQ2NDUgNy44NTM1NUwwLjE0NjQ0NyAwLjg1MzU1M0MtMC4wNDg4MTU1IDAuNjU4MjkxIC0wLjA0ODgxNTUgMC4zNDE3MDkgMC4xNDY0NDcgMC4xNDY0NDdaIiBmaWxsPSIjMUQxRDI2Ii8+Cjwvc3ZnPgo='\n );\n _closeContainer.appendChild(_close);\n\n const loaderContainer: HTMLDivElement = document.createElement('div');\n loaderContainer.id = 'authentication-container-loader';\n loaderContainer.style.display = 'flex';\n loaderContainer.style.flexDirection = 'column';\n loaderContainer.style.height = '100%';\n loaderContainer.style.width = '100%';\n loaderContainer.style.justifyContent = 'center';\n loaderContainer.style.alignItems = 'center';\n\n const _loader = document.createElement('img');\n _loader.setAttribute('width', '28px');\n _loader.setAttribute(\n 'src',\n 'data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iYW5pbWF0ZS1zcGluIC1tbC0xIG1yLTMgaC01IHctNSB0ZXh0LXdoaXRlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CjxjaXJjbGUgb3BhY2l0eT0nMC4yNScgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSI0Ij48L2NpcmNsZT4KPHBhdGggb3BhY2l0eT0nMC43NScgZmlsbD0iY3VycmVudENvbG9yIiBkPSJNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6bTIgNS4yOTFBNy45NjIgNy45NjIgMCAwMTQgMTJIMGMwIDMuMDQyIDEuMTM1IDUuODI0IDMgNy45MzhsMy0yLjY0N3oiPjwvcGF0aD4KPC9zdmc+'\n );\n _loader.style.marginTop = '50px';\n try {\n _loader.animate(\n [{ transform: 'rotate(0deg)' }, { transform: 'rotate(359deg)' }],\n {\n duration: 3000,\n iterations: Infinity,\n }\n );\n } catch {\n logger.warn('Animation not supported, loader will be fixed.');\n }\n\n loaderContainer.appendChild(_loader);\n\n const iframeContainer: HTMLDivElement = document.createElement('div');\n iframeContainer.style.display = 'flex';\n iframeContainer.style.flexDirection = 'column';\n iframeContainer.style.height = '100%';\n iframeContainer.style.width = '100%';\n iframeContainer.style.justifyContent = 'stretch';\n iframeContainer.style.alignItems = 'stretch';\n iframeContainer.style.display = 'none';\n\n frameContainer.appendChild(_closeContainer);\n frameContainer.appendChild(loaderContainer);\n frameContainer.appendChild(iframeContainer);\n rootContainer.appendChild(frameContainer);\n\n return { rootContainer, loaderContainer, iframeContainer };\n };\n\n export const displayIframeInsideAuthenticationContainer = (\n iframeContainer: HTMLDivElement,\n loaderContainer: HTMLDivElement,\n textContainer: HTMLDivElement,\n url: string\n ) => {\n const iframe = document.createElement('iframe');\n iframe.setAttribute(\n 'sandbox',\n 'allow-forms allow-modals allow-orientation-lock allow-popups allow-same-origin allow-scripts'\n );\n iframe.addEventListener('load', () => {\n iframeContainer.style.display = 'flex';\n loaderContainer.style.display = 'none';\n });\n iframe.addEventListener('loaderror', () => {\n addAuthenticationUrlToTextsContainer(() => {\n // Try again.\n iframeContainer.removeChild(iframe);\n iframeContainer.style.display = 'none';\n loaderContainer.style.display = 'flex';\n displayIframeInsideAuthenticationContainer(\n iframeContainer,\n loaderContainer,\n textContainer,\n url\n );\n }, textContainer);\n });\n iframe.src = url;\n iframe.style.flex = '1';\n iframe.style.border = '0';\n\n iframeContainer.appendChild(iframe);\n };\n\n /**\n * Helper to add the texts to the authentication container\n * based on the platform or if the game is registered.\n */\n export const addAuthenticationTextsToLoadingContainer = (\n loaderContainer: HTMLDivElement,\n platform: 'cordova-websocket' | 'electron' | 'web-iframe' | 'web',\n isGameRegistered: boolean,\n wikiOpenAction: (() => void) | null\n ) => {\n const textContainer: HTMLDivElement = document.createElement('div');\n textContainer.id = 'authentication-container-texts';\n textContainer.style.display = 'flex';\n textContainer.style.flexDirection = 'column';\n textContainer.style.width = '100%';\n textContainer.style.justifyContent = 'center';\n textContainer.style.alignItems = 'center';\n textContainer.style.position = 'relative';\n textContainer.style.zIndex = '3';\n textContainer.style.fontSize = '11pt';\n textContainer.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n\n const messages = getPlayerLoginMessages({\n platform,\n isGameRegistered,\n });\n const title = document.createElement('h1');\n title.innerText = messages.title;\n title.style.fontSize = '20pt';\n title.style.fontWeight = 'bold';\n const text1 = document.createElement('p');\n text1.innerText = messages.text1;\n const text2 = document.createElement('p');\n text2.innerText = messages.text2;\n textContainer.appendChild(title);\n textContainer.appendChild(text1);\n textContainer.appendChild(text2);\n\n if (!isGameRegistered) {\n // Remove the loader and add the wiki link.\n loaderContainer.innerHTML = '';\n\n if (wikiOpenAction) {\n const link = document.createElement('a');\n addTouchAndClickEventListeners(link, wikiOpenAction);\n link.innerText = 'How to publish my game';\n link.style.color = '#0078d4';\n link.style.textDecoration = 'none';\n link.style.textDecoration = 'underline';\n link.style.cursor = 'pointer';\n\n textContainer.appendChild(link);\n }\n }\n\n loaderContainer.prepend(textContainer);\n\n return textContainer;\n };\n\n /**\n * Helper to add the authentication link in case the window hasn't opened properly.\n * Useful for Electron & Web platforms.\n */\n export const addAuthenticationUrlToTextsContainer = (\n onClick: () => void,\n textContainer: HTMLDivElement\n ) => {\n const link = document.createElement('a');\n addTouchAndClickEventListeners(link, onClick);\n link.innerText = 'Try again';\n link.style.color = '#0078d4';\n link.style.textDecoration = 'none';\n link.style.textDecoration = 'underline';\n link.style.cursor = 'pointer';\n\n textContainer.appendChild(link);\n };\n\n /**\n * Creates a DOM element to display a dismissable banner.\n */\n export const computeDismissableBanner = function (\n onDismissBanner: () => void\n ): HTMLDivElement {\n const divContainer = document.createElement('div');\n\n divContainer.id = 'authenticated-banner';\n divContainer.style.position = 'absolute';\n divContainer.style.pointerEvents = 'all';\n divContainer.style.backgroundColor = '#0E062D';\n divContainer.style.top = '0px';\n divContainer.style.height = '48px';\n divContainer.style.left = '0px';\n divContainer.style.width = '100%';\n divContainer.style.padding = '6px 16px';\n // Use zIndex 1 to make sure it is below the authentication iframe or webview.\n divContainer.style.zIndex = '1';\n divContainer.style.display = 'flex';\n divContainer.style.flexDirection = 'row-reverse';\n divContainer.style.justifyContent = 'space-between';\n divContainer.style.alignItems = 'center';\n divContainer.style.boxShadow = '0px 4px 4px rgba(0, 0, 0, 0.25)';\n divContainer.style.fontSize = '11pt';\n divContainer.style.color = '#FFFFFF';\n divContainer.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n\n const _closeContainer: HTMLDivElement = document.createElement('div');\n _closeContainer.style.cursor = 'pointer';\n _closeContainer.style.display = 'flex';\n _closeContainer.style.justifyContent = 'center';\n _closeContainer.style.alignItems = 'center';\n _closeContainer.style.zIndex = '3';\n _closeContainer.style.marginRight = '32px';\n _closeContainer.style.height = '100%';\n addTouchAndClickEventListeners(_closeContainer, onDismissBanner);\n\n const _close = document.createElement('img');\n _close.setAttribute('width', '30px');\n _close.setAttribute(\n 'src',\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjc1IDguMDEyNUwyMS45ODc1IDYuMjVMMTUgMTMuMjM3NUw4LjAxMjUgNi4yNUw2LjI1IDguMDEyNUwxMy4yMzc1IDE1TDYuMjUgMjEuOTg3NUw4LjAxMjUgMjMuNzVMMTUgMTYuNzYyNUwyMS45ODc1IDIzLjc1TDIzLjc1IDIxLjk4NzVMMTYuNzYyNSAxNUwyMy43NSA4LjAxMjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K'\n );\n\n _closeContainer.appendChild(_close);\n divContainer.appendChild(_closeContainer);\n\n return divContainer;\n };\n\n /**\n * Creates a DOM element representing a banner for the user to know which account\n * they're using and also to allow switching to another account.\n */\n export const computeAuthenticatedBanner = function (\n onOpenAuthenticationWindow: () => void,\n onDismissBanner: () => void,\n username: string | null\n ): HTMLDivElement {\n const divContainer = computeDismissableBanner(onDismissBanner);\n\n const playerUsername = username || 'Anonymous';\n\n const _textContainer: HTMLDivElement = document.createElement('div');\n const loggedText = document.createElement('p');\n loggedText.id = 'loggedText';\n loggedText.innerHTML = `<img style=\"margin-right:4px\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K\" />\n Logged as ${playerUsername}`;\n loggedText.style.margin = '0px';\n\n const changeAccountText = document.createElement('p');\n changeAccountText.id = 'changeAccountText';\n changeAccountText.innerText = `Click here to switch to another account.`;\n changeAccountText.style.margin = '0px';\n changeAccountText.style.marginTop = '4px';\n changeAccountText.style.textDecoration = 'underline';\n changeAccountText.style.cursor = 'pointer';\n addTouchAndClickEventListeners(\n changeAccountText,\n onOpenAuthenticationWindow\n );\n\n _textContainer.appendChild(loggedText);\n _textContainer.appendChild(changeAccountText);\n divContainer.appendChild(_textContainer);\n\n return divContainer;\n };\n\n /**\n * Creates a DOM element representing a banner for the user to know\n * they are not connected and to allow logging in.\n */\n export const computeNotAuthenticatedBanner = function (\n onOpenAuthenticationWindow: () => void,\n onDismissBanner: () => void\n ): HTMLDivElement {\n const divContainer = computeDismissableBanner(onDismissBanner);\n\n const _textContainer: HTMLDivElement = document.createElement('div');\n const loggedText = document.createElement('p');\n loggedText.id = 'loggedText';\n loggedText.innerHTML = `You are not authenticated.`;\n loggedText.style.margin = '0px';\n\n const changeAccountText = document.createElement('p');\n changeAccountText.id = 'changeAccountText';\n changeAccountText.innerText = `Click here to log in.`;\n changeAccountText.style.margin = '0px';\n changeAccountText.style.marginTop = '4px';\n changeAccountText.style.textDecoration = 'underline';\n changeAccountText.style.cursor = 'pointer';\n addTouchAndClickEventListeners(\n changeAccountText,\n onOpenAuthenticationWindow\n );\n\n _textContainer.appendChild(loggedText);\n _textContainer.appendChild(changeAccountText);\n divContainer.appendChild(_textContainer);\n\n return divContainer;\n };\n\n /**\n * Create, display, and hide the logged in confirmation.\n */\n export const displayLoggedInNotification = function (\n domContainer: HTMLDivElement,\n username: string\n ) {\n showNotification(\n domContainer,\n 'authenticated-notification',\n `<img style=\"margin-right:4px\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K\" />\n Logged as ${username}`,\n 'success'\n );\n };\n\n /**\n * Create, display, and hide the logged in confirmation.\n */\n export const displayLoggedOutNotification = function (\n domContainer: HTMLDivElement\n ) {\n showNotification(\n domContainer,\n 'authenticated-notification',\n `<img style=\"margin-right:4px\" src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI5IiB2aWV3Qm94PSIwIDAgOSA5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNC4xNjY2NyAwQzEuODY2NjcgMCAwIDEuODY2NjcgMCA0LjE2NjY3QzAgNi40NjY2NyAxLjg2NjY3IDguMzMzMzMgNC4xNjY2NyA4LjMzMzMzQzYuNDY2NjcgOC4zMzMzMyA4LjMzMzMzIDYuNDY2NjcgOC4zMzMzMyA0LjE2NjY3QzguMzMzMzMgMS44NjY2NyA2LjQ2NjY3IDAgNC4xNjY2NyAwWk0zLjMzMzMzIDYuMjVMMS4yNSA0LjE2NjY3TDEuODM3NSAzLjU3OTE3TDMuMzMzMzMgNS4wNzA4M0w2LjQ5NTgzIDEuOTA4MzNMNy4wODMzMyAyLjVMMy4zMzMzMyA2LjI1WiIgZmlsbD0iIzAwQ0M4MyIvPgo8L3N2Zz4K\" />\n Logged out`,\n 'success'\n );\n };\n\n /**\n * Create, display, and hide an error notification.\n */\n export const displayErrorNotification = function (\n domContainer: HTMLDivElement\n ) {\n showNotification(\n domContainer,\n 'error-notification',\n 'An error occurred while authenticating, please try again.',\n 'error'\n );\n };\n\n /**\n * Helper to show a notification to the user, that disappears automatically.\n */\n export const showNotification = function (\n domContainer: HTMLDivElement,\n id: string,\n content: string,\n type: 'success' | 'error'\n ) {\n const divContainer = document.createElement('div');\n\n divContainer.id = id;\n divContainer.style.position = 'absolute';\n divContainer.style.pointerEvents = 'all';\n divContainer.style.backgroundColor =\n type === 'success' ? '#0E062D' : 'red';\n divContainer.style.top = '12px';\n divContainer.style.right = '16px';\n divContainer.style.padding = '6px 32px 6px 6px';\n // Use zIndex 1 to make sure it is below the authentication iframe or webview.\n divContainer.style.zIndex = '1';\n divContainer.style.display = 'flex';\n divContainer.style.flexDirection = 'row-reverse';\n divContainer.style.justifyContent = 'space-between';\n divContainer.style.alignItems = 'center';\n divContainer.style.boxShadow = '0px 4px 4px rgba(0, 0, 0, 0.25)';\n divContainer.style.borderRadius = '4px';\n divContainer.style.fontSize = '11pt';\n divContainer.style.color = '#FFFFFF';\n divContainer.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"';\n try {\n divContainer.animate(\n [\n { transform: 'translateY(-30px)', opacity: 0 },\n { transform: 'translateY(0px)', opacity: 1 },\n ],\n {\n duration: 700,\n easing: 'ease-out',\n }\n );\n } catch {\n logger.warn('Animation not supported, div will be fixed.');\n }\n const loggedText = document.createElement('p');\n loggedText.id = 'loggedText';\n loggedText.innerHTML = content;\n loggedText.style.margin = '0px';\n\n divContainer.appendChild(loggedText);\n\n domContainer.appendChild(divContainer);\n const animationTime = 700;\n const notificationTime = 5000;\n setTimeout(() => {\n try {\n divContainer.animate(\n [\n { transform: 'translateY(0px)', opacity: 1 },\n { transform: 'translateY(-30px)', opacity: 0 },\n ],\n {\n duration: animationTime,\n easing: 'ease-in',\n }\n );\n } catch {\n logger.warn('Animation not supported, div will be fixed.');\n }\n }, notificationTime);\n // Use timeout because onanimationend listener does not work.\n setTimeout(() => {\n divContainer.remove();\n }, notificationTime + animationTime);\n };\n\n /**\n * Helper to add event listeners on a pressable/clickable element\n * to work on both desktop and mobile.\n */\n const addTouchAndClickEventListeners = function (\n element: HTMLElement,\n action: () => void\n ) {\n // Touch start event listener for mobile.\n element.addEventListener('touchstart', (event) => {\n action();\n });\n // Click event listener for desktop.\n element.addEventListener('click', (event) => {\n action();\n });\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var gdjs;(function(d){const a=new d.Logger("Player Authentication"),c=d.playerAuthenticationComponents;let S;(function(i){let f=null,T=null,p=null,M=!1,w=!1,G=null,b=null,E=null,C=null,D=null,h=null,l=null,x=null,W=null,u=null,_=null,g=null;d.registerRuntimeScenePostEventsCallback(()=>{M=!1}),d.registerFirstRuntimeSceneLoadedCallback(e=>{B(e)==="web"&&(L(),u=t=>{U(e,t,{checkOrigin:!0})},window.addEventListener("message",u,!0),a.info("Notifying parent window that player authentication is ready."),window.parent.postMessage({id:"playerAuthReady"},"*"),x=setTimeout(()=>{a.info("Removing initial authentication listener."),L()},3e3))});const O=e=>`${e}_authenticatedUser`,j=({runtimeGame:e,gameId:t,connectionId:n})=>`https://gd.games/auth?gameId=${t}${n?`&connectionId=${n}`:""}${e.isUsingGDevelopDevelopmentEnvironment()?"&dev=true":""}`,B=e=>e.getGame().getRenderer().getElectron()?"electron":typeof cordova!="undefined"?"cordova":"web",q=e=>{const t=e.getGame().getAdditionalOptions();return t&&t.isPreview&&t.allowAuthenticationUsingIframeForPreview};i.isAuthenticated=()=>(w||R(),p!==null),i.hasLoggedIn=()=>M,i.getUsername=()=>(w||R(),f||""),i.getUserToken=()=>(w||R(),p||null),i.getUserId=()=>(w||R(),T||"");const P=(e,t,n=0)=>{const r=`${e.isUsingGDevelopDevelopmentEnvironment()?"https://api-dev.gdevelop.io":"https://api.gdevelop.io"}/game/public-game/${t}`;return fetch(r,{method:"HEAD"}).then(s=>s.status!==200?(a.warn(`Error while fetching the game: ${s.status} ${s.statusText}`),s.status===404||n>2?!1:P(e,t,n+1)):!0,s=>(a.error("Error while fetching game:",s),!1))};i.logout=e=>{f=null,p=null,T=null;const t=d.projectData.properties.projectUuid;if(!t){a.error("Missing game id in project properties.");return}window.localStorage.removeItem(O(t)),k(e),i.removeAuthenticationBanner(e);const n=e.getGame().getRenderer().getDomElementContainer();if(!n){m(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}c.displayLoggedOutNotification(n)};const R=()=>{const e=d.projectData.properties.projectUuid;if(!e){a.error("Missing game id in project properties.");return}try{const t=window.localStorage.getItem(O(e));if(!t){w=!0;return}const n=JSON.parse(t);f=n.username,T=n.userId,p=n.userToken,w=!0}catch(t){a.warn("Unable to read authentication details from localStorage. Player authentication will not be available.",t)}},k=e=>{i.removeAuthenticationContainer(e),J(),g&&(g.close(),g=null),G&&(G.close(),G=null),b&&(b.close(),b=null)},F=({username:e,userId:t,userToken:n})=>{e||a.warn("The authenticated player does not have a username"),f=e,T=t,p=n,M=!0;const o=d.projectData.properties.projectUuid;if(!o){a.error("Missing game id in project properties.");return}try{window.localStorage.setItem(O(o),JSON.stringify({username:f,userId:T,userToken:p}))}catch(r){a.warn("Unable to save the authentication details to localStorage. Player authentication will not be available.",r)}},H=function(e,t,n,o){F({userId:t,username:n,userToken:o}),k(e),i.removeAuthenticationBanner(e);const r=e.getGame().getRenderer().getDomElementContainer();if(!r){m(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}c.displayLoggedInNotification(r,f||"Anonymous"),$(e)},U=function(e,t,{checkOrigin:n}){if(!(n&&!["https://liluo.io","https://gd.games"].includes(t.origin))){if(!t.data.id)throw new Error("Malformed message");switch(t.data.id){case"authenticationResult":{if(!(t.data.body&&t.data.body.token))throw new Error("Malformed message.");H(e,t.data.body.userId,t.data.body.username,t.data.body.token);break}case"alreadyAuthenticated":{if(!(t.data.body&&t.data.body.token))throw new Error("Malformed message.");F({userId:t.data.body.userId,username:t.data.body.username,userToken:t.data.body.token}),L(),V(e);break}}}},m=function(e,t){a.error(t),k(e);const n=e.getGame().getRenderer().getDomElementContainer();if(!n){m(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}c.displayErrorNotification(n),$(e)},z=e=>{J();const t=12*60*1e3;W=setTimeout(()=>{a.info("Authentication window did not send message in time. Closing it."),k(e),$(e)},t)},J=()=>{x&&clearTimeout(x),W&&clearTimeout(W)},K=function(e){const t=()=>{i.removeAuthenticationBanner(e)},n=()=>{i.openAuthenticationWindow(e)};return p?c.computeAuthenticatedBanner(n,t,f):c.computeNotAuthenticatedBanner(n,t)};i.displayAuthenticationBanner=function(e){if(l){l.style.opacity="1";return}w||R();const t=e.getGame().getRenderer().getDomElementContainer();if(!t){m(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}l=K(e),t.appendChild(l)};const V=function(e){if(!l)return;const t=e.getGame().getRenderer().getDomElementContainer();if(!t){m(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}const n=l;l=K(e),t.replaceChild(l,n)},X=(e,t)=>{const n=e.getGame().isUsingGDevelopDevelopmentEnvironment()?"wss://api-ws-dev.gdevelop.io/play":"wss://api-ws.gdevelop.io/play";g=new WebSocket(n),g.onopen=()=>{g&&g.send(JSON.stringify({action:"getConnectionId"}))},g.onerror=()=>{m(e,"Error while connecting to the authentication server.")},g.onmessage=o=>{if(o.data){const r=JSON.parse(o.data);switch(r.type){case"authenticationResult":{const s=r.data;H(e,s.userId,s.username,s.token);break}case"connectionId":{const v=r.data.connectionId;if(!v){a.error("No connectionId received");return}const y=j({runtimeGame:e.getGame(),gameId:t,connectionId:v}),I=e.getGame().getRenderer().getElectron(),A=()=>I.shell.openExternal(y);A(),h&&c.addAuthenticationUrlToTextsContainer(A,h);break}}}}},Y=(e,t)=>{const n=j({runtimeGame:e.getGame(),gameId:t});b=cordova.InAppBrowser.open(n,"authentication","location=yes"),b&&(_=o=>{U(e,o,{checkOrigin:!1})},b.addEventListener("message",_,!0))},Z=(e,t)=>{const n=j({runtimeGame:e.getGame(),gameId:t});u=y=>{U(e,y,{checkOrigin:!0})},window.addEventListener("message",u,!0);const o=screen.width/2-500/2,r=screen.height/2-600/2,s=`left=${o},top=${r},width=500,height=600`,v=()=>window.open(n,"authentication",s);G=v(),h&&c.addAuthenticationUrlToTextsContainer(v,h)},ee=(e,t)=>{if(!D||!C||!h){console.error("Can't open an authentication iframe - no iframe container, loader container or text container was opened for it.");return}const n=j({runtimeGame:e.getGame(),gameId:t});u=o=>{U(e,o,{checkOrigin:!0})},window.addEventListener("message",u,!0),c.displayIframeInsideAuthenticationContainer(D,C,h,n)};i.openAuthenticationWindow=function(e){const t=e.getGame().getRenderer().getDomElementContainer();if(!t){m(e,"The div element covering the game couldn't be found, the authentication window cannot be displayed.");return}const n=()=>{k(e),i.displayAuthenticationBanner(e)},o=d.projectData.properties.projectUuid;if(!o){m(e,"The game ID is missing, the authentication window cannot be opened.");return}l&&(l.style.opacity="0");const r=B(e),{rootContainer:s,loaderContainer:v,iframeContainer:y}=c.computeAuthenticationContainer(n);E=s,C=v,D=y,t.appendChild(E),P(e.getGame(),o).then(I=>{if(C){const A=e.getGame().getRenderer().getElectron(),oe=A?()=>A.shell.openExternal("https://wiki.gdevelop.io/gdevelop5/publishing/web"):null;h=c.addAuthenticationTextsToLoadingContainer(C,r,I,oe)}if(I)switch(z(e),r){case"electron":X(e,o);break;case"cordova":Y(e,o);break;case"web":default:q(e)?ee(e,o):Z(e,o);break}}).catch(I=>{m(e,"Error while checking if the game is registered."),a.error(I)})},i.isAuthenticationWindowOpen=function(){return!!E},i.removeAuthenticationContainer=function(e){L();const t=e.getGame().getRenderer().getDomElementContainer();if(!t){a.info("The div element covering the game couldn't be found, the authentication must be already closed.");return}E&&t.removeChild(E),E=null,C=null,D=null,h=null};const L=function(){u&&(window.removeEventListener("message",u,!0),u=null,_=null)};i.removeAuthenticationBanner=function(e){if(!l){a.info("The authentication banner couldn't be found, the authentication banner must be already closed.");return}const t=e.getGame().getRenderer().getDomElementContainer();if(!t){a.info("The div element covering the game couldn't be found, the authentication must be already closed.");return}t.removeChild(l),l=null};const $=function(e){const t=e.getGame().getRenderer().getCanvas();t&&t.focus()}})(S=d.playerAuthentication||(d.playerAuthentication={}))})(gdjs||(gdjs={}));
|
|
1
|
+
var gdjs;(function(d){const a=new d.Logger("Player Authentication"),u=d.playerAuthenticationComponents;let Q;(function(r){let w=null,A=null,p=null,M=!1,b=!1,D=null,y=null,k=null,W=null,f=null,l=null,j=null,x=null,I=null,v=null,g=null;const X=e=>{F(e)==="web"&&($(),I=t=>{_({runtimeScene:e,event:t,checkOrigin:!0})},window.addEventListener("message",I,!0),a.info("Notifying parent window that player authentication is ready."),window.parent.postMessage({id:"playerAuthReady"},"*"),j=setTimeout(()=>{a.info("Removing automatic games platform authentication listener."),$()},3e3))},Y=e=>{const t=e.getGame().getAdditionalOptions();if(t&&t.isPreview){const n=t.playerId,o=t.playerToken,i=t.playerUsername;n&&o&&(a.info(`Automatically logging in the player with ID ${n} as it's a preview.`),S({userId:n,username:i||null,userToken:o}),K(e))}};d.registerRuntimeScenePostEventsCallback(()=>{M=!1}),d.registerFirstRuntimeSceneLoadedCallback(e=>{Y(e),X(e)});const O=e=>`${e}_authenticatedUser`,U=({runtimeGame:e,gameId:t,connectionId:n})=>`https://gd.games/auth?gameId=${t}${n?`&connectionId=${n}`:""}${e.isUsingGDevelopDevelopmentEnvironment()?"&dev=true":""}&allowLoginProviders=true`,F=e=>e.getGame().getRenderer().getElectron()?"electron":Z(e)?"web-iframe":typeof cordova!="undefined"?"cordova-websocket":"web",Z=e=>{const t=e.getGame().getAdditionalOptions();return t&&t.isPreview&&t.allowAuthenticationUsingIframeForPreview};r.isAuthenticated=()=>(b||R(),p!==null),r.hasLoggedIn=()=>M,r.getUsername=()=>(b||R(),w||""),r.getUserToken=()=>(b||R(),p||null),r.getUserId=()=>(b||R(),A||"");const B=(e,t,n=0)=>{const i=`${e.isUsingGDevelopDevelopmentEnvironment()?"https://api-dev.gdevelop.io":"https://api.gdevelop.io"}/game/public-game/${t}`;return fetch(i,{method:"HEAD"}).then(s=>s.status!==200?(a.warn(`Error while fetching the game: ${s.status} ${s.statusText}`),s.status===404||n>2?!1:B(e,t,n+1)):!0,s=>(a.error("Error while fetching game:",s),!1))};r.logout=e=>{w=null,p=null,A=null;const t=d.projectData.properties.projectUuid;if(!t){a.error("Missing game id in project properties.");return}window.localStorage.removeItem(O(t)),G(e),r.removeAuthenticationBanner(e);const n=e.getGame().getRenderer().getDomElementContainer();if(!n){h(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}u.displayLoggedOutNotification(n)};const R=()=>{const e=d.projectData.properties.projectUuid;if(!e){a.error("Missing game id in project properties.");return}try{const t=window.localStorage.getItem(O(e));if(!t){b=!0;return}const n=JSON.parse(t);w=n.username,A=n.userId,p=n.userToken,b=!0}catch(t){a.warn("Unable to read authentication details from localStorage. Player authentication will not be available.",t)}},G=e=>{if(r.removeAuthenticationContainer(e),J(),g&&(a.info("Closing authentication websocket connection."),g.close(),g=null),D&&(D.close(),D=null),typeof SafariViewController!="undefined")try{SafariViewController.hide()}catch{a.info("Could not hide login window. Waiting for user to do it.")}},S=({username:e,userId:t,userToken:n})=>{e||a.warn("The authenticated player does not have a username"),w=e,A=t,p=n,M=!0;const o=d.projectData.properties.projectUuid;if(!o){a.error("Missing game id in project properties.");return}try{window.localStorage.setItem(O(o),JSON.stringify({username:w,userId:A,userToken:p}))}catch(i){a.warn("Unable to save the authentication details to localStorage. Player authentication will not be available.",i)}};r.login=({runtimeScene:e,userId:t,username:n,userToken:o})=>{S({userId:t,username:n,userToken:o}),G(e),r.removeAuthenticationBanner(e);const i=e.getGame().getRenderer().getDomElementContainer();if(!i){h(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}u.displayLoggedInNotification(i,w||"Anonymous")};const _=function({runtimeScene:e,event:t,checkOrigin:n,onDone:o}){if(!(n&&!["https://liluo.io","https://gd.games"].includes(t.origin))){if(!t.data.id)throw new Error("Malformed message");switch(t.data.id){case"authenticationResult":{if(!(t.data.body&&t.data.body.token))throw new Error("Malformed message.");r.login({runtimeScene:e,userId:t.data.body.userId,username:t.data.body.username,userToken:t.data.body.token}),P(e),o&&o("logged");break}case"alreadyAuthenticated":{if(!(t.data.body&&t.data.body.token))throw new Error("Malformed message.");S({userId:t.data.body.userId,username:t.data.body.username,userToken:t.data.body.token}),$(),K(e);break}}}},h=function(e,t){a.error(t),G(e);const n=e.getGame().getRenderer().getDomElementContainer();if(!n){h(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}u.displayErrorNotification(n),P(e)},ee=e=>{J();const t=15*60*1e3;x=setTimeout(()=>{a.info("Authentication window did not send message in time. Closing it."),G(e),P(e)},t)},J=()=>{x&&clearTimeout(x)},V=function(e){const t=()=>{r.removeAuthenticationBanner(e)},n=()=>{r.openAuthenticationWindow(e)};return p?u.computeAuthenticatedBanner(n,t,w):u.computeNotAuthenticatedBanner(n,t)};r.displayAuthenticationBanner=function(e){if(l){l.style.opacity="1";return}b||R();const t=e.getGame().getRenderer().getDomElementContainer();if(!t){h(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}l=V(e),t.appendChild(l)};const K=function(e){if(!l)return;const t=e.getGame().getRenderer().getDomElementContainer();if(!t){h(e,"The div element covering the game couldn't be found, the authentication banner cannot be displayed.");return}const n=l;l=V(e),t.replaceChild(l,n)},q=(e,t,n)=>new Promise(o=>{let i=!1;const s=e.getGame().isUsingGDevelopDevelopmentEnvironment()?`wss://api-ws-dev.gdevelop.io/play?gameId=${t}&connectionType=login`:`wss://api-ws.gdevelop.io/play?gameId=${t}&connectionType=login`;g=new WebSocket(s),g.onopen=()=>{a.info("Opened authentication websocket connection."),g&&g.send(JSON.stringify({action:"getConnectionId"}))},g.onerror=()=>{a.info("Error in authentication websocket connection."),i||(i=!0,o("errored")),h(e,"Error while connecting to the authentication server.")},g.onclose=()=>{a.info("Closing authentication websocket connection."),i||(i=!0,o("dismissed"))},g.onmessage=c=>{if(c.data){const C=JSON.parse(c.data);switch(C.type){case"authenticationResult":{const m=C.data;r.login({runtimeScene:e,userId:m.userId,username:m.username,userToken:m.token}),P(e),i=!0,o("logged");break}case"connectionId":{const E=C.data.connectionId;if(!E){a.error("No WebSocket connectionId received"),i=!0,o("errored");return}a.info("WebSocket connectionId received."),n({connectionId:E,resolve:o});break}}}}}),ne=(e,t)=>q(e,t,({connectionId:n})=>{const o=U({runtimeGame:e.getGame(),gameId:t,connectionId:n}),i=e.getGame().getRenderer().getElectron(),s=()=>i.shell.openExternal(o);s(),f&&u.addAuthenticationUrlToTextsContainer(s,f)}),oe=(e,t)=>q(e,t,({connectionId:n,resolve:o})=>{const i=U({runtimeGame:e.getGame(),gameId:t,connectionId:n});SafariViewController.isAvailable(function(s){s?SafariViewController.show({url:i,hidden:!1,animated:!0,transition:"slide",enterReaderModeIfAvailable:!1,barColor:"#000000",tintColor:"#ffffff",controlTintColor:"#ffffff"},function(c){c.event==="closed"&&o("dismissed")},function(c){a.log("Error opening webview: "+JSON.stringify(c)),o("errored")}):(a.error("Plugin SafariViewController is not available"),o("errored"))})}),ie=(e,t)=>new Promise(n=>{const o=U({runtimeGame:e.getGame(),gameId:t});let i=!1;v=E=>{_({runtimeScene:e,event:E,checkOrigin:!0,onDone:L=>{i||(i=!0,n(L))}})},window.addEventListener("message",v,!0);const s=screen.width/2-500/2,c=screen.height/2-600/2,C=`left=${s},top=${c},width=500,height=600`,m=()=>{D=window.open(o,"authentication",C)};m(),f&&u.addAuthenticationUrlToTextsContainer(m,f)}),ae=(e,t)=>new Promise(n=>{if(!W||!k||!f){a.error("Can't open an authentication iframe - no iframe container, loader container or text container was opened for it.");return}const o=U({runtimeGame:e.getGame(),gameId:t});v=i=>{_({runtimeScene:e,event:i,checkOrigin:!0,onDone:n})},window.addEventListener("message",v,!0),u.displayIframeInsideAuthenticationContainer(W,k,f,o)});r.openAuthenticationWindow=e=>new d.PromiseTask(new Promise(t=>{const n=e.getGame().getRenderer().getDomElementContainer();if(!n){h(e,"The div element covering the game couldn't be found, the authentication window cannot be displayed."),t({status:"errored"});return}const o=d.projectData.properties.projectUuid;if(!o){h(e,"The game ID is missing, the authentication window cannot be opened."),t({status:"errored"});return}let i=!1;const s=()=>{G(e),r.displayAuthenticationBanner(e),i=!0,t({status:"dismissed"})};l&&(l.style.opacity="0");const c=F(e),{rootContainer:C,loaderContainer:m,iframeContainer:E}=u.computeAuthenticationContainer(s);y=C,k=m,W=E,n.appendChild(y),(async()=>{const L=await B(e.getGame(),o);if(k){const z=e.getGame().getRenderer().getElectron(),de=z?()=>z.shell.openExternal("https://wiki.gdevelop.io/gdevelop5/publishing/web"):null;f=u.addAuthenticationTextsToLoadingContainer(k,c,L,de)}if(!L)return;ee(e);let T;switch(c){case"electron":T=await ne(e,o);break;case"cordova-websocket":T=await oe(e,o);break;case"web-iframe":T=await ae(e,o);break;case"web":default:T=await ie(e,o);break}i||(T==="dismissed"&&s(),t({status:T}))})()})),r.isAuthenticationWindowOpen=function(){return!!y},r.removeAuthenticationContainer=function(e){le();const t=e.getGame().getRenderer().getDomElementContainer();if(!t){a.info("The div element covering the game couldn't be found, the authentication must be already closed.");return}y&&t.removeChild(y),y=null,k=null,W=null,f=null};const le=function(){v&&(window.removeEventListener("message",v,!0),v=null)},$=function(){I&&(window.removeEventListener("message",I,!0),I=null),j&&(clearTimeout(j),j=null)};r.removeAuthenticationBanner=function(e){if(!l){a.info("The authentication banner couldn't be found, the authentication banner must be already closed.");return}const t=e.getGame().getRenderer().getDomElementContainer();if(!t){a.info("The div element covering the game couldn't be found, the authentication must be already closed.");return}t.removeChild(l),l=null};const P=function(e){const t=e.getGame().getRenderer().getCanvas();t&&t.focus()}})(Q=d.playerAuthentication||(d.playerAuthentication={}))})(gdjs||(gdjs={}));
|
|
2
2
|
//# sourceMappingURL=playerauthenticationtools.js.map
|