gdcore-tools 2.0.0-beta6 → 2.0.0-beta7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Runtime/Cordova/config.xml +4 -0
- package/dist/Runtime/Cordova/package.json +12 -20
- package/dist/Runtime/CustomRuntimeObject.js +1 -1
- package/dist/Runtime/CustomRuntimeObject.js.map +2 -2
- package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js +1 -1
- package/dist/Runtime/CustomRuntimeObjectInstanceContainer.js.map +2 -2
- 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/AmbientLight.js +1 -1
- package/dist/Runtime/Extensions/3D/AmbientLight.js.map +2 -2
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js +1 -1
- package/dist/Runtime/Extensions/3D/CustomRuntimeObject3D.js.map +2 -2
- 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/HemisphereLight.js +1 -1
- package/dist/Runtime/Extensions/3D/HemisphereLight.js.map +2 -2
- package/dist/Runtime/Extensions/3D/JsExtension.js +419 -228
- 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/AdvancedWindow/electron-advancedwindowtools.js +1 -1
- package/dist/Runtime/Extensions/AdvancedWindow/electron-advancedwindowtools.js.map +2 -2
- package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/BBText/JsExtension.js +45 -42
- 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 +40 -49
- package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/BitmapText/bitmaptextruntimeobject.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/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/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/glow-pixi-filter.js +1 -1
- package/dist/Runtime/Extensions/Effects/glow-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/ExampleJsExtension/JsExtension.js +18 -21
- package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js +1 -1
- package/dist/Runtime/Extensions/Firebase/B_firebasetools/C_firebasetools.js.map +2 -2
- package/dist/Runtime/Extensions/JsExtensionTypes.d.ts +8 -2
- 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 +50 -38
- package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/Multiplayer/JsExtension.js +15 -0
- package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js +1 -1
- package/dist/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Multiplayer/multiplayertools.js.map +2 -2
- package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/PanelSpriteObject/panelspriteruntimeobject.js.map +2 -2
- 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/Physics2Behavior/JsExtension.js +76 -24
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.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/shapepainterruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/Spine/JsExtension.js +45 -36
- package/dist/Runtime/Extensions/Spine/spineruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/Spine/spineruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TextInput/JsExtension.js +52 -55
- 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/textruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js.map +2 -2
- 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 +430 -261
- 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.js +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/TileMapHelper.js.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/model/TileMapModel.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts +1 -0
- package/dist/Runtime/Extensions/TileMap/helper/dts/render/TileMapPixiHelper.d.ts.map +1 -1
- package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TileMap/simpletilemapruntimeobject.js.map +2 -2
- 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.js +1 -1
- package/dist/Runtime/Extensions/TileMap/tilemapruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TiledSpriteObject/tiledspriteruntimeobject.js.map +2 -2
- package/dist/Runtime/Extensions/Video/JsExtension.js +35 -44
- package/dist/Runtime/Extensions/Video/videoruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/Video/videoruntimeobject.js.map +2 -2
- package/dist/Runtime/ResourceLoader.js +1 -1
- package/dist/Runtime/ResourceLoader.js.map +2 -2
- package/dist/Runtime/RuntimeInstanceContainer.js.map +2 -2
- package/dist/Runtime/debugger-client/hot-reloader.js +2 -2
- package/dist/Runtime/debugger-client/hot-reloader.js.map +2 -2
- package/dist/Runtime/events-tools/inputtools.js +1 -1
- package/dist/Runtime/events-tools/inputtools.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/gd.js +1 -1
- package/dist/Runtime/gd.js.map +2 -2
- package/dist/Runtime/howler-sound-manager/howler-sound-manager.js +1 -1
- package/dist/Runtime/howler-sound-manager/howler-sound-manager.js.map +2 -2
- package/dist/Runtime/inputmanager.js +1 -1
- package/dist/Runtime/inputmanager.js.map +2 -2
- package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.js +1 -1
- package/dist/Runtime/pixi-renderers/CustomRuntimeObject2DPixiRenderer.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/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/runtimegame.js +1 -1
- package/dist/Runtime/runtimegame.js.map +1 -1
- package/dist/Runtime/runtimeobject.js +1 -1
- package/dist/Runtime/runtimeobject.js.map +2 -2
- package/dist/Runtime/spriteruntimeobject.js +1 -1
- package/dist/Runtime/spriteruntimeobject.js.map +2 -2
- package/dist/Runtime/types/project-data.d.ts +5 -0
- package/dist/lib/libGD.cjs +1 -1
- package/dist/lib/libGD.d.cts +5 -0
- package/dist/lib/libGD.wasm +0 -0
- package/dist/loaders.d.cts +2 -0
- package/gd.d.ts +74 -30
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var gdjs;(function(
|
|
1
|
+
var gdjs;(function(p){let T;(function(u){const s=new p.Logger("Tilemap object");class M{constructor(e){this._instanceContainer=e,this._manager=new TileMapHelper.TileMapManager}static getManager(e){return e.tileMapCollisionMaskManager||(e.tileMapCollisionMaskManager=new M(e)),e.tileMapCollisionMaskManager}getOrLoadTileMap(e,t,i,r){this._manager.getOrLoadTileMap(this._loadTileMap.bind(this),e,t,i,pako,r)}getOrLoadSimpleTileMap(e,t,i,r,n,a){this._manager.getOrLoadSimpleTileMap(e,t,i,r,n,a)}getOrLoadTextureCache(e,t,i,r,n,a){this._manager.getOrLoadTextureCache(this._loadTileMap.bind(this),e,t,i,r,n,a)}getOrLoadSimpleTileMapTextureCache(e,t,i,r,n,a,l){try{this._manager.getOrLoadSimpleTileMapTextureCache(e,t,i,r,n,a)}catch(o){l(o)}}_loadTileMap(e,t,i){this._instanceContainer.getGame().getJsonManager().loadJson(e,(r,n)=>{if(r){s.error("An error happened while loading a Tilemap JSON data:",r),i(null);return}const a=TileMapHelper.TileMapManager.identify(n);if(!a){i(null);return}a.kind==="tiled"&&t?this._instanceContainer.getGame().getJsonManager().loadJson(t,(l,o)=>{if(l){s.error("An error happened while loading Tileset JSON data:",l),i(null);return}const g=a.data,d=o;d.firstgid=g.tilesets[0].firstgid,g.tilesets=[d],i(a)}):i(a)})}}u.TileMapRuntimeManager=M})(T=p.TileMap||(p.TileMap={}))})(gdjs||(gdjs={}));
|
|
2
2
|
//# sourceMappingURL=TileMapRuntimeManager.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../GDevelop/Extensions/TileMap/TileMapRuntimeManager.ts"],
|
|
4
|
-
"sourcesContent": ["/// <reference path=\"helper/TileMapHelper.d.ts\" />\nnamespace gdjs {\n export interface RuntimeInstanceContainer {\n tileMapCollisionMaskManager: gdjs.TileMap.TileMapRuntimeManager;\n }\n export namespace TileMap {\n const logger = new gdjs.Logger('Tilemap object');\n\n /**\n * A holder to share tile maps across the 2 extension objects.\n *\n * Every instance with the same files path in properties will\n * share the same {@link EditableTileMap} and {@link TileTextureCache}.\n *\n * To use a tile map with collisions, a user can create 4 objects:\n * - one for the the rendering\n * - one for the solid platforms\n * - one for the jumpthrus\n * - one for the ladders\n *\n * To avoid to have 4 copies of the same tile map in memory, this manager\n * puts the tile map in cache and avoid unnecessary parsing.\n *\n * @see {@link TileMapManager}\n */\n export class TileMapRuntimeManager {\n private _instanceContainer: gdjs.RuntimeInstanceContainer;\n /**\n * Delegate that actually manage the caches without anything specific to\n * GDJS.\n * It allows to factorize code with the IDE.\n */\n private _manager: TileMapHelper.TileMapManager;\n /**\n * @param instanceContainer The instance container.\n */\n private constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n this._instanceContainer = instanceContainer;\n this._manager = new TileMapHelper.TileMapManager();\n }\n\n /**\n * @param instanceContainer Where to set the manager instance.\n * @returns The shared manager.\n */\n static getManager(\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): TileMapRuntimeManager {\n if (!instanceContainer.tileMapCollisionMaskManager) {\n // Create the shared manager if necessary.\n instanceContainer.tileMapCollisionMaskManager = new TileMapRuntimeManager(\n instanceContainer\n );\n }\n return instanceContainer.tileMapCollisionMaskManager;\n }\n\n /**\n * @param tileMapJsonResourceName The resource name of the tile map.\n * @param tileSetJsonResourceName The resource name of the tile set.\n * @param levelIndex The level of the tile map.\n * @param callback A function called when the tile map is parsed.\n */\n getOrLoadTileMap(\n tileMapJsonResourceName: string,\n tileSetJsonResourceName: string,\n levelIndex: number,\n callback: (\n tileMapFileContent: TileMapHelper.EditableTileMap | null\n ) => void\n ): void {\n this._manager.getOrLoadTileMap(\n this._loadTileMap.bind(this),\n tileMapJsonResourceName,\n tileSetJsonResourceName,\n levelIndex,\n pako,\n callback\n );\n }\n\n getOrLoadSimpleTileMap(\n tileMapAsJsObject: TileMapHelper.EditableTileMapAsJsObject,\n objectName: string,\n tileSize: number,\n columnCount: number,\n rowCount: number,\n callback: (tileMap: TileMapHelper.EditableTileMap) => void\n ): void {\n this._manager.getOrLoadSimpleTileMap(\n tileMapAsJsObject,\n objectName,\n tileSize,\n columnCount,\n rowCount,\n callback\n );\n }\n\n /**\n * @param getTexture The method that loads the atlas image file in memory.\n * @param atlasImageResourceName The resource name of the atlas image.\n * @param tileMapJsonResourceName The resource name of the tile map.\n * @param tileSetJsonResourceName The resource name of the tile set.\n * @param levelIndex The level of the tile map.\n * @param callback A function called when the tiles textures are split.\n */\n getOrLoadTextureCache(\n getTexture: (textureName: string) => PIXI.BaseTexture<PIXI.Resource>,\n atlasImageResourceName: string,\n tileMapJsonResourceName: string,\n tileSetJsonResourceName: string,\n levelIndex: number,\n callback: (textureCache: TileMapHelper.TileTextureCache | null) => void\n ): void {\n this._manager.getOrLoadTextureCache(\n this._loadTileMap.bind(this),\n getTexture,\n atlasImageResourceName,\n tileMapJsonResourceName,\n tileSetJsonResourceName,\n levelIndex,\n callback\n );\n }\n\n /**\n * @param getTexture The method that loads the atlas image file in memory.\n * @param atlasImageResourceName The resource name of the atlas image.\n * @param tileSize\n * @param columnCount\n * @param rowCount\n * @param callback A function called when the tiles textures are split.\n */\n getOrLoadSimpleTileMapTextureCache(\n getTexture: (textureName: string) => PIXI.BaseTexture<PIXI.Resource>,\n atlasImageResourceName: string,\n tileSize: number,\n columnCount: number,\n rowCount: number,\n callback: (textureCache: TileMapHelper.TileTextureCache | null) => void\n ): void {\n this._manager.getOrLoadSimpleTileMapTextureCache(\n
|
|
5
|
-
"mappings": "AACA,GAAU,MAAV,UAAU,EAAV,CAIS,GAAU,GAAV,UAAU,EAAV,CACL,KAAM,GAAS,GAAI,GAAK,OAAO,kBAmBxB,OAA4B,CAWzB,YAAY,EAAkD,CACpE,KAAK,mBAAqB,EAC1B,KAAK,SAAW,GAAI,eAAc,qBAO7B,YACL,EACuB,CACvB,MAAK,GAAkB,6BAErB,GAAkB,4BAA8B,GAAI,GAClD,IAGG,EAAkB,4BAS3B,iBACE,EACA,EACA,EACA,EAGM,CACN,KAAK,SAAS,iBACZ,KAAK,aAAa,KAAK,MACvB,EACA,EACA,EACA,KACA,GAIJ,uBACE,EACA,EACA,EACA,EACA,EACA,EACM,CACN,KAAK,SAAS,uBACZ,EACA,EACA,EACA,EACA,EACA,GAYJ,sBACE,EACA,EACA,EACA,EACA,EACA,EACM,CACN,KAAK,SAAS,sBACZ,KAAK,aAAa,KAAK,MACvB,EACA,EACA,EACA,EACA,EACA,GAYJ,mCACE,EACA,EACA,EACA,EACA,EACA,EACM,CACN,KAAK,SAAS,mCACZ,EACA,EACA,EACA,EACA,EACA,
|
|
4
|
+
"sourcesContent": ["/// <reference path=\"helper/TileMapHelper.d.ts\" />\nnamespace gdjs {\n export interface RuntimeInstanceContainer {\n tileMapCollisionMaskManager: gdjs.TileMap.TileMapRuntimeManager;\n }\n export namespace TileMap {\n const logger = new gdjs.Logger('Tilemap object');\n\n /**\n * A holder to share tile maps across the 2 extension objects.\n *\n * Every instance with the same files path in properties will\n * share the same {@link EditableTileMap} and {@link TileTextureCache}.\n *\n * To use a tile map with collisions, a user can create 4 objects:\n * - one for the the rendering\n * - one for the solid platforms\n * - one for the jumpthrus\n * - one for the ladders\n *\n * To avoid to have 4 copies of the same tile map in memory, this manager\n * puts the tile map in cache and avoid unnecessary parsing.\n *\n * @see {@link TileMapManager}\n */\n export class TileMapRuntimeManager {\n private _instanceContainer: gdjs.RuntimeInstanceContainer;\n /**\n * Delegate that actually manage the caches without anything specific to\n * GDJS.\n * It allows to factorize code with the IDE.\n */\n private _manager: TileMapHelper.TileMapManager;\n /**\n * @param instanceContainer The instance container.\n */\n private constructor(instanceContainer: gdjs.RuntimeInstanceContainer) {\n this._instanceContainer = instanceContainer;\n this._manager = new TileMapHelper.TileMapManager();\n }\n\n /**\n * @param instanceContainer Where to set the manager instance.\n * @returns The shared manager.\n */\n static getManager(\n instanceContainer: gdjs.RuntimeInstanceContainer\n ): TileMapRuntimeManager {\n if (!instanceContainer.tileMapCollisionMaskManager) {\n // Create the shared manager if necessary.\n instanceContainer.tileMapCollisionMaskManager = new TileMapRuntimeManager(\n instanceContainer\n );\n }\n return instanceContainer.tileMapCollisionMaskManager;\n }\n\n /**\n * @param tileMapJsonResourceName The resource name of the tile map.\n * @param tileSetJsonResourceName The resource name of the tile set.\n * @param levelIndex The level of the tile map.\n * @param callback A function called when the tile map is parsed.\n */\n getOrLoadTileMap(\n tileMapJsonResourceName: string,\n tileSetJsonResourceName: string,\n levelIndex: number,\n callback: (\n tileMapFileContent: TileMapHelper.EditableTileMap | null\n ) => void\n ): void {\n this._manager.getOrLoadTileMap(\n this._loadTileMap.bind(this),\n tileMapJsonResourceName,\n tileSetJsonResourceName,\n levelIndex,\n pako,\n callback\n );\n }\n\n getOrLoadSimpleTileMap(\n tileMapAsJsObject: TileMapHelper.EditableTileMapAsJsObject,\n objectName: string,\n tileSize: number,\n columnCount: number,\n rowCount: number,\n callback: (tileMap: TileMapHelper.EditableTileMap) => void\n ): void {\n this._manager.getOrLoadSimpleTileMap(\n tileMapAsJsObject,\n objectName,\n tileSize,\n columnCount,\n rowCount,\n callback\n );\n }\n\n /**\n * @param getTexture The method that loads the atlas image file in memory.\n * @param atlasImageResourceName The resource name of the atlas image.\n * @param tileMapJsonResourceName The resource name of the tile map.\n * @param tileSetJsonResourceName The resource name of the tile set.\n * @param levelIndex The level of the tile map.\n * @param callback A function called when the tiles textures are split.\n */\n getOrLoadTextureCache(\n getTexture: (textureName: string) => PIXI.BaseTexture<PIXI.Resource>,\n atlasImageResourceName: string,\n tileMapJsonResourceName: string,\n tileSetJsonResourceName: string,\n levelIndex: number,\n callback: (textureCache: TileMapHelper.TileTextureCache | null) => void\n ): void {\n this._manager.getOrLoadTextureCache(\n this._loadTileMap.bind(this),\n getTexture,\n atlasImageResourceName,\n tileMapJsonResourceName,\n tileSetJsonResourceName,\n levelIndex,\n callback\n );\n }\n\n /**\n * @param getTexture The method that loads the atlas image file in memory.\n * @param atlasImageResourceName The resource name of the atlas image.\n * @param tileSize\n * @param columnCount\n * @param rowCount\n * @param callback A function called when the tiles textures are split.\n */\n getOrLoadSimpleTileMapTextureCache(\n getTexture: (textureName: string) => PIXI.BaseTexture<PIXI.Resource>,\n atlasImageResourceName: string,\n tileSize: number,\n columnCount: number,\n rowCount: number,\n callback: (textureCache: TileMapHelper.TileTextureCache | null) => void,\n errorCallback: (error: Error) => void\n ): void {\n try {\n this._manager.getOrLoadSimpleTileMapTextureCache(\n getTexture,\n atlasImageResourceName,\n tileSize,\n columnCount,\n rowCount,\n callback\n );\n } catch (error) {\n errorCallback(error);\n }\n }\n\n /**\n * Parse both JSON and set the content of the tile set in the right\n * attribute in the tile map to merge both parsed data.\n */\n private _loadTileMap(\n tileMapJsonResourceName: string,\n tileSetJsonResourceName: string,\n callback: (\n tileMapFileContent: TileMapHelper.TileMapFileContent | null\n ) => void\n ): void {\n this._instanceContainer\n .getGame()\n .getJsonManager()\n .loadJson(tileMapJsonResourceName, (error, tileMapJsonData) => {\n if (error) {\n logger.error(\n 'An error happened while loading a Tilemap JSON data:',\n error\n );\n callback(null);\n return;\n }\n const tileMapFileContent = TileMapHelper.TileMapManager.identify(\n tileMapJsonData\n );\n if (!tileMapFileContent) {\n callback(null);\n return;\n }\n if (\n tileMapFileContent.kind === 'tiled' &&\n tileSetJsonResourceName\n ) {\n this._instanceContainer\n .getGame()\n .getJsonManager()\n .loadJson(tileSetJsonResourceName, (error, tileSetJsonData) => {\n if (error) {\n logger.error(\n 'An error happened while loading Tileset JSON data:',\n error\n );\n callback(null);\n return;\n }\n const tiledMap = tileMapFileContent.data;\n const tileSet = tileSetJsonData as TileMapHelper.TiledTileset;\n tileSet.firstgid = tiledMap.tilesets[0].firstgid;\n tiledMap.tilesets = [tileSet];\n callback(tileMapFileContent);\n });\n } else {\n callback(tileMapFileContent);\n }\n });\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,GAAU,MAAV,UAAU,EAAV,CAIS,GAAU,GAAV,UAAU,EAAV,CACL,KAAM,GAAS,GAAI,GAAK,OAAO,kBAmBxB,OAA4B,CAWzB,YAAY,EAAkD,CACpE,KAAK,mBAAqB,EAC1B,KAAK,SAAW,GAAI,eAAc,qBAO7B,YACL,EACuB,CACvB,MAAK,GAAkB,6BAErB,GAAkB,4BAA8B,GAAI,GAClD,IAGG,EAAkB,4BAS3B,iBACE,EACA,EACA,EACA,EAGM,CACN,KAAK,SAAS,iBACZ,KAAK,aAAa,KAAK,MACvB,EACA,EACA,EACA,KACA,GAIJ,uBACE,EACA,EACA,EACA,EACA,EACA,EACM,CACN,KAAK,SAAS,uBACZ,EACA,EACA,EACA,EACA,EACA,GAYJ,sBACE,EACA,EACA,EACA,EACA,EACA,EACM,CACN,KAAK,SAAS,sBACZ,KAAK,aAAa,KAAK,MACvB,EACA,EACA,EACA,EACA,EACA,GAYJ,mCACE,EACA,EACA,EACA,EACA,EACA,EACA,EACM,CACN,GAAI,CACF,KAAK,SAAS,mCACZ,EACA,EACA,EACA,EACA,EACA,SAEK,EAAP,CACA,EAAc,IAQV,aACN,EACA,EACA,EAGM,CACN,KAAK,mBACF,UACA,iBACA,SAAS,EAAyB,CAAC,EAAO,IAAoB,CAC7D,GAAI,EAAO,CACT,EAAO,MACL,uDACA,GAEF,EAAS,MACT,OAEF,KAAM,GAAqB,cAAc,eAAe,SACtD,GAEF,GAAI,CAAC,EAAoB,CACvB,EAAS,MACT,OAEF,AACE,EAAmB,OAAS,SAC5B,EAEA,KAAK,mBACF,UACA,iBACA,SAAS,EAAyB,CAAC,EAAO,IAAoB,CAC7D,GAAI,EAAO,CACT,EAAO,MACL,qDACA,GAEF,EAAS,MACT,OAEF,KAAM,GAAW,EAAmB,KAC9B,EAAU,EAChB,EAAQ,SAAW,EAAS,SAAS,GAAG,SACxC,EAAS,SAAW,CAAC,GACrB,EAAS,KAGb,EAAS,MAzLZ,EAAM,0BApBE,+BAJT",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var gdjs;(function(
|
|
1
|
+
var gdjs;(function(y){let v;(function(P){const T=class{constructor(t,e,i=null){this._transformation=new y.AffineTransformation;this._inverseTransformation=new y.AffineTransformation;this._transformationUpToDateCount=1;this._source=t,this.tag=e,this._layerIndex=i,this._layers=new Map,this._buildLayersFromTileMap(t,this._layers)}updateFromTileMap(t){this._source=t,this._layers=new Map,this._buildLayersFromTileMap(t,this._layers)}_buildLayersFromTileMap(t,e){if(this._layerIndex){const i=t.getTileLayer(this._layerIndex);if(!i)return;e.set(i.id,new D(this,i))}else for(const i of t.getLayers()){if(!(i instanceof TileMapHelper.EditableTileMapLayer))continue;const n=i;e.set(n.id,new D(this,n))}}getTransformation(){return this._transformation}setTransformation(t){this._transformation=t;const e=this._inverseTransformation;e.copyFrom(t),e.invert(),this._invalidate()}_invalidate(){this._transformationUpToDateCount=(this._transformationUpToDateCount+1)%Number.MAX_SAFE_INTEGER}invalidateTile(t,e,i){const n=this.getLayer(t);if(n){const s=n.get(e,i);s&&s.invalidate()}}getWidth(){return this._source.getWidth()}getHeight(){return this._source.getHeight()}getTileHeight(){return this._source.getTileHeight()}getTileWidth(){return this._source.getTileWidth()}getDimensionX(){return this._source.getDimensionX()}getDimensionY(){return this._source.getDimensionY()}getTileDefinition(t){return this._source.getTileDefinition(t)}getLayer(t){return this._layers.get(t)}getLayers(){return this._layers.values()}pointIsInsideTile(t,e,i){const n=T.workingPoint;return n[0]=t,n[1]=e,this._inverseTransformation.transform(n,n),this._source.pointIsInsideTile(n[0],n[1],i)}getHitboxesAround(t,e,i,n,s){const o=this._inverseTransformation,r=T.workingPoint;r[0]=e,r[1]=i,o.transform(r,r);const h=r[0],a=r[1];r[0]=n,r[1]=i,o.transform(r,r);const p=r[0],f=r[1];r[0]=n,r[1]=s,o.transform(r,r);const g=r[0],l=r[1];r[0]=e,r[1]=s,o.transform(r,r);const x=r[0],u=r[1],B=Math.max(0,Math.floor(Math.min(h,p,g,x)/this._source.getTileWidth())),I=Math.min(this.getDimensionX()-1,Math.floor(Math.max(h,p,g,x)/this._source.getTileWidth())),L=Math.max(0,Math.floor(Math.min(a,f,l,u)/this._source.getTileHeight())),F=Math.min(this.getDimensionY()-1,Math.floor(Math.max(a,f,l,u)/this._source.getTileHeight()));return this.getHitboxes(t,B,L,I,F)}getHitboxes(t,e,i,n,s){return new d(this,t,e,i,n,s)}getAllHitboxes(t){return this.getHitboxes(t,0,0,this._source.getDimensionX()-1,this._source.getDimensionY()-1)}};let H=T;H.workingPoint=[0,0],P.TransformedCollisionTileMap=H;const _=class{constructor(t,e,i,n,s,o){this.map=t,this.tag=e,this.xMin=i,this.yMin=n,this.xMax=s,this.yMax=o}[Symbol.iterator](){let t=this.map.getLayers()[Symbol.iterator](),e=_.emptyItr;return{next:()=>{let i=e.next();for(;i.done;){const n=t.next();if(n.done)return i;e=n.value.getHitboxes(this.tag,this.xMin,this.yMin,this.xMax,this.yMax)[Symbol.iterator](),i=e.next()}return i}}}};let d=_;d.emptyItr={next:()=>({value:void 0,done:!0})};class D{constructor(t,e){this.tileMap=t,this._source=e,this._tiles=[];const i=this._source.getDimensionX(),n=this._source.getDimensionY();this._tiles.length=n;for(let s=0;s<n;s++){this._tiles[s]=[],this._tiles[s].length=i;for(let o=0;o<i;o++)this._tiles[s][o]=new M(this,o,s)}}get(t,e){const i=this._tiles[e];return i?i[t]:void 0}getDimensionX(){return this._tiles.length===0?0:this._tiles[0].length}getDimensionY(){return this._tiles.length}getWidth(){return this._source.getWidth()}getHeight(){return this._source.getHeight()}isFlippedDiagonally(t,e){return this._source.isFlippedDiagonally(t,e)}isFlippedVertically(t,e){return this._source.isFlippedVertically(t,e)}isFlippedHorizontally(t,e){return this._source.isFlippedHorizontally(t,e)}getHitboxes(t,e,i,n,s){return new m(this,t,e,i,n,s)}getAllHitboxes(t){return this.getHitboxes(t,0,0,this.getDimensionX()-1,this.getDimensionY()-1)}}P.TransformedCollisionTileMapLayer=D;const b=class{constructor(t,e,i,n,s,o){this.layer=t,this.tag=e,this.xMin=i,this.yMin=n,this.xMax=s,this.yMax=o}[Symbol.iterator](){let t=this.xMax,e=this.yMin-1,i=b.emptyItr;return{next:()=>{let n=i.next();for(;n.done;){if(t++,t>this.xMax&&(e++,t=this.xMin),e>this.yMax)return n;const s=this.layer.get(t,e);if(!s)continue;const o=s.getDefinition();!o||o.hasTaggedHitBox(this.tag)&&(i=s.getHitboxes()[Symbol.iterator](),n=i.next())}return n}}}};let m=b;m.emptyItr={next:()=>({value:void 0,done:!0})};const c=class{constructor(t,e,i){this.affineTransformationUpToDateCount=0;this.layer=t,this.x=e,this.y=i;const n=this.getDefinition();if(this.hitBoxes=[],n){const s=this.layer.tileMap.tag,o=n.getHitBoxes(s);if(o){this.hitBoxes.length=o.length;for(let r=0;r<this.hitBoxes.length;r++){const h=new y.Polygon;this.hitBoxes[r]=h,h.vertices.length=o[r].length;for(let a=0;a<h.vertices.length;a++)h.vertices[a]=[0,0]}}}}getDefinition(){return this.layer.tileMap.getTileDefinition(this.layer._source.getTileId(this.x,this.y))}_isHitboxesUpToDate(){return this.affineTransformationUpToDateCount===this.layer.tileMap._transformationUpToDateCount}_setHitboxesUpToDate(){this.affineTransformationUpToDateCount=this.layer.tileMap._transformationUpToDateCount}invalidate(){this.affineTransformationUpToDateCount=-1;let t=this.layer.get(this.x-1,this.y);t&&(t.affineTransformationUpToDateCount=-1),t=this.layer.get(this.x+1,this.y),t&&(t.affineTransformationUpToDateCount=-1),t=this.layer.get(this.x,this.y-1),t&&(t.affineTransformationUpToDateCount=-1),t=this.layer.get(this.x,this.y+1),t&&(t.affineTransformationUpToDateCount=-1)}getHitboxes(){if(this._isHitboxesUpToDate())return this.hitBoxes;const t=this.getDefinition();if(!t)return this._setHitboxesUpToDate(),this.hitBoxes.length=0,this.hitBoxes;const e=this.layer.tileMap.tag,i=t.getHitBoxes(e);if(!i)return this._setHitboxesUpToDate(),this.hitBoxes.length=0,this.hitBoxes;const n=this.layer.tileMap,s=n.getTileWidth(),o=n.getTileHeight(),r=i.length===1&&t.hasFullHitBox(e);if(r){const a=this._hasNeighborFullHitBox(-1,0),p=this._hasNeighborFullHitBox(1,0),f=this._hasNeighborFullHitBox(0,-1),g=this._hasNeighborFullHitBox(0,1);let l=0;if(a||p){let x=a?-s:0,u=p?2*s:s;l>=this.hitBoxes.length&&(this.hitBoxes[l]=y.Polygon.createRectangle(0,0)),c.setRectangle(this.hitBoxes[l],x,0,u,o),l++}if(f||g){let x=f?-o:0,u=g?2*o:o;l>=this.hitBoxes.length&&(this.hitBoxes[l]=y.Polygon.createRectangle(0,0)),c.setRectangle(this.hitBoxes[l],0,x,s,u),l++}l===0&&(this.hitBoxes.length===0&&(this.hitBoxes[0]=y.Polygon.createRectangle(0,0)),c.setRectangle(this.hitBoxes[0],0,0,s,o),l++),this.hitBoxes.length=l}else for(let a=0;a<i.length;a++){const p=i[a];a>=this.hitBoxes.length&&(this.hitBoxes[a]=y.Polygon.createRectangle(0,0));const f=this.hitBoxes[a];for(let g=0;g<f.vertices.length;g++){const l=p[g],x=f.vertices[g];x[0]=l[0],x[1]=l[1]}}const h=c.workingTransformation;h.setToTranslation(s*this.x,o*this.y),r||(this.layer.isFlippedHorizontally(this.x,this.y)&&h.flipX(s/2),this.layer.isFlippedVertically(this.x,this.y)&&h.flipY(o/2),this.layer.isFlippedDiagonally(this.x,this.y)&&(h.flipX(s/2),h.rotateAround(Math.PI/2,s/2,o/2))),h.preConcatenate(n.getTransformation());for(let a=0;a<this.hitBoxes.length;a++){const p=this.hitBoxes[a];for(let f=0;f<p.vertices.length;f++){const g=p.vertices[f];h.transform(g,g)}}return this._setHitboxesUpToDate(),this.hitBoxes}_hasNeighborFullHitBox(t,e){const n=this.layer._source.getTileId(this.x+t,this.y+e),s=n&&this.layer.tileMap.getTileDefinition(n);return s&&s.hasFullHitBox(this.layer.tileMap.tag)}static setRectangle(t,e,i,n,s){const o=t.vertices;o[0][0]=e,o[0][1]=i,o[1][0]=n,o[1][1]=i,o[2][0]=n,o[2][1]=s,o[3][0]=e,o[3][1]=s}};let M=c;M.workingTransformation=new y.AffineTransformation})(v=y.TileMap||(y.TileMap={}))})(gdjs||(gdjs={}));
|
|
2
2
|
//# sourceMappingURL=TransformedTileMap.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../GDevelop/Extensions/TileMap/collision/TransformedTileMap.ts"],
|
|
4
|
-
"sourcesContent": ["/// <reference path=\"../helper/TileMapHelper.d.ts\" />\nnamespace gdjs {\n export namespace TileMap {\n /**\n * A tile map transformed with an affine transformation.\n *\n * @see {@link getHitboxesAround} It gives a fast access to hitboxes for collision handling.\n */\n export class TransformedCollisionTileMap {\n /**\n * The model that describes the tile map.\n */\n private _source: TileMapHelper.EditableTileMap;\n tag: string;\n private _layers: Map<integer, TransformedCollisionTileMapLayer>;\n // TODO Tiled allows to offset the layers\n /**\n * The transformation from the time map coordinate (in pixels)\n * to the scene coordinate (in pixels).\n */\n private _transformation: gdjs.AffineTransformation = new gdjs.AffineTransformation();\n /**\n * The transformation from the scene coordinate (in pixels)\n * to the time map coordinate (in pixels).\n */\n private _inverseTransformation: gdjs.AffineTransformation = new gdjs.AffineTransformation();\n /**\n * This allows tiles to know if their hitboxes must be updated.\n * @see {@link TransformedCollisionTile.affineTransformationUpToDateCount}\n */\n _transformationUpToDateCount: integer = 1;\n /**\n * A reusable Point to avoid allocations.\n */\n private static readonly workingPoint: FloatPoint = [0, 0];\n\n /**\n * @param source The model that describes the tile map.\n */\n constructor(source: TileMapHelper.EditableTileMap, tag: string) {\n this._source = source;\n this.tag = tag;\n this._layers = new Map<integer, TransformedCollisionTileMapLayer>();\n this._buildLayersFromTileMap(source, this._layers);\n }\n\n updateFromTileMap(tileMap: TileMapHelper.EditableTileMap) {\n this._source = tileMap;\n this._layers = new Map<integer, TransformedCollisionTileMapLayer>();\n\n this._buildLayersFromTileMap(tileMap, this._layers);\n }\n\n _buildLayersFromTileMap(\n tileMap: TileMapHelper.EditableTileMap,\n layers: Map<integer, TransformedCollisionTileMapLayer>\n ) {\n for (const sourceLayer of tileMap.getLayers()) {\n // TODO A visitor could be used to avoid a cast.\n if (!(sourceLayer instanceof TileMapHelper.EditableTileMapLayer)) {\n // TODO Collision mask for object layers is not handled.\n continue;\n }\n const tileLayer = sourceLayer as TileMapHelper.EditableTileMapLayer;\n layers.set(\n tileLayer.id,\n new TransformedCollisionTileMapLayer(this, tileLayer)\n );\n }\n }\n\n /**\n * @returns The transformation from the time map coordinate (in pixels)\n * to the scene coordinate (in pixels).\n */\n getTransformation(): gdjs.AffineTransformation {\n return this._transformation;\n }\n\n /**\n * @param transformation the transformation from the tile map coordinate\n * (in pixels) to the scene coordinate (in pixels).\n */\n setTransformation(transformation: gdjs.AffineTransformation) {\n this._transformation = transformation;\n\n const inverseTransformation = this._inverseTransformation;\n inverseTransformation.copyFrom(transformation);\n inverseTransformation.invert();\n\n this._invalidate();\n }\n\n private _invalidate() {\n this._transformationUpToDateCount =\n (this._transformationUpToDateCount + 1) % Number.MAX_SAFE_INTEGER;\n }\n\n invalidateTile(layerIndex: integer, x: integer, y: integer) {\n const layer = this.getLayer(layerIndex);\n if (layer) {\n const tile = layer.get(x, y);\n if (tile) {\n tile.invalidate();\n }\n }\n }\n\n /**\n * @returns The tile map width in pixels.\n */\n getWidth() {\n return this._source.getWidth();\n }\n\n /**\n * @returns The tile map height in pixels.\n */\n getHeight() {\n return this._source.getHeight();\n }\n\n /**\n * @returns The tile width in pixels.\n */\n getTileHeight() {\n return this._source.getTileHeight();\n }\n\n /**\n * @returns The tile height in pixels.\n */\n getTileWidth() {\n return this._source.getTileWidth();\n }\n\n /**\n * @returns The number of tile columns in the map.\n */\n getDimensionX() {\n return this._source.getDimensionX();\n }\n\n /**\n * @returns The number of tile rows in the map.\n */\n getDimensionY() {\n return this._source.getDimensionY();\n }\n\n /**\n * @param tileId The tile identifier\n * @returns The tile definition form the tile set.\n */\n getTileDefinition(tileId: integer) {\n return this._source.getTileDefinition(tileId);\n }\n\n /**\n * @param layerId The layer identifier.\n * @returns the layer\n */\n getLayer(layerId: integer): TransformedCollisionTileMapLayer | undefined {\n return this._layers.get(layerId);\n }\n\n /**\n * @returns All the layers of the tile map.\n */\n getLayers(): Iterable<TransformedCollisionTileMapLayer> {\n return this._layers.values();\n }\n\n /**\n * Check if a point is inside a tile with a given tag.\n *\n * It doesn't use the tile hitboxes.\n * It only check the point is inside the tile square.\n *\n * @param x The X coordinate of the point to check.\n * @param y The Y coordinate of the point to check.\n * @param tag The tile tag\n * @returns true when the point is inside a tile with a given tag.\n */\n pointIsInsideTile(x: float, y: float, tag: string): boolean {\n const workingPoint: FloatPoint =\n TransformedCollisionTileMap.workingPoint;\n workingPoint[0] = x;\n workingPoint[1] = y;\n this._inverseTransformation.transform(workingPoint, workingPoint);\n return this._source.pointIsInsideTile(\n workingPoint[0],\n workingPoint[1],\n tag\n );\n }\n\n /**\n * @param tag The tile tag.\n * @param left The left border of the area in the scene.\n * @param top The top border of the area in the scene.\n * @param right The right border of the area in the scene.\n * @param bottom The left border of the area in the scene.\n * @returns At least all the hitboxes from the given area\n * where tiles have the right tag.\n *\n * @see {@link gdjs.RuntimeObject.getHitboxesAround}\n */\n getHitboxesAround(\n tag: string,\n left: float,\n top: float,\n right: float,\n bottom: float\n ): Iterable<gdjs.Polygon> {\n // Return the hitboxes from the tiles that overlap\n // the AABB of the area in the tile map basis.\n // Some of these tiles are not event in the given area\n // but this is a good trade of between the number of\n // useless returned hitboxes and the time to find them.\n\n // Transform the vertices of the area\n // from the scene basis to the tile map basis.\n const inverseTransformation = this._inverseTransformation;\n const workingPoint: FloatPoint =\n TransformedCollisionTileMap.workingPoint;\n\n workingPoint[0] = left;\n workingPoint[1] = top;\n inverseTransformation.transform(workingPoint, workingPoint);\n const topLeftX = workingPoint[0];\n const topLeftY = workingPoint[1];\n\n workingPoint[0] = right;\n workingPoint[1] = top;\n inverseTransformation.transform(workingPoint, workingPoint);\n const topRightX = workingPoint[0];\n const topRightY = workingPoint[1];\n\n workingPoint[0] = right;\n workingPoint[1] = bottom;\n inverseTransformation.transform(workingPoint, workingPoint);\n const bottomRightX = workingPoint[0];\n const bottomRightY = workingPoint[1];\n\n workingPoint[0] = left;\n workingPoint[1] = bottom;\n inverseTransformation.transform(workingPoint, workingPoint);\n const bottomLeftX = workingPoint[0];\n const bottomLeftY = workingPoint[1];\n\n // Calculate the AABB of the area in the tile map basis.\n const xMin = Math.max(\n 0,\n Math.floor(\n Math.min(topLeftX, topRightX, bottomRightX, bottomLeftX) /\n this._source.getTileWidth()\n )\n );\n const xMax = Math.min(\n this.getDimensionX() - 1,\n Math.floor(\n Math.max(topLeftX, topRightX, bottomRightX, bottomLeftX) /\n this._source.getTileWidth()\n )\n );\n const yMin = Math.max(\n 0,\n Math.floor(\n Math.min(topLeftY, topRightY, bottomRightY, bottomLeftY) /\n this._source.getTileHeight()\n )\n );\n const yMax = Math.min(\n this.getDimensionY() - 1,\n Math.floor(\n Math.max(topLeftY, topRightY, bottomRightY, bottomLeftY) /\n this._source.getTileHeight()\n )\n );\n\n return this.getHitboxes(tag, xMin, yMin, xMax, yMax);\n }\n\n /**\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n * @returns All the hitboxes from the tiles overlapping\n * the given area where tiles have the right tag.\n */\n getHitboxes(\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ): Iterable<gdjs.Polygon> {\n return new MapCollisionMaskIterable(this, tag, xMin, yMin, xMax, yMax);\n }\n\n /**\n * @param tag The tile tag.\n * @returns All the hitboxes from the tiles having the right tag.\n */\n getAllHitboxes(tag: string): Iterable<gdjs.Polygon> {\n return this.getHitboxes(\n tag,\n 0,\n 0,\n this._source.getDimensionX() - 1,\n this._source.getDimensionY() - 1\n );\n }\n }\n\n /**\n * Iterable over the tile hitboxes of a given area and tag.\n */\n class MapCollisionMaskIterable implements Iterable<gdjs.Polygon> {\n map: TransformedCollisionTileMap;\n tag: string;\n xMin: integer;\n yMin: integer;\n xMax: integer;\n yMax: integer;\n\n /**\n * Avoid to allocate an empty iterator each time\n * the iterable is initialized.\n */\n static emptyItr: Iterator<gdjs.Polygon> = {\n next: () => ({ value: undefined, done: true }),\n };\n\n /**\n * @param map The tile map.\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n */\n constructor(\n map: TransformedCollisionTileMap,\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ) {\n this.map = map;\n this.tag = tag;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n }\n\n [Symbol.iterator]() {\n // Flatten the iterable of each layers into one.\n let layerItr = this.map.getLayers()[Symbol.iterator]();\n let listItr: Iterator<gdjs.Polygon> = MapCollisionMaskIterable.emptyItr;\n\n return {\n next: () => {\n let listNext = listItr.next();\n while (listNext.done) {\n const layerNext = layerItr.next();\n if (layerNext.done) {\n return listNext;\n }\n listItr = layerNext.value\n .getHitboxes(\n this.tag,\n this.xMin,\n this.yMin,\n this.xMax,\n this.yMax\n )\n [Symbol.iterator]();\n listNext = listItr.next();\n }\n return listNext;\n },\n };\n }\n }\n\n /**\n * A tile map layer transformed with an affine transformation.\n */\n export class TransformedCollisionTileMapLayer {\n /**\n * The time map that contains this layer.\n */\n readonly tileMap: TransformedCollisionTileMap;\n /**\n * The model that describes the tile map.\n */\n readonly _source: TileMapHelper.EditableTileMapLayer;\n private readonly _tiles: TransformedCollisionTile[][];\n\n /**\n * @param tileMap The time map that contains this layer.\n * @param source The model that describes the tile map.\n */\n constructor(\n tileMap: TransformedCollisionTileMap,\n source: TileMapHelper.EditableTileMapLayer\n ) {\n this.tileMap = tileMap;\n this._source = source;\n this._tiles = [];\n const dimX = this._source.getDimensionX();\n const dimY = this._source.getDimensionY();\n this._tiles.length = dimY;\n for (let y = 0; y < dimY; y++) {\n this._tiles[y] = [];\n this._tiles[y].length = dimX;\n for (let x = 0; x < dimX; x++) {\n this._tiles[y][x] = new TransformedCollisionTile(this, x, y);\n }\n }\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @return The tile from the tile set.\n */\n get(x: integer, y: integer): TransformedCollisionTile | undefined {\n const row = this._tiles[y];\n return row ? row[x] : undefined;\n }\n\n /**\n * The number of tile columns in the layer.\n */\n getDimensionX() {\n return this._tiles.length === 0 ? 0 : this._tiles[0].length;\n }\n\n /**\n * The number of tile rows in the layer.\n */\n getDimensionY() {\n return this._tiles.length;\n }\n\n /**\n * @returns The layer width in pixels.\n */\n getWidth() {\n return this._source.getWidth();\n }\n\n /**\n * @returns The layer height in pixels.\n */\n getHeight() {\n return this._source.getHeight();\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @returns true if the tile is flipped diagonally.\n */\n isFlippedDiagonally(x: integer, y: integer) {\n return this._source.isFlippedDiagonally(x, y);\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @returns true if the tile is flipped vertically.\n */\n isFlippedVertically(x: integer, y: integer) {\n return this._source.isFlippedVertically(x, y);\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @returns true if the tile is flipped horizontally.\n */\n isFlippedHorizontally(x: integer, y: integer) {\n return this._source.isFlippedHorizontally(x, y);\n }\n /**\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n * @returns All the hitboxes from the tiles overlapping\n * the given area where tiles have the right tag.\n */\n getHitboxes(\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ): Iterable<gdjs.Polygon> {\n return new LayerCollisionMaskIterable(\n this,\n tag,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n\n /**\n * @param tag The tile tag.\n * @returns All the hitboxes from the tiles having the right tag.\n */\n getAllHitboxes(tag: string): Iterable<gdjs.Polygon> {\n return this.getHitboxes(\n tag,\n 0,\n 0,\n this.getDimensionX() - 1,\n this.getDimensionY() - 1\n );\n }\n }\n\n /**\n * Iterable over the tile hitboxes of a given area and tag.\n */\n class LayerCollisionMaskIterable implements Iterable<gdjs.Polygon> {\n layer: TransformedCollisionTileMapLayer;\n tag: string;\n xMin: integer;\n yMin: integer;\n xMax: integer;\n yMax: integer;\n\n /**\n * Avoid to allocate an empty iterator each time\n * the iterable is initialized.\n */\n static emptyItr: Iterator<gdjs.Polygon> = {\n next: () => ({ value: undefined, done: true }),\n };\n\n /**\n * @param map The tile map.\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n */\n constructor(\n layer: TransformedCollisionTileMapLayer,\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ) {\n this.layer = layer;\n this.tag = tag;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n }\n\n [Symbol.iterator]() {\n // Flatten the iterable of each tile into one.\n\n // xMin and yMin next increment\n let x = this.xMax;\n let y = this.yMin - 1;\n let polygonItr: Iterator<gdjs.Polygon> =\n LayerCollisionMaskIterable.emptyItr;\n\n return {\n next: () => {\n let listNext = polygonItr.next();\n while (listNext.done) {\n x++;\n if (x > this.xMax) {\n y++;\n x = this.xMin;\n }\n if (y > this.yMax) {\n // done\n return listNext;\n }\n const tile = this.layer.get(x, y);\n if (!tile) {\n continue;\n }\n const definition = tile.getDefinition();\n if (!definition) {\n continue;\n }\n if (definition.hasTaggedHitBox(this.tag)) {\n polygonItr = tile.getHitboxes()[Symbol.iterator]();\n listNext = polygonItr.next();\n }\n }\n return listNext;\n },\n };\n }\n }\n\n /**\n * A tile transformed with an affine transformation.\n */\n class TransformedCollisionTile {\n /**\n * The layer that contains this tile.\n */\n readonly layer: TransformedCollisionTileMapLayer;\n /**\n * The column index in the layer.\n */\n readonly x: integer;\n /**\n * The row index in the layer.\n */\n readonly y: integer;\n private readonly hitBoxes: gdjs.Polygon[];\n private affineTransformationUpToDateCount: integer = 0;\n\n /**\n * An reusable AffineTransformation to avoid allocations.\n */\n private static readonly workingTransformation: gdjs.AffineTransformation = new gdjs.AffineTransformation();\n\n /**\n *\n * @param layer The layer that contains this tile.\n * @param x The column index in the layer.\n * @param y The row index in the layer.\n */\n constructor(\n layer: TransformedCollisionTileMapLayer,\n x: integer,\n y: integer\n ) {\n this.layer = layer;\n this.x = x;\n this.y = y;\n const definition = this.getDefinition();\n this.hitBoxes = [];\n if (definition) {\n const tag = this.layer.tileMap.tag;\n const definitionHitboxes = definition.getHitBoxes(tag);\n if (definitionHitboxes) {\n this.hitBoxes.length = definitionHitboxes.length;\n for (\n let polygonIndex = 0;\n polygonIndex < this.hitBoxes.length;\n polygonIndex++\n ) {\n const polygon = new gdjs.Polygon();\n this.hitBoxes[polygonIndex] = polygon;\n polygon.vertices.length = definitionHitboxes[polygonIndex].length;\n for (\n let vertexIndex = 0;\n vertexIndex < polygon.vertices.length;\n vertexIndex++\n ) {\n polygon.vertices[vertexIndex] = [0, 0];\n }\n }\n }\n }\n }\n\n /**\n * @returns The tile definition from the tile set.\n */\n getDefinition(): TileMapHelper.TileDefinition {\n return this.layer.tileMap.getTileDefinition(\n this.layer._source.getTileId(this.x, this.y)!\n )!;\n }\n\n private _isHitboxesUpToDate() {\n return (\n this.affineTransformationUpToDateCount ===\n this.layer.tileMap._transformationUpToDateCount\n );\n }\n\n private _setHitboxesUpToDate() {\n this.affineTransformationUpToDateCount = this.layer.tileMap._transformationUpToDateCount;\n }\n\n invalidate() {\n this.affineTransformationUpToDateCount = -1;\n // Also invalidate neighbors because their hit boxes may need to be\n // extended differently.\n let neighbor = this.layer.get(this.x - 1, this.y);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n neighbor = this.layer.get(this.x + 1, this.y);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n neighbor = this.layer.get(this.x, this.y - 1);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n neighbor = this.layer.get(this.x, this.y + 1);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n }\n\n /**\n * @returns The hitboxes of this tile in the scene basis.\n */\n getHitboxes(): Polygon[] {\n if (this._isHitboxesUpToDate()) {\n return this.hitBoxes;\n }\n\n const definition = this.getDefinition();\n if (!definition) {\n this._setHitboxesUpToDate();\n this.hitBoxes.length = 0;\n return this.hitBoxes;\n }\n const tag = this.layer.tileMap.tag;\n const definitionHitboxes = definition.getHitBoxes(tag);\n if (!definitionHitboxes) {\n this._setHitboxesUpToDate();\n this.hitBoxes.length = 0;\n return this.hitBoxes;\n }\n\n const tileMap = this.layer.tileMap;\n const width = tileMap.getTileWidth();\n const height = tileMap.getTileHeight();\n\n // Extend the hit boxes.\n // It avoids small objects to be pushed side way into a wall when they\n // should be pop out of the wall.\n\n const hasFullHitBox =\n definitionHitboxes.length === 1 && definition.hasFullHitBox(tag);\n if (hasFullHitBox) {\n const isLeftFull = this._hasNeighborFullHitBox(-1, 0);\n const isRightFull = this._hasNeighborFullHitBox(1, 0);\n const isTopFull = this._hasNeighborFullHitBox(0, -1);\n const isBottomFull = this._hasNeighborFullHitBox(0, 1);\n\n let hitBoxesCount = 0;\n if (isLeftFull || isRightFull) {\n let minX = isLeftFull ? -width : 0;\n let maxX = isRightFull ? 2 * width : width;\n if (hitBoxesCount >= this.hitBoxes.length) {\n this.hitBoxes[hitBoxesCount] = gdjs.Polygon.createRectangle(0, 0);\n }\n TransformedCollisionTile.setRectangle(\n this.hitBoxes[hitBoxesCount],\n minX,\n 0,\n maxX,\n height\n );\n hitBoxesCount++;\n }\n if (isTopFull || isBottomFull) {\n let minY = isTopFull ? -height : 0;\n let maxY = isBottomFull ? 2 * height : height;\n if (hitBoxesCount >= this.hitBoxes.length) {\n this.hitBoxes[hitBoxesCount] = gdjs.Polygon.createRectangle(0, 0);\n }\n TransformedCollisionTile.setRectangle(\n this.hitBoxes[hitBoxesCount],\n 0,\n minY,\n width,\n maxY\n );\n hitBoxesCount++;\n }\n if (hitBoxesCount === 0) {\n if (this.hitBoxes.length === 0) {\n this.hitBoxes[0] = gdjs.Polygon.createRectangle(0, 0);\n }\n TransformedCollisionTile.setRectangle(\n this.hitBoxes[0],\n 0,\n 0,\n width,\n height\n );\n hitBoxesCount++;\n }\n this.hitBoxes.length = hitBoxesCount;\n } else {\n for (\n let polygonIndex = 0;\n polygonIndex < definitionHitboxes.length;\n polygonIndex++\n ) {\n const defPolygon = definitionHitboxes[polygonIndex];\n if (polygonIndex >= this.hitBoxes.length) {\n // This can't happen in practice as only the simple tile map can be\n // modify and it only contains full hit boxes.\n this.hitBoxes[polygonIndex] = gdjs.Polygon.createRectangle(0, 0);\n }\n const polygon = this.hitBoxes[polygonIndex];\n\n for (\n let vertexIndex = 0;\n vertexIndex < polygon.vertices.length;\n vertexIndex++\n ) {\n const defVertex = defPolygon[vertexIndex];\n const vertex = polygon.vertices[vertexIndex];\n\n vertex[0] = defVertex[0];\n vertex[1] = defVertex[1];\n }\n }\n }\n\n // Transform the hit boxes.\n\n const tileTransformation =\n TransformedCollisionTile.workingTransformation;\n tileTransformation.setToTranslation(width * this.x, height * this.y);\n if (this.layer.isFlippedHorizontally(this.x, this.y)) {\n tileTransformation.flipX(width / 2);\n }\n if (this.layer.isFlippedVertically(this.x, this.y)) {\n tileTransformation.flipY(height / 2);\n }\n if (this.layer.isFlippedDiagonally(this.x, this.y)) {\n tileTransformation.flipX(width / 2);\n tileTransformation.rotateAround(Math.PI / 2, width / 2, height / 2);\n }\n tileTransformation.preConcatenate(tileMap.getTransformation());\n for (\n let polygonIndex = 0;\n polygonIndex < this.hitBoxes.length;\n polygonIndex++\n ) {\n const polygon = this.hitBoxes[polygonIndex];\n\n for (\n let vertexIndex = 0;\n vertexIndex < polygon.vertices.length;\n vertexIndex++\n ) {\n const vertex = polygon.vertices[vertexIndex];\n\n tileTransformation.transform(vertex, vertex);\n }\n }\n this._setHitboxesUpToDate();\n return this.hitBoxes;\n }\n\n private _hasNeighborFullHitBox(deltaX: integer, deltaY: integer) {\n const sourceLayer = this.layer._source;\n const tileId = sourceLayer.getTileId(this.x + deltaX, this.y + deltaY);\n const tileDefinition =\n tileId && this.layer.tileMap.getTileDefinition(tileId);\n return (\n tileDefinition && tileDefinition.hasFullHitBox(this.layer.tileMap.tag)\n );\n }\n\n private static setRectangle(\n polygon: gdjs.Polygon,\n minX: float,\n minY: float,\n maxX: float,\n maxY: float\n ) {\n const vertices = polygon.vertices;\n vertices[0][0] = minX;\n vertices[0][1] = minY;\n vertices[1][0] = maxX;\n vertices[1][1] = minY;\n vertices[2][0] = maxX;\n vertices[2][1] = maxY;\n vertices[3][0] = minX;\n vertices[3][1] = maxY;\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,GAAU,MAAV,UAAU,EAAV,CACS,GAAU,GAAV,UAAU,EAAV,CAME,aAAkC,
|
|
4
|
+
"sourcesContent": ["/// <reference path=\"../helper/TileMapHelper.d.ts\" />\nnamespace gdjs {\n export namespace TileMap {\n /**\n * A tile map transformed with an affine transformation.\n *\n * @see {@link getHitboxesAround} It gives a fast access to hitboxes for collision handling.\n */\n export class TransformedCollisionTileMap {\n /**\n * The model that describes the tile map.\n */\n private _source: TileMapHelper.EditableTileMap;\n tag: string;\n private _layerIndex: integer | null;\n private _layers: Map<integer, TransformedCollisionTileMapLayer>;\n // TODO Tiled allows to offset the layers\n /**\n * The transformation from the time map coordinate (in pixels)\n * to the scene coordinate (in pixels).\n */\n private _transformation: gdjs.AffineTransformation = new gdjs.AffineTransformation();\n /**\n * The transformation from the scene coordinate (in pixels)\n * to the time map coordinate (in pixels).\n */\n private _inverseTransformation: gdjs.AffineTransformation = new gdjs.AffineTransformation();\n /**\n * This allows tiles to know if their hitboxes must be updated.\n * @see {@link TransformedCollisionTile.affineTransformationUpToDateCount}\n */\n _transformationUpToDateCount: integer = 1;\n /**\n * A reusable Point to avoid allocations.\n */\n private static readonly workingPoint: FloatPoint = [0, 0];\n\n /**\n * @param source The model that describes the tile map.\n */\n constructor(\n source: TileMapHelper.EditableTileMap,\n tag: string,\n layerIndex: number | null = null\n ) {\n this._source = source;\n this.tag = tag;\n this._layerIndex = layerIndex;\n this._layers = new Map<integer, TransformedCollisionTileMapLayer>();\n this._buildLayersFromTileMap(source, this._layers);\n }\n\n updateFromTileMap(tileMap: TileMapHelper.EditableTileMap) {\n this._source = tileMap;\n this._layers = new Map<integer, TransformedCollisionTileMapLayer>();\n\n this._buildLayersFromTileMap(tileMap, this._layers);\n }\n\n _buildLayersFromTileMap(\n tileMap: TileMapHelper.EditableTileMap,\n layers: Map<integer, TransformedCollisionTileMapLayer>\n ) {\n if (this._layerIndex) {\n const tileLayer = tileMap.getTileLayer(this._layerIndex);\n if (!tileLayer) {\n return;\n }\n layers.set(\n tileLayer.id,\n new TransformedCollisionTileMapLayer(this, tileLayer)\n );\n } else {\n for (const sourceLayer of tileMap.getLayers()) {\n // TODO A visitor could be used to avoid a cast.\n if (!(sourceLayer instanceof TileMapHelper.EditableTileMapLayer)) {\n // TODO Collision mask for object layers is not handled.\n continue;\n }\n const tileLayer = sourceLayer as TileMapHelper.EditableTileMapLayer;\n layers.set(\n tileLayer.id,\n new TransformedCollisionTileMapLayer(this, tileLayer)\n );\n }\n }\n }\n\n /**\n * @returns The transformation from the time map coordinate (in pixels)\n * to the scene coordinate (in pixels).\n */\n getTransformation(): gdjs.AffineTransformation {\n return this._transformation;\n }\n\n /**\n * @param transformation the transformation from the tile map coordinate\n * (in pixels) to the scene coordinate (in pixels).\n */\n setTransformation(transformation: gdjs.AffineTransformation) {\n this._transformation = transformation;\n\n const inverseTransformation = this._inverseTransformation;\n inverseTransformation.copyFrom(transformation);\n inverseTransformation.invert();\n\n this._invalidate();\n }\n\n private _invalidate() {\n this._transformationUpToDateCount =\n (this._transformationUpToDateCount + 1) % Number.MAX_SAFE_INTEGER;\n }\n\n invalidateTile(layerIndex: integer, x: integer, y: integer) {\n const layer = this.getLayer(layerIndex);\n if (layer) {\n const tile = layer.get(x, y);\n if (tile) {\n tile.invalidate();\n }\n }\n }\n\n /**\n * @returns The tile map width in pixels.\n */\n getWidth() {\n return this._source.getWidth();\n }\n\n /**\n * @returns The tile map height in pixels.\n */\n getHeight() {\n return this._source.getHeight();\n }\n\n /**\n * @returns The tile width in pixels.\n */\n getTileHeight() {\n return this._source.getTileHeight();\n }\n\n /**\n * @returns The tile height in pixels.\n */\n getTileWidth() {\n return this._source.getTileWidth();\n }\n\n /**\n * @returns The number of tile columns in the map.\n */\n getDimensionX() {\n return this._source.getDimensionX();\n }\n\n /**\n * @returns The number of tile rows in the map.\n */\n getDimensionY() {\n return this._source.getDimensionY();\n }\n\n /**\n * @param tileId The tile identifier\n * @returns The tile definition form the tile set.\n */\n getTileDefinition(tileId: integer) {\n return this._source.getTileDefinition(tileId);\n }\n\n /**\n * @param layerId The layer identifier.\n * @returns the layer\n */\n getLayer(layerId: integer): TransformedCollisionTileMapLayer | undefined {\n return this._layers.get(layerId);\n }\n\n /**\n * @returns All the layers of the tile map.\n */\n getLayers(): Iterable<TransformedCollisionTileMapLayer> {\n return this._layers.values();\n }\n\n /**\n * Check if a point is inside a tile with a given tag.\n *\n * It doesn't use the tile hitboxes.\n * It only check the point is inside the tile square.\n *\n * @param x The X coordinate of the point to check.\n * @param y The Y coordinate of the point to check.\n * @param tag The tile tag\n * @returns true when the point is inside a tile with a given tag.\n */\n pointIsInsideTile(x: float, y: float, tag: string): boolean {\n const workingPoint: FloatPoint =\n TransformedCollisionTileMap.workingPoint;\n workingPoint[0] = x;\n workingPoint[1] = y;\n this._inverseTransformation.transform(workingPoint, workingPoint);\n return this._source.pointIsInsideTile(\n workingPoint[0],\n workingPoint[1],\n tag\n );\n }\n\n /**\n * @param tag The tile tag.\n * @param left The left border of the area in the scene.\n * @param top The top border of the area in the scene.\n * @param right The right border of the area in the scene.\n * @param bottom The left border of the area in the scene.\n * @returns At least all the hitboxes from the given area\n * where tiles have the right tag.\n *\n * @see {@link gdjs.RuntimeObject.getHitboxesAround}\n */\n getHitboxesAround(\n tag: string,\n left: float,\n top: float,\n right: float,\n bottom: float\n ): Iterable<gdjs.Polygon> {\n // Return the hitboxes from the tiles that overlap\n // the AABB of the area in the tile map basis.\n // Some of these tiles are not event in the given area\n // but this is a good trade of between the number of\n // useless returned hitboxes and the time to find them.\n\n // Transform the vertices of the area\n // from the scene basis to the tile map basis.\n const inverseTransformation = this._inverseTransformation;\n const workingPoint: FloatPoint =\n TransformedCollisionTileMap.workingPoint;\n\n workingPoint[0] = left;\n workingPoint[1] = top;\n inverseTransformation.transform(workingPoint, workingPoint);\n const topLeftX = workingPoint[0];\n const topLeftY = workingPoint[1];\n\n workingPoint[0] = right;\n workingPoint[1] = top;\n inverseTransformation.transform(workingPoint, workingPoint);\n const topRightX = workingPoint[0];\n const topRightY = workingPoint[1];\n\n workingPoint[0] = right;\n workingPoint[1] = bottom;\n inverseTransformation.transform(workingPoint, workingPoint);\n const bottomRightX = workingPoint[0];\n const bottomRightY = workingPoint[1];\n\n workingPoint[0] = left;\n workingPoint[1] = bottom;\n inverseTransformation.transform(workingPoint, workingPoint);\n const bottomLeftX = workingPoint[0];\n const bottomLeftY = workingPoint[1];\n\n // Calculate the AABB of the area in the tile map basis.\n const xMin = Math.max(\n 0,\n Math.floor(\n Math.min(topLeftX, topRightX, bottomRightX, bottomLeftX) /\n this._source.getTileWidth()\n )\n );\n const xMax = Math.min(\n this.getDimensionX() - 1,\n Math.floor(\n Math.max(topLeftX, topRightX, bottomRightX, bottomLeftX) /\n this._source.getTileWidth()\n )\n );\n const yMin = Math.max(\n 0,\n Math.floor(\n Math.min(topLeftY, topRightY, bottomRightY, bottomLeftY) /\n this._source.getTileHeight()\n )\n );\n const yMax = Math.min(\n this.getDimensionY() - 1,\n Math.floor(\n Math.max(topLeftY, topRightY, bottomRightY, bottomLeftY) /\n this._source.getTileHeight()\n )\n );\n\n return this.getHitboxes(tag, xMin, yMin, xMax, yMax);\n }\n\n /**\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n * @returns All the hitboxes from the tiles overlapping\n * the given area where tiles have the right tag.\n */\n getHitboxes(\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ): Iterable<gdjs.Polygon> {\n return new MapCollisionMaskIterable(this, tag, xMin, yMin, xMax, yMax);\n }\n\n /**\n * @param tag The tile tag.\n * @returns All the hitboxes from the tiles having the right tag.\n */\n getAllHitboxes(tag: string): Iterable<gdjs.Polygon> {\n return this.getHitboxes(\n tag,\n 0,\n 0,\n this._source.getDimensionX() - 1,\n this._source.getDimensionY() - 1\n );\n }\n }\n\n /**\n * Iterable over the tile hitboxes of a given area and tag.\n */\n class MapCollisionMaskIterable implements Iterable<gdjs.Polygon> {\n map: TransformedCollisionTileMap;\n tag: string;\n xMin: integer;\n yMin: integer;\n xMax: integer;\n yMax: integer;\n\n /**\n * Avoid to allocate an empty iterator each time\n * the iterable is initialized.\n */\n static emptyItr: Iterator<gdjs.Polygon> = {\n next: () => ({ value: undefined, done: true }),\n };\n\n /**\n * @param map The tile map.\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n */\n constructor(\n map: TransformedCollisionTileMap,\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ) {\n this.map = map;\n this.tag = tag;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n }\n\n [Symbol.iterator]() {\n // Flatten the iterable of each layers into one.\n let layerItr = this.map.getLayers()[Symbol.iterator]();\n let listItr: Iterator<gdjs.Polygon> = MapCollisionMaskIterable.emptyItr;\n\n return {\n next: () => {\n let listNext = listItr.next();\n while (listNext.done) {\n const layerNext = layerItr.next();\n if (layerNext.done) {\n return listNext;\n }\n listItr = layerNext.value\n .getHitboxes(\n this.tag,\n this.xMin,\n this.yMin,\n this.xMax,\n this.yMax\n )\n [Symbol.iterator]();\n listNext = listItr.next();\n }\n return listNext;\n },\n };\n }\n }\n\n /**\n * A tile map layer transformed with an affine transformation.\n */\n export class TransformedCollisionTileMapLayer {\n /**\n * The time map that contains this layer.\n */\n readonly tileMap: TransformedCollisionTileMap;\n /**\n * The model that describes the tile map.\n */\n readonly _source: TileMapHelper.EditableTileMapLayer;\n private readonly _tiles: TransformedCollisionTile[][];\n\n /**\n * @param tileMap The time map that contains this layer.\n * @param source The model that describes the tile map.\n */\n constructor(\n tileMap: TransformedCollisionTileMap,\n source: TileMapHelper.EditableTileMapLayer\n ) {\n this.tileMap = tileMap;\n this._source = source;\n this._tiles = [];\n const dimX = this._source.getDimensionX();\n const dimY = this._source.getDimensionY();\n this._tiles.length = dimY;\n for (let y = 0; y < dimY; y++) {\n this._tiles[y] = [];\n this._tiles[y].length = dimX;\n for (let x = 0; x < dimX; x++) {\n this._tiles[y][x] = new TransformedCollisionTile(this, x, y);\n }\n }\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @return The tile from the tile set.\n */\n get(x: integer, y: integer): TransformedCollisionTile | undefined {\n const row = this._tiles[y];\n return row ? row[x] : undefined;\n }\n\n /**\n * The number of tile columns in the layer.\n */\n getDimensionX() {\n return this._tiles.length === 0 ? 0 : this._tiles[0].length;\n }\n\n /**\n * The number of tile rows in the layer.\n */\n getDimensionY() {\n return this._tiles.length;\n }\n\n /**\n * @returns The layer width in pixels.\n */\n getWidth() {\n return this._source.getWidth();\n }\n\n /**\n * @returns The layer height in pixels.\n */\n getHeight() {\n return this._source.getHeight();\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @returns true if the tile is flipped diagonally.\n */\n isFlippedDiagonally(x: integer, y: integer) {\n return this._source.isFlippedDiagonally(x, y);\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @returns true if the tile is flipped vertically.\n */\n isFlippedVertically(x: integer, y: integer) {\n return this._source.isFlippedVertically(x, y);\n }\n\n /**\n * @param x The layer column.\n * @param y The layer row.\n * @returns true if the tile is flipped horizontally.\n */\n isFlippedHorizontally(x: integer, y: integer) {\n return this._source.isFlippedHorizontally(x, y);\n }\n /**\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n * @returns All the hitboxes from the tiles overlapping\n * the given area where tiles have the right tag.\n */\n getHitboxes(\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ): Iterable<gdjs.Polygon> {\n return new LayerCollisionMaskIterable(\n this,\n tag,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n\n /**\n * @param tag The tile tag.\n * @returns All the hitboxes from the tiles having the right tag.\n */\n getAllHitboxes(tag: string): Iterable<gdjs.Polygon> {\n return this.getHitboxes(\n tag,\n 0,\n 0,\n this.getDimensionX() - 1,\n this.getDimensionY() - 1\n );\n }\n }\n\n /**\n * Iterable over the tile hitboxes of a given area and tag.\n */\n class LayerCollisionMaskIterable implements Iterable<gdjs.Polygon> {\n layer: TransformedCollisionTileMapLayer;\n tag: string;\n xMin: integer;\n yMin: integer;\n xMax: integer;\n yMax: integer;\n\n /**\n * Avoid to allocate an empty iterator each time\n * the iterable is initialized.\n */\n static emptyItr: Iterator<gdjs.Polygon> = {\n next: () => ({ value: undefined, done: true }),\n };\n\n /**\n * @param map The tile map.\n * @param tag The tile tag.\n * @param xMin The fist column to include.\n * @param yMin The fist row to include.\n * @param xMax The last column to include.\n * @param yMax The last row to include.\n */\n constructor(\n layer: TransformedCollisionTileMapLayer,\n tag: string,\n xMin: integer,\n yMin: integer,\n xMax: integer,\n yMax: integer\n ) {\n this.layer = layer;\n this.tag = tag;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n }\n\n [Symbol.iterator]() {\n // Flatten the iterable of each tile into one.\n\n // xMin and yMin next increment\n let x = this.xMax;\n let y = this.yMin - 1;\n let polygonItr: Iterator<gdjs.Polygon> =\n LayerCollisionMaskIterable.emptyItr;\n\n return {\n next: () => {\n let listNext = polygonItr.next();\n while (listNext.done) {\n x++;\n if (x > this.xMax) {\n y++;\n x = this.xMin;\n }\n if (y > this.yMax) {\n // done\n return listNext;\n }\n const tile = this.layer.get(x, y);\n if (!tile) {\n continue;\n }\n const definition = tile.getDefinition();\n if (!definition) {\n continue;\n }\n if (definition.hasTaggedHitBox(this.tag)) {\n polygonItr = tile.getHitboxes()[Symbol.iterator]();\n listNext = polygonItr.next();\n }\n }\n return listNext;\n },\n };\n }\n }\n\n /**\n * A tile transformed with an affine transformation.\n */\n class TransformedCollisionTile {\n /**\n * The layer that contains this tile.\n */\n readonly layer: TransformedCollisionTileMapLayer;\n /**\n * The column index in the layer.\n */\n readonly x: integer;\n /**\n * The row index in the layer.\n */\n readonly y: integer;\n private readonly hitBoxes: gdjs.Polygon[];\n private affineTransformationUpToDateCount: integer = 0;\n\n /**\n * An reusable AffineTransformation to avoid allocations.\n */\n private static readonly workingTransformation: gdjs.AffineTransformation = new gdjs.AffineTransformation();\n\n /**\n *\n * @param layer The layer that contains this tile.\n * @param x The column index in the layer.\n * @param y The row index in the layer.\n */\n constructor(\n layer: TransformedCollisionTileMapLayer,\n x: integer,\n y: integer\n ) {\n this.layer = layer;\n this.x = x;\n this.y = y;\n const definition = this.getDefinition();\n this.hitBoxes = [];\n if (definition) {\n const tag = this.layer.tileMap.tag;\n const definitionHitboxes = definition.getHitBoxes(tag);\n if (definitionHitboxes) {\n this.hitBoxes.length = definitionHitboxes.length;\n for (\n let polygonIndex = 0;\n polygonIndex < this.hitBoxes.length;\n polygonIndex++\n ) {\n const polygon = new gdjs.Polygon();\n this.hitBoxes[polygonIndex] = polygon;\n polygon.vertices.length = definitionHitboxes[polygonIndex].length;\n for (\n let vertexIndex = 0;\n vertexIndex < polygon.vertices.length;\n vertexIndex++\n ) {\n polygon.vertices[vertexIndex] = [0, 0];\n }\n }\n }\n }\n }\n\n /**\n * @returns The tile definition from the tile set.\n */\n getDefinition(): TileMapHelper.TileDefinition {\n return this.layer.tileMap.getTileDefinition(\n this.layer._source.getTileId(this.x, this.y)!\n )!;\n }\n\n private _isHitboxesUpToDate() {\n return (\n this.affineTransformationUpToDateCount ===\n this.layer.tileMap._transformationUpToDateCount\n );\n }\n\n private _setHitboxesUpToDate() {\n this.affineTransformationUpToDateCount = this.layer.tileMap._transformationUpToDateCount;\n }\n\n invalidate() {\n this.affineTransformationUpToDateCount = -1;\n // Also invalidate neighbors because their hit boxes may need to be\n // extended differently.\n let neighbor = this.layer.get(this.x - 1, this.y);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n neighbor = this.layer.get(this.x + 1, this.y);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n neighbor = this.layer.get(this.x, this.y - 1);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n neighbor = this.layer.get(this.x, this.y + 1);\n if (neighbor) {\n neighbor.affineTransformationUpToDateCount = -1;\n }\n }\n\n /**\n * @returns The hitboxes of this tile in the scene basis.\n */\n getHitboxes(): Polygon[] {\n if (this._isHitboxesUpToDate()) {\n return this.hitBoxes;\n }\n\n const definition = this.getDefinition();\n if (!definition) {\n this._setHitboxesUpToDate();\n this.hitBoxes.length = 0;\n return this.hitBoxes;\n }\n const tag = this.layer.tileMap.tag;\n const definitionHitboxes = definition.getHitBoxes(tag);\n if (!definitionHitboxes) {\n this._setHitboxesUpToDate();\n this.hitBoxes.length = 0;\n return this.hitBoxes;\n }\n\n const tileMap = this.layer.tileMap;\n const width = tileMap.getTileWidth();\n const height = tileMap.getTileHeight();\n\n // Extend the hit boxes.\n // It avoids small objects to be pushed side way into a wall when they\n // should be pop out of the wall.\n\n const hasFullHitBox =\n definitionHitboxes.length === 1 && definition.hasFullHitBox(tag);\n if (hasFullHitBox) {\n const isLeftFull = this._hasNeighborFullHitBox(-1, 0);\n const isRightFull = this._hasNeighborFullHitBox(1, 0);\n const isTopFull = this._hasNeighborFullHitBox(0, -1);\n const isBottomFull = this._hasNeighborFullHitBox(0, 1);\n\n let hitBoxesCount = 0;\n if (isLeftFull || isRightFull) {\n let minX = isLeftFull ? -width : 0;\n let maxX = isRightFull ? 2 * width : width;\n if (hitBoxesCount >= this.hitBoxes.length) {\n this.hitBoxes[hitBoxesCount] = gdjs.Polygon.createRectangle(0, 0);\n }\n TransformedCollisionTile.setRectangle(\n this.hitBoxes[hitBoxesCount],\n minX,\n 0,\n maxX,\n height\n );\n hitBoxesCount++;\n }\n if (isTopFull || isBottomFull) {\n let minY = isTopFull ? -height : 0;\n let maxY = isBottomFull ? 2 * height : height;\n if (hitBoxesCount >= this.hitBoxes.length) {\n this.hitBoxes[hitBoxesCount] = gdjs.Polygon.createRectangle(0, 0);\n }\n TransformedCollisionTile.setRectangle(\n this.hitBoxes[hitBoxesCount],\n 0,\n minY,\n width,\n maxY\n );\n hitBoxesCount++;\n }\n if (hitBoxesCount === 0) {\n if (this.hitBoxes.length === 0) {\n this.hitBoxes[0] = gdjs.Polygon.createRectangle(0, 0);\n }\n TransformedCollisionTile.setRectangle(\n this.hitBoxes[0],\n 0,\n 0,\n width,\n height\n );\n hitBoxesCount++;\n }\n this.hitBoxes.length = hitBoxesCount;\n } else {\n for (\n let polygonIndex = 0;\n polygonIndex < definitionHitboxes.length;\n polygonIndex++\n ) {\n const defPolygon = definitionHitboxes[polygonIndex];\n if (polygonIndex >= this.hitBoxes.length) {\n // This can't happen in practice as only the simple tile map can be\n // modify and it only contains full hit boxes.\n this.hitBoxes[polygonIndex] = gdjs.Polygon.createRectangle(0, 0);\n }\n const polygon = this.hitBoxes[polygonIndex];\n\n for (\n let vertexIndex = 0;\n vertexIndex < polygon.vertices.length;\n vertexIndex++\n ) {\n const defVertex = defPolygon[vertexIndex];\n const vertex = polygon.vertices[vertexIndex];\n\n vertex[0] = defVertex[0];\n vertex[1] = defVertex[1];\n }\n }\n }\n\n // Transform the hit boxes.\n // First compute the affine transformation relative to the tile.\n // Then the transformation is applied to each polygon in the hitboxes.\n // TODO: If the tile contains hitboxes that are both extended and not full,\n // this code should be adapted so that the transformation considers the\n // actual width and height of the hitbox (and not the tile).\n // At the moment, extended hitboxes can only be full and since flipping\n // transformations don't change a full hitbox, those transformations\n // are not applied.\n\n const tileTransformation =\n TransformedCollisionTile.workingTransformation;\n tileTransformation.setToTranslation(width * this.x, height * this.y);\n if (!hasFullHitBox) {\n if (this.layer.isFlippedHorizontally(this.x, this.y)) {\n tileTransformation.flipX(width / 2);\n }\n if (this.layer.isFlippedVertically(this.x, this.y)) {\n tileTransformation.flipY(height / 2);\n }\n if (this.layer.isFlippedDiagonally(this.x, this.y)) {\n tileTransformation.flipX(width / 2);\n tileTransformation.rotateAround(Math.PI / 2, width / 2, height / 2);\n }\n }\n tileTransformation.preConcatenate(tileMap.getTransformation());\n for (\n let polygonIndex = 0;\n polygonIndex < this.hitBoxes.length;\n polygonIndex++\n ) {\n const polygon = this.hitBoxes[polygonIndex];\n\n for (\n let vertexIndex = 0;\n vertexIndex < polygon.vertices.length;\n vertexIndex++\n ) {\n const vertex = polygon.vertices[vertexIndex];\n\n tileTransformation.transform(vertex, vertex);\n }\n }\n this._setHitboxesUpToDate();\n return this.hitBoxes;\n }\n\n private _hasNeighborFullHitBox(deltaX: integer, deltaY: integer) {\n const sourceLayer = this.layer._source;\n const tileId = sourceLayer.getTileId(this.x + deltaX, this.y + deltaY);\n const tileDefinition =\n tileId && this.layer.tileMap.getTileDefinition(tileId);\n return (\n tileDefinition && tileDefinition.hasFullHitBox(this.layer.tileMap.tag)\n );\n }\n\n private static setRectangle(\n polygon: gdjs.Polygon,\n minX: float,\n minY: float,\n maxX: float,\n maxY: float\n ) {\n const vertices = polygon.vertices;\n vertices[0][0] = minX;\n vertices[0][1] = minY;\n vertices[1][0] = maxX;\n vertices[1][1] = minY;\n vertices[2][0] = maxX;\n vertices[2][1] = maxY;\n vertices[3][0] = minX;\n vertices[3][1] = maxY;\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TileMapHelper={})}(this,(function(e){"use strict";const t=2147483648,i=1073741824,s=536870912;var l;function n(e){const t=l.isFlippedDiagonally(e),i=l.isFlippedHorizontally(e),s=l.isFlippedVertically(e);let n=0;return t?(n=10,!i&&s?n=2:i&&!s?n=6:i&&s&&(n=14)):(n=0,!i&&s?n=8:i&&!s?n=12:i&&s&&(n=4)),n}function o(e,l,n,o){let r=e;return l&&(r|=t),n&&(r|=i),o&&(r|=s),r}!function(e){e.tileIdMask=536870911,e.getTileId=function(t){return t&e.tileIdMask},e.setFlippedHorizontally=function(e,i){return e&=2147483647,i&&(e|=t),e},e.setFlippedVertically=function(e,t){return e&=-1073741825,t&&(e|=i),e},e.setFlippedDiagonally=function(e,t){return e&=-536870913,t&&(e|=s),e},e.isFlippedHorizontally=function(e){return!!(e&t)},e.isFlippedVertically=function(e){return!!(e&i)},e.isFlippedDiagonally=function(e){return!!(e&s)}}(l||(l={}));class r{constructor(e,t,i,s,l){this.tileWidth=e,this.tileHeight=t,this.dimX=i,this.dimY=s,this._tileSet=l,this._layers=[]}static from(e,{tileSize:t,tileSetColumnCount:i,tileSetRowCount:s}){const l=new Map;new Array(i*s).fill(0).forEach(((e,t)=>{l.set(t,new u(0))}));const n=new r(t||e.tileWidth,t||e.tileHeight,e.dimX||1,e.dimY||1,l);return e.layers?e.layers.forEach((e=>{n.addTileLayer(h.from(e,n,(e=>e<i*s)))})):n.addNewTileLayer(0),n}toJSObject(){return{tileWidth:this.tileWidth,tileHeight:this.tileHeight,dimX:this.dimX,dimY:this.dimY,layers:this._layers.map((e=>e.toJSObject()))}}getWidth(){return this.tileWidth*this.dimX}getHeight(){return this.tileHeight*this.dimY}getTileHeight(){return this.tileHeight}getTileWidth(){return this.tileWidth}getDimensionX(){return this.dimX}getDimensionY(){return this.dimY}setDimensionX(e){if(e===this.dimX)return;const t=e-this.dimX;for(const e of this.getLayers())e instanceof h&&(t>0?e.increaseDimensions(t,0,0,0):e.reduceDimensions(-t,0,0,0));this.dimX=e}increaseDimensions(e,t,i,s){if(!(e<0||t<0||i<0||s<0||0===e&&0===t&&0===i&&0===s)){for(const l of this.getLayers())l instanceof h&&l.increaseDimensions(e,t,i,s);this.dimX=this.dimX+e+t,this.dimY=this.dimY+i+s}}setDimensionY(e){if(e===this.dimY)return;const t=e-this.dimY;for(const e of this.getLayers())e instanceof h&&(t>0?e.increaseDimensions(0,0,t,0):e.reduceDimensions(0,0,-t,0));this.dimY=e}getTileDefinition(e){return this._tileSet.get(e)}getTileDefinitions(){return this._tileSet.values()}addNewTileLayer(e){const t=new h(this,e);return this._layers.push(t),t}addTileLayer(e){this._layers.push(e)}getTileLayer(e){const t=this._layers.find((t=>t.id===e));return t instanceof h?t:null}addObjectLayer(e){const t=new d(this,e);return this._layers.push(t),t}getBackgroundResourceName(){return this._backgroundResourceName}getLayers(){return this._layers}pointIsInsideTile(e,t,i){const s=Math.floor(e/this.tileWidth),l=Math.floor(t/this.tileHeight);for(const e of this._layers){const t=e;if(!t)continue;const n=t.getTileId(s,l);if(void 0===n)return!1;if(this._tileSet.get(n).hasTaggedHitBox(i))return!0}return!1}setBackgroundResourceName(e){this._backgroundResourceName=e}isEmpty(){return this._layers.every((e=>e.isEmpty()))}getTileId(e,t,i){const s=this.getTileLayer(i);if(!s)return-1;const l=s.getTileId(e,t);return void 0===l?-1:l}setTile(e,t,i,s){const l=this.getTileLayer(i);l&&l.setTile(e,t,s)}flipTileOnY(e,t,i,s){const l=this.getTileLayer(i);l&&l.setFlippedVertically(e,t,s)}flipTileOnX(e,t,i,s){const l=this.getTileLayer(i);l&&l.setFlippedHorizontally(e,t,s)}isTileFlippedOnX(e,t,i){const s=this.getTileLayer(i);return!!s&&s.isFlippedHorizontally(e,t)}isTileFlippedOnY(e,t,i){const s=this.getTileLayer(i);return!!s&&s.isFlippedVertically(e,t)}removeTile(e,t,i){if(e<0||e>=this.dimX||t<0||t>=this.dimY)return;const s=this.getTileLayer(i);s&&s.removeTile(e,t)}trimEmptyColumnsAndRowToFitLayer(e){const t=this.getTileLayer(e);if(!t)return;const i=this.dimY,s=this.dimX;if(t.isEmpty()&&1===this._layers.length)return t.buildEmptyLayer(1,1),this.dimX=1,this.dimY=1,{shiftedRows:0,shiftedColumns:0,poppedRows:i-1,poppedColumns:s-1};const l=t.getTrimmingData();for(const e of this.getLayers())e instanceof h&&e.reduceDimensions(l.columnsToPop,l.columnsToShift,l.rowsToPop,l.rowsToShift);return this.dimX=s-l.columnsToPop-l.columnsToShift,this.dimY=i-l.rowsToPop-l.rowsToShift,{poppedRows:l.rowsToPop,poppedColumns:l.columnsToPop,shiftedRows:l.rowsToShift,shiftedColumns:l.columnsToShift}}}class a{constructor(e,t){this.visible=!0,this.tileMap=e,this.id=t}setVisible(e){this.visible=e}toJSObject(){return{}}isVisible(){return this.visible}isEmpty(){return!0}}class d extends a{constructor(e,t){super(e,t),this.objects=[]}add(e){this.objects.push(e)}isEmpty(){return 0===this.objects.length}}class c{constructor(e,t,i){this.tileId=i,this.x=e,this.y=t}getTileId(){return l.getTileId(this.tileId)}setFlippedHorizontally(e){this.tileId=l.setFlippedHorizontally(this.tileId,e)}setFlippedVertically(e){this.tileId=l.setFlippedVertically(this.tileId,e)}setFlippedDiagonally(e){this.tileId=l.setFlippedDiagonally(this.tileId,e)}isFlippedHorizontally(){return l.isFlippedHorizontally(this.tileId)}isFlippedVertically(){return l.isFlippedVertically(this.tileId)}isFlippedDiagonally(){return l.isFlippedDiagonally(this.tileId)}}class h extends a{constructor(e,t){super(e,t),this.buildEmptyLayer(this.tileMap.getDimensionX(),this.tileMap.getDimensionY()),this._alpha=1}buildEmptyLayer(e,t){this._tiles=[],this._tiles.length=t;for(let t=0;t<this._tiles.length;t++)this._tiles[t]=new Int32Array(e)}static from(e,t,i){const s=new h(t,e.id);return s.setAlpha(e.alpha),e.tiles.forEach(((e,t)=>e.forEach(((e,n)=>{const o=l.getTileId(e);i(o)&&s.setTileGID(n,t,e)})))),s}toJSObject(){return{id:this.id,alpha:this._alpha,tiles:this._tiles.map(((e,t)=>Array.from(e.map(((e,i)=>{const s=this.getTileGID(i,t);return void 0===s?-1:s})))))}}getAlpha(){return this._alpha}setAlpha(e){this._alpha=e}isEmpty(){return this._tiles.every((e=>e.every((e=>0===e))))}reduceDimensions(e,t,i,s){(i>0||s>0)&&(this._tiles=this._tiles.slice(s,i?-i:void 0)),(e>0||t>0)&&this._tiles.forEach(((i,s)=>{this._tiles[s]=this._tiles[s].slice(t,e?-e:void 0)}))}increaseDimensions(e,t,i,s){const l=this._tiles.length,n=this._tiles[0].length;if((e>0||t>0)&&this._tiles.forEach(((i,s)=>{const l=new Int32Array(n+e+t).fill(0);l.set(i,t),this._tiles[s]=l})),i>0||s>0){this._tiles.unshift(...new Array(s).fill(0).map((()=>new Int32Array(n+e+t).fill(0)))),this._tiles.length=l+i+s;for(let i=l+s;i<this._tiles.length;i++)this._tiles[i]=new Int32Array(n+e+t).fill(0)}}setTile(e,t,i){if(!this.tileMap.getTileDefinition(i))return void console.error(`Invalid tile definition index: ${i}`);const s=this._tiles[t];!s||e>=s.length||(s[e]=i+1)}setTileGID(e,t,i){const s=this._tiles[t];!s||e>=s.length||(s[e]=i+1)}getTrimmingData(){let e=0,t=0;const i=this.getDimensionX(),s=this.getDimensionY(),l=new Array(this._tiles.length).fill(this._tiles[0].length),n=new Array(this._tiles.length).fill(this._tiles[0].length);let o=!1;for(let i=0;i<this._tiles.length;i++){const s=this._tiles[i];let r=!1;for(let e=0;e<s.length;e++){0!==s[e]&&(n[i]=s.length-1-e,r||(l[i]=e,r=!0))}!r||(t=this._tiles.length-1-i,o||(e=i,o=!0))}if(!o)return{columnsToShift:0,rowsToShift:0,columnsToPop:i-1,rowsToPop:s-1};return{rowsToShift:e,columnsToShift:Math.min(...l),rowsToPop:t,columnsToPop:Math.min(...n)}}removeTile(e,t){const i=this._tiles[t];!i||e>=i.length||(i[e]=0)}setFlippedHorizontally(e,t,i){const s=this._tiles[t];if(!s||e>=s.length)return;const n=s[e];0!==n&&(s[e]=l.setFlippedHorizontally(n,i))}setFlippedVertically(e,t,i){const s=this._tiles[t];if(!s||e>=s.length)return;const n=s[e];0!==n&&(s[e]=l.setFlippedVertically(n,i))}setFlippedDiagonally(e,t,i){const s=this._tiles[t];if(!s||e>=s.length)return;const n=s[e];0!==n&&(s[e]=l.setFlippedDiagonally(n,i))}isFlippedHorizontally(e,t){const i=this._tiles[t];return!(!i||e>=i.length)&&l.isFlippedHorizontally(i[e])}isFlippedVertically(e,t){const i=this._tiles[t];return!(!i||e>=i.length)&&l.isFlippedVertically(i[e])}isFlippedDiagonally(e,t){const i=this._tiles[t];return!(!i||e>=i.length)&&l.isFlippedDiagonally(i[e])}getTileGID(e,t){const i=this._tiles[t];if(i&&!(e>=i.length)&&0!==i[e])return i[e]-1}getTileId(e,t){const i=this._tiles[t];if(!i||e>=i.length||0===i[e])return;return l.getTileId(i[e]-1)}getDimensionX(){return 0===this._tiles.length?0:this._tiles[0].length}getDimensionY(){return this._tiles.length}getWidth(){return this.tileMap.getWidth()}getHeight(){return this.tileMap.getHeight()}}class u{constructor(e){this.taggedHitBoxes=[],this.animationLength=null!=e?e:0,this.stackedTiles=[]}addHitBox(e,t,i){let s=this.taggedHitBoxes.find((t=>t.tag===e));s||(s={tag:e,polygons:[],hasFullHitBox:!1},this.taggedHitBoxes.push(s)),s.hasFullHitBox||(s.hasFullHitBox=i),s.polygons.push(t)}hasTaggedHitBox(e){return this.taggedHitBoxes.some((t=>t.tag===e))}getHitBoxes(e){const t=this.taggedHitBoxes.find((t=>t.tag===e));return t&&t.polygons}hasFullHitBox(e){const t=this.taggedHitBoxes.find((t=>t.tag===e));return t&&t.hasFullHitBox}getAnimationLength(){return this.animationLength}getStackTileId(){return this.stackTileId}getStackedTiles(){return this.stackedTiles}hasStackedTiles(){return this.stackedTiles.length>0}setStackedTiles(e,...t){this.stackedTiles=t,this.stackTileId=e}}class p{constructor(){this._cachedValues=new Map,this._callbacks=new Map}getOrLoad(e,t,i){{const t=this._cachedValues.get(e);if(t)return void i(t)}{const t=this._callbacks.get(e);if(t)return void t.push(i);this._callbacks.set(e,[i])}t((t=>{t&&this._cachedValues.set(e,t);const i=this._callbacks.get(e);this._callbacks.delete(e);for(const e of i)e(t)}))}}class g{constructor(){this._levelBackgroundTextures=new Map,this._textures=new Map}setTexture(e,t){this._textures.set(e,t)}getTexture(e){return this._textures.get(e)}getLevelBackgroundTexture(e){return this._levelBackgroundTextures.get(e)}setLevelBackgroundTexture(e,t){this._levelBackgroundTextures.set(e,t)}}const f=(e,t)=>{const{data:i,compression:s}=t;if(!i)return i;let l=4;const n=[];let o=atob(i).split("").map((function(e){return e.charCodeAt(0)}));try{const t=(e,t)=>e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)>>>0;if("zlib"===s){const i=new Uint8Array(o),s=e.inflate(i);for(;l<=s.length;)n.push(t(s,l-4)),l+=4}else{if("zstd"===s)return console.error("Zstandard compression is not supported for layers in a Tilemap. Use instead zlib compression or no compression."),null;for(;l<=o.length;)n.push(t(o,l-4)),l+=4}return n}catch(e){return console.error("Failed to decompress and unzip base64 layer.data string",e),null}},y=e=>{const l=e&t,n=e&i,o=e&s;return{id:T(536870911&e),flippedHorizontally:!!l,flippedVertically:!!n,flippedDiagonally:!!o}};function T(e){return 0===e?void 0:e-1}var m,_,w,x,I,b;function M(e,t){let i=e<<16;return i+=t,i}function k(e,t,i,s){var l;if(e[s])return e[s];let n=null;const o=t[s];return(null==o?void 0:o.relPath)?(n=i(o.relPath),"res/error48.png"===(null===(l=n.baseTexture)||void 0===l?void 0:l.cacheId)&&(console.error(`The atlas texture "${o.relPath}" can't be loaded`),n=null)):console.error(`The tileset "${o.identifier}" doesn't seems to contain an atlas texture`),e[s]=n,n}!function(e){e.parseAtlas=function(e,t,i,s){if(!e.tiledversion)return console.warn("The loaded Tiled map does not contain a 'tiledversion' key. Are you sure this file has been exported from Tiled (mapeditor.org)?"),null;if(!e.tilesets.length||"source"in e.tilesets[0])return console.warn("The loaded Tiled map seems not to contain any tileset data (nothing in 'tilesets' key)."),null;const l=e.tilesets[0],{tilewidth:n,tileheight:o,tilecount:r,image:a,columns:d,spacing:c,margin:h}=l,u=void 0===l.firstgid?1:l.firstgid;i||(i=s(a));const p=r/d,f=n*d+c*(d-1)+2*h,y=o*p+c*(p-1)+2*h;if(i.width<f||i.height<y)return console.error(`It seems the atlas file was resized, which is not supported. It should be ${f}x${y} px, but it's actually ${i.width}x${i.height} px.`),null;i.width===f&&i.height===y||console.warn(`It seems the atlas file has unused pixels. It should be ${f}x${y} px, but it's actually ${i.width}x${i.height} px.`);const m=new g;for(let e=0;e<r;e++){const t=h+Math.floor(e%d)*(n+c),s=h+Math.floor(e/d)*(o+c),l=T(u+e);try{const e=new PIXI.Rectangle(t,s,n,o),r=new PIXI.Texture(i,e);m.setTexture(l,r)}catch(e){console.error("An error occurred while creating a PIXI.Texture to be used in a TileMap:",e)}}return m}}(m||(m={})),function(e){e.parseAtlas=function(e,t,i,s){const l=e.levels[t>-1?t:0];if(!l||!l.layerInstances)return null;const n={};for(const t of e.defs.tilesets)n[t.uid]=t;const o=new g,r={},a={};for(let e=l.layerInstances.length-1;e>=0;--e){const t=l.layerInstances[e];if("Entities"===t.__type)continue;const i=t.__tilesetDefUid;if("number"!=typeof i)continue;const d=n[i],c=k(a,n,s,i);if(!c)continue;const h={},u=d.tileGridSize;for(const e of[...t.autoLayerTiles,...t.gridTiles]){if(h[e.t])continue;const t=M(i,e.t);if(r[t])h[e.t]=!0;else{try{const[i,s]=e.src,l=new PIXI.Rectangle(i,s,u,u),n=new PIXI.Texture(c,l);o.setTexture(t,n)}catch(e){console.error("An error occurred while creating a PIXI.Texture to be used in a TileMap:",e)}h[e.t]=!0,r[t]=!0}}}if(l.bgRelPath){const e=s(l.bgRelPath),t=new PIXI.Rectangle(0,0,l.pxWid,l.pxHei),i=new PIXI.Texture(e,t);o.setLevelBackgroundTexture(l.bgRelPath,i)}return o}}(_||(_={})),e.PixiTileMapHelper=void 0,(w=e.PixiTileMapHelper||(e.PixiTileMapHelper={})).parseAtlas=function(e,t,i,s){return"ldtk"===e.kind?_.parseAtlas(e.data,t,i,s):"tiled"===e.kind?m.parseAtlas(e.data,t,i,s):(console.warn("The loaded Tiled map data does not contain a 'tiledversion' or '__header__' key. Are you sure this file has been exported from Tiled (mapeditor.org) or LDtk (ldtk.io)?"),null)},w.parseSimpleTileMapAtlas=function(e,t,i,s){const l=new g;for(let n=0;n<t;n++)for(let o=0;o<i;o++){const i=new PIXI.Rectangle(n*s,o*s,s,s),r=new PIXI.Texture(e,i);l.setTexture(t*o+n,r)}return l},w.updatePixiTileMap=function(e,t,i,s,o){const r=e;if(!r)return;r.clear();const a=t.getBackgroundResourceName();if(a){const e=i.getLevelBackgroundTexture(a);r.tile(e,0,0)}for(const e of t.getLayers())if(!("index"===s&&o!==e.id||"visible"===s&&!e.isVisible()))if(e instanceof d){const t=e;for(const e of t.objects){const s=e.getTileId(),l=i.getTexture(s);if(l){const i=n(s);r.tile(l,e.x,e.y-t.tileMap.getTileHeight(),{rotate:i})}}}else if(e instanceof h){const t=e,s=t.tileMap.getTileWidth(),o=t.tileMap.getTileHeight(),a=t.tileMap.getDimensionX(),d=t.tileMap.getDimensionY(),c=t.getAlpha();for(let e=0;e<d;e++)for(let d=0;d<a;d++){const a=s*d,h=o*e,u=t.getTileGID(d,e);if(void 0===u)continue;const p=l.getTileId(u),g=t.tileMap.getTileDefinition(p);if(g.hasStackedTiles())for(const e of g.getStackedTiles()){const t=l.getTileId(e),s=i.getTexture(t);if(!s)continue;const o=n(e);r.tile(s,a,h,{alpha:c,rotate:o})}else{const t=i.getTexture(p);if(!t){console.warn(`Unknown tile id: ${p} at (${d}, ${e})`);continue}const l=n(u),o=r.tile(t,a,h,{alpha:c,rotate:l});g.getAnimationLength()>0&&o.tileAnimX(s,g.getAnimationLength())}}}},w.updatePixiCollisionMask=function(e,t,i,s,l,n,o,r){if(e){e.clear(),e.lineStyle(s,l,n),e.drawRect(0,0,t.getWidth(),t.getHeight());for(const s of t.getLayers()){const l=t.getTileWidth(),n=t.getTileHeight();if(s instanceof h){const t=s;for(let s=0;s<t.tileMap.getDimensionY();s++)for(let a=0;a<t.tileMap.getDimensionX();a++){const d=l*a,c=n*s,h=t.getTileId(a,s),u=t.isFlippedHorizontally(a,s),p=t.isFlippedVertically(a,s),g=t.isFlippedDiagonally(a,s),f=t.tileMap.getTileDefinition(h);if(!f)continue;const y=f.getHitBoxes(i);if(y)for(const t of y)if(0!==t.length){e.beginFill(o,r);for(let i=0;i<t.length;i++){let s=t[i][0],o=t[i][1];if(g){const e=s;s=o,o=e}u&&(s=l-s),p&&(o=n-o),0===i?e.moveTo(d+s,c+o):e.lineTo(d+s,c+o)}e.closePath(),e.endFill()}}}}}},function(e){e.load=function(e,t){const i=e.levels[t>-1?t:0];if(!i||!i.layerInstances)return null;const s=new Map;let l=0,n=0,a=0;for(let e=i.layerInstances.length-1;e>=0;--e){const t=i.layerInstances[e],o=t.__tilesetDefUid,r={};for(const e of[...t.autoLayerTiles,...t.gridTiles]){if(r[e.t])continue;const t=M(o,e.t);if(s.has(t)){r[e.t]=!0;continue}const i=new u(0);r[e.t]=!0,s.set(t,i)}"IntGrid"!==t.__type&&"AutoLayer"!==t.__type&&"Tiles"!==t.__type||(0===l?(l=t.__gridSize,n=t.__cWid,a=t.__cHei):t.__gridSize!==l&&console.warn("Grid size is different across layers. Only the first layer grid size will be followed."))}const d=new r(l,l,n,a,s),c=new Map;let h=268435455;for(let e=i.layerInstances.length-1;e>=0;--e){const t=i.layerInstances[e],l=t.__gridSize,n=t.__tilesetDefUid,r=d.addNewTileLayer(e);r.setAlpha(t.__opacity),r.setVisible(t.visible);for(const e of[...t.autoLayerTiles,...t.gridTiles]){const t=Math.floor(e.px[0]/l),i=Math.floor(e.px[1]/l),a=M(n,e.t),d=r.getTileId(t,i);if(void 0===d)r.setTile(t,i,a),r.setFlippedHorizontally(t,i,1===e.f||3===e.f),r.setFlippedVertically(t,i,2===e.f||3===e.f);else{const l=o(a,1===e.f||3===e.f,2===e.f||3===e.f,!1),n=s.get(d);if(null==n?void 0:n.hasStackedTiles()){const e=`${n.getStackedTiles().map((e=>`${e}`)).join(";")};${l}`,o=c.get(e);if(o)r.setTile(t,i,o.getStackTileId());else{const o=new u(0);o.setStackedTiles(h,...n.getStackedTiles(),l),s.set(h,o),h-=1,c.set(e,o),r.setTile(t,i,o.getStackTileId())}}else{const e=r.getTileGID(t,i),n=`${e};${l}`,o=new u(0);o.setStackedTiles(h,e,l),s.set(h,o),h-=1,c.set(n,o),r.setTile(t,i,o.getStackTileId())}}}}return i.bgRelPath&&d.setBackgroundResourceName(i.bgRelPath),d}}(x||(x={})),function(e){e.load=function(e,t){if(!e.tiledversion)return console.warn("The loaded Tiled map does not contain a 'tiledversion' key. Are you sure this file has been exported from Tiled (mapeditor.org)?"),null;const i=new Map;for(const t of e.tilesets){const s=void 0===t.firstgid?1:t.firstgid;if(t.tiles)for(const l of t.tiles){const t=new u(l.animation?l.animation.length:0),n=l.type||l.class;if(l.objectgroup)for(const i of l.objectgroup.objects){const s=i.type||i.class||n;if(!s||0===s.length)continue;let l=null,o=!1;if(i.polygon){const e=i.rotation*Math.PI/180;let t=Math.cos(e),s=Math.sin(e);-1!==t&&1!==t||(s=0),-1!==s&&1!==s||(t=0),l=i.polygon.map((e=>[i.x+e.x*t-e.y*s,i.y+e.x*s+e.y*t]))}else void 0!==i.x&&void 0!==i.y&&void 0!==i.width&&void 0!==i.height&&(l=[[i.x,i.y],[i.x,i.y+i.height],[i.x+i.width,i.y+i.height],[i.x+i.width,i.y]],o=0===i.x&&0===i.y&&i.width===e.tilewidth&&i.height===e.tileheight);l&&t.addHitBox(s,l,o)}else if(n){const i=[[0,0],[0,e.tileheight],[e.tilewidth,e.tileheight],[e.tilewidth,0]];t.addHitBox(n,i,!0)}i.set(T(s+l.id),t)}for(let e=0;e<t.tilecount;e++){const t=T(s+e);i.has(t)||i.set(t,new u(0))}}const s=new r(e.tilewidth,e.tileheight,e.width,e.height,i);for(const i of e.layers)if("objectgroup"===i.type){const e=s.addObjectLayer(i.id);e.setVisible(i.visible);for(const t of i.objects){if(!t.visible||!t.gid)continue;const i=y(t.gid),s=new c(t.x,t.y,i.id);e.add(s),s.setFlippedHorizontally(i.flippedHorizontally),s.setFlippedVertically(i.flippedVertically),s.setFlippedDiagonally(i.flippedDiagonally)}}else if("tilelayer"===i.type){let e=0,l=null;if("base64"===i.encoding?(l=f(t,i),l||console.warn("Failed to uncompress layer.data")):l=i.data,l){const t=s.addNewTileLayer(i.id);t.setAlpha(i.opacity),t.setVisible(i.visible);for(let s=0;s<i.height;s++)for(let n=0;n<i.width;n++){const i=l[e],o=y(i);void 0!==o.id&&(t.setTile(n,s,o.id),t.setFlippedHorizontally(n,s,o.flippedHorizontally),t.setFlippedVertically(n,s,o.flippedVertically),t.setFlippedDiagonally(n,s,o.flippedDiagonally)),e+=1}}}return s}}(I||(I={})),function(e){e.load=function(e,t,i){return"ldtk"===e.kind?x.load(e.data,t):"tiled"===e.kind?I.load(e.data,i):(console.warn("The loaded Tile Map data does not contain a 'tiledversion' or '__header__' key. Are you sure this file has been exported from Tiled (mapeditor.org) or LDtk (ldtk.io)?"),null)}}(b||(b={}));class v{constructor(){this._tileMapCache=new p,this._textureCacheCaches=new p}static getManager(e){return e.tileMapCollisionMaskManager||(e.tileMapCollisionMaskManager=new v),e.tileMapCollisionMaskManager}static identify(e){return e.tiledversion?(console.info("Detected the json file was created in Tiled"),{kind:"tiled",data:e}):e.__header__&&"LDtk"===e.__header__.app?(console.info("Detected the json/ldtk file was created in LDtk"),{kind:"ldtk",data:e}):(console.warn("The loaded Tile Map data does not contain a 'tiledversion' or '__header__' key. Are you sure this file has been exported from Tiled (mapeditor.org) or LDtk (ldtk.io)?"),null)}getOrLoadTileMap(e,t,i,s,l,n){const o=t+"|"+i+"|"+s;this._tileMapCache.getOrLoad(o,(n=>{e(t,i,(e=>{if(!e)return void n(null);const t=b.load(e,s,l);n(t)}))}),n)}getOrLoadSimpleTileMap(e,t,i,s,l,n){n(r.from(e,{tileSize:i,tileSetColumnCount:s,tileSetRowCount:l}))}getOrLoadTextureCache(t,i,s,l,n,o,r){const a=l+"|"+n+"|"+s+"|"+o;this._textureCacheCaches.getOrLoad(a,(r=>{t(l,n,(t=>{if(!t)return void r(null);const l=s?i(s):null,n=e.PixiTileMapHelper.parseAtlas(t,o,l,i);r(n)}))}),r)}getOrLoadSimpleTileMapTextureCache(t,i,s,l,n,o){const r=`${i}|${s}|${l}|${n}`;this._textureCacheCaches.getOrLoad(r,(o=>{if(!i)return void o(null);const r=t(i);o(e.PixiTileMapHelper.parseSimpleTileMapAtlas(r,l,n,s))}),o)}clearCaches(){this._tileMapCache=new p,this._textureCacheCaches=new p}}e.EditableTileMap=r,e.EditableTileMapLayer=h,e.TileDefinition=u,e.TileMapManager=v,e.TileTextureCache=g,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TileMapHelper={})}(this,(function(e){"use strict";const t=2147483648,i=1073741824,s=536870912;var l;function n(e){const t=l.isFlippedDiagonally(e),i=l.isFlippedHorizontally(e),s=l.isFlippedVertically(e);let n=0;return t?(n=10,!i&&s?n=2:i&&!s?n=6:i&&s&&(n=14)):(n=0,!i&&s?n=8:i&&!s?n=12:i&&s&&(n=4)),n}function o(e,l,n,o){let r=e;return l&&(r|=t),n&&(r|=i),o&&(r|=s),r}!function(e){e.tileIdMask=536870911,e.getTileId=function(t){return t&e.tileIdMask},e.setFlippedHorizontally=function(e,i){return e&=2147483647,i&&(e|=t),e},e.setFlippedVertically=function(e,t){return e&=-1073741825,t&&(e|=i),e},e.setFlippedDiagonally=function(e,t){return e&=-536870913,t&&(e|=s),e},e.isFlippedHorizontally=function(e){return 0!=(e&t)},e.isFlippedVertically=function(e){return 0!=(e&i)},e.isFlippedDiagonally=function(e){return 0!=(e&s)}}(l||(l={}));class r{constructor(e,t,i,s,l){this.tileWidth=e,this.tileHeight=t,this.dimX=i,this.dimY=s,this._tileSet=l,this._layers=[]}static from(e,{tileSize:t,tileSetColumnCount:i,tileSetRowCount:s}){const l=new Map;if(!Number.isInteger(i)||i<=0||!Number.isInteger(s)||s<=0)throw new Error(`Tilemap object badly configured. Tile size ${t} is not compatible with atlas image dimensions, resulting in having ${i} columns and ${s} rows.`);new Array(i*s).fill(0).forEach(((e,t)=>{l.set(t,new u(0))}));const n=new r(t||e.tileWidth,t||e.tileHeight,e.dimX||1,e.dimY||1,l);return e.layers?e.layers.forEach((e=>{n.addTileLayer(h.from(e,n,(e=>e<i*s)))})):n.addNewTileLayer(0),n}toJSObject(){return{tileWidth:this.tileWidth,tileHeight:this.tileHeight,dimX:this.dimX,dimY:this.dimY,layers:this._layers.map((e=>e.toJSObject()))}}getWidth(){return this.tileWidth*this.dimX}getHeight(){return this.tileHeight*this.dimY}getTileHeight(){return this.tileHeight}getTileWidth(){return this.tileWidth}getDimensionX(){return this.dimX}getDimensionY(){return this.dimY}setDimensionX(e){if(e===this.dimX)return;const t=e-this.dimX;for(const e of this.getLayers())e instanceof h&&(t>0?e.increaseDimensions(t,0,0,0):e.reduceDimensions(-t,0,0,0));this.dimX=e}increaseDimensions(e,t,i,s){if(!(e<0||t<0||i<0||s<0||0===e&&0===t&&0===i&&0===s)){for(const l of this.getLayers())l instanceof h&&l.increaseDimensions(e,t,i,s);this.dimX=this.dimX+e+t,this.dimY=this.dimY+i+s}}setDimensionY(e){if(e===this.dimY)return;const t=e-this.dimY;for(const e of this.getLayers())e instanceof h&&(t>0?e.increaseDimensions(0,0,t,0):e.reduceDimensions(0,0,-t,0));this.dimY=e}getTileDefinition(e){return this._tileSet.get(e)}getTileDefinitions(){return this._tileSet.values()}addNewTileLayer(e){const t=new h(this,e);return this._layers.push(t),t}addTileLayer(e){this._layers.push(e)}getTileLayer(e){const t=this._layers.find((t=>t.id===e));return t instanceof h?t:null}addObjectLayer(e){const t=new d(this,e);return this._layers.push(t),t}getBackgroundResourceName(){return this._backgroundResourceName}getLayers(){return this._layers}pointIsInsideTile(e,t,i){const s=Math.floor(e/this.tileWidth),l=Math.floor(t/this.tileHeight);for(const e of this._layers){const t=e;if(!t)continue;const n=t.getTileId(s,l);if(void 0===n)return!1;if(this._tileSet.get(n).hasTaggedHitBox(i))return!0}return!1}setBackgroundResourceName(e){this._backgroundResourceName=e}isEmpty(){return this._layers.every((e=>e.isEmpty()))}getTileId(e,t,i){const s=this.getTileLayer(i);if(!s)return-1;const l=s.getTileId(e,t);return void 0===l?-1:l}setTile(e,t,i,s){const l=this.getTileLayer(i);l&&l.setTile(e,t,s)}flipTileOnY(e,t,i,s){const l=this.getTileLayer(i);l&&l.setFlippedVertically(e,t,s)}flipTileOnX(e,t,i,s){const l=this.getTileLayer(i);l&&l.setFlippedHorizontally(e,t,s)}isTileFlippedOnX(e,t,i){const s=this.getTileLayer(i);return!!s&&s.isFlippedHorizontally(e,t)}isTileFlippedOnY(e,t,i){const s=this.getTileLayer(i);return!!s&&s.isFlippedVertically(e,t)}removeTile(e,t,i){if(e<0||e>=this.dimX||t<0||t>=this.dimY)return;const s=this.getTileLayer(i);s&&s.removeTile(e,t)}trimEmptyColumnsAndRowToFitLayer(e){const t=this.getTileLayer(e);if(!t)return;const i=this.dimY,s=this.dimX;if(t.isEmpty()&&1===this._layers.length)return t.buildEmptyLayer(1,1),this.dimX=1,this.dimY=1,{shiftedRows:0,shiftedColumns:0,poppedRows:i-1,poppedColumns:s-1};const l=t.getTrimmingData();for(const e of this.getLayers())e instanceof h&&e.reduceDimensions(l.columnsToPop,l.columnsToShift,l.rowsToPop,l.rowsToShift);return this.dimX=s-l.columnsToPop-l.columnsToShift,this.dimY=i-l.rowsToPop-l.rowsToShift,{poppedRows:l.rowsToPop,poppedColumns:l.columnsToPop,shiftedRows:l.rowsToShift,shiftedColumns:l.columnsToShift}}}class a{constructor(e,t){this.visible=!0,this.tileMap=e,this.id=t}setVisible(e){this.visible=e}toJSObject(){return{}}isVisible(){return this.visible}isEmpty(){return!0}}class d extends a{constructor(e,t){super(e,t),this.objects=[]}add(e){this.objects.push(e)}isEmpty(){return 0===this.objects.length}}class c{constructor(e,t,i){this.tileId=i,this.x=e,this.y=t}getTileId(){return l.getTileId(this.tileId)}setFlippedHorizontally(e){this.tileId=l.setFlippedHorizontally(this.tileId,e)}setFlippedVertically(e){this.tileId=l.setFlippedVertically(this.tileId,e)}setFlippedDiagonally(e){this.tileId=l.setFlippedDiagonally(this.tileId,e)}isFlippedHorizontally(){return l.isFlippedHorizontally(this.tileId)}isFlippedVertically(){return l.isFlippedVertically(this.tileId)}isFlippedDiagonally(){return l.isFlippedDiagonally(this.tileId)}}class h extends a{constructor(e,t){super(e,t),this.buildEmptyLayer(this.tileMap.getDimensionX(),this.tileMap.getDimensionY()),this._alpha=1}buildEmptyLayer(e,t){this._tiles=[],this._tiles.length=t;for(let t=0;t<this._tiles.length;t++)this._tiles[t]=new Int32Array(e)}static from(e,t,i){const s=new h(t,e.id);return s.setAlpha(e.alpha),e.tiles.forEach(((e,t)=>e.forEach(((e,n)=>{const o=l.getTileId(e);i(o)&&s.setTileGID(n,t,e)})))),s}toJSObject(){return{id:this.id,alpha:this._alpha,tiles:this._tiles.map(((e,t)=>Array.from(e.map(((e,i)=>{const s=this.getTileGID(i,t);return void 0===s?-1:s})))))}}getAlpha(){return this._alpha}setAlpha(e){this._alpha=e}isEmpty(){return this._tiles.every((e=>e.every((e=>0===e))))}reduceDimensions(e,t,i,s){(i>0||s>0)&&(this._tiles=this._tiles.slice(s,i?-i:void 0)),(e>0||t>0)&&this._tiles.forEach(((i,s)=>{this._tiles[s]=this._tiles[s].slice(t,e?-e:void 0)}))}increaseDimensions(e,t,i,s){const l=this._tiles.length,n=this._tiles[0].length;if((e>0||t>0)&&this._tiles.forEach(((i,s)=>{const l=new Int32Array(n+e+t).fill(0);l.set(i,t),this._tiles[s]=l})),i>0||s>0){this._tiles.unshift(...new Array(s).fill(0).map((()=>new Int32Array(n+e+t).fill(0)))),this._tiles.length=l+i+s;for(let i=l+s;i<this._tiles.length;i++)this._tiles[i]=new Int32Array(n+e+t).fill(0)}}setTile(e,t,i){if(!this.tileMap.getTileDefinition(i))return void console.error(`Invalid tile definition index: ${i}`);const s=this._tiles[t];!s||e>=s.length||(s[e]=i+1)}setTileGID(e,t,i){const s=this._tiles[t];!s||e>=s.length||(s[e]=i+1)}getTrimmingData(){let e=0,t=0;const i=this.getDimensionX(),s=this.getDimensionY(),l=new Array(this._tiles.length).fill(this._tiles[0].length),n=new Array(this._tiles.length).fill(this._tiles[0].length);let o=!1;for(let i=0;i<this._tiles.length;i++){const s=this._tiles[i];let r=!1;for(let e=0;e<s.length;e++){0!==s[e]&&(n[i]=s.length-1-e,r||(l[i]=e,r=!0))}!r||(t=this._tiles.length-1-i,o||(e=i,o=!0))}if(!o)return{columnsToShift:0,rowsToShift:0,columnsToPop:i-1,rowsToPop:s-1};return{rowsToShift:e,columnsToShift:Math.min(...l),rowsToPop:t,columnsToPop:Math.min(...n)}}removeTile(e,t){const i=this._tiles[t];!i||e>=i.length||(i[e]=0)}setFlippedHorizontally(e,t,i){const s=this._tiles[t];if(!s||e>=s.length)return;const n=s[e];0!==n&&(s[e]=l.setFlippedHorizontally(n,i))}setFlippedVertically(e,t,i){const s=this._tiles[t];if(!s||e>=s.length)return;const n=s[e];0!==n&&(s[e]=l.setFlippedVertically(n,i))}setFlippedDiagonally(e,t,i){const s=this._tiles[t];if(!s||e>=s.length)return;const n=s[e];0!==n&&(s[e]=l.setFlippedDiagonally(n,i))}isFlippedHorizontally(e,t){const i=this._tiles[t];return!(!i||e>=i.length)&&l.isFlippedHorizontally(i[e])}isFlippedVertically(e,t){const i=this._tiles[t];return!(!i||e>=i.length)&&l.isFlippedVertically(i[e])}isFlippedDiagonally(e,t){const i=this._tiles[t];return!(!i||e>=i.length)&&l.isFlippedDiagonally(i[e])}getTileGID(e,t){const i=this._tiles[t];if(i&&!(e>=i.length)&&0!==i[e])return i[e]-1}getTileId(e,t){const i=this._tiles[t];if(!i||e>=i.length||0===i[e])return;return l.getTileId(i[e]-1)}getDimensionX(){return 0===this._tiles.length?0:this._tiles[0].length}getDimensionY(){return this._tiles.length}getWidth(){return this.tileMap.getWidth()}getHeight(){return this.tileMap.getHeight()}}class u{constructor(e){this.taggedHitBoxes=[],this.animationLength=null!=e?e:0,this.stackedTiles=[]}addHitBox(e,t,i){let s=this.taggedHitBoxes.find((t=>t.tag===e));s||(s={tag:e,polygons:[],hasFullHitBox:!1},this.taggedHitBoxes.push(s)),s.hasFullHitBox||(s.hasFullHitBox=i),s.polygons.push(t)}hasTaggedHitBox(e){return this.taggedHitBoxes.some((t=>t.tag===e))}getHitBoxes(e){const t=this.taggedHitBoxes.find((t=>t.tag===e));return t&&t.polygons}hasFullHitBox(e){const t=this.taggedHitBoxes.find((t=>t.tag===e));return t&&t.hasFullHitBox}getAnimationLength(){return this.animationLength}getStackTileId(){return this.stackTileId}getStackedTiles(){return this.stackedTiles}hasStackedTiles(){return this.stackedTiles.length>0}setStackedTiles(e,...t){this.stackedTiles=t,this.stackTileId=e}}class p{constructor(){this._cachedValues=new Map,this._callbacks=new Map}getOrLoad(e,t,i){{const t=this._cachedValues.get(e);if(t)return void i(t)}{const t=this._callbacks.get(e);if(t)return void t.push(i);this._callbacks.set(e,[i])}t((t=>{t&&this._cachedValues.set(e,t);const i=this._callbacks.get(e);this._callbacks.delete(e);for(const e of i)e(t)}))}}class g{constructor(){this._levelBackgroundTextures=new Map,this._textures=new Map}setTexture(e,t){this._textures.set(e,t)}getTexture(e){return this._textures.get(e)}getLevelBackgroundTexture(e){return this._levelBackgroundTextures.get(e)}setLevelBackgroundTexture(e,t){this._levelBackgroundTextures.set(e,t)}}const f=(e,t)=>{const{data:i,compression:s}=t;if(!i)return i;let l=4;const n=[];let o=atob(i).split("").map((function(e){return e.charCodeAt(0)}));try{const t=(e,t)=>e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)>>>0;if("zlib"===s){const i=new Uint8Array(o),s=e.inflate(i);for(;l<=s.length;)n.push(t(s,l-4)),l+=4}else{if("zstd"===s)return console.error("Zstandard compression is not supported for layers in a Tilemap. Use instead zlib compression or no compression."),null;for(;l<=o.length;)n.push(t(o,l-4)),l+=4}return n}catch(e){return console.error("Failed to decompress and unzip base64 layer.data string",e),null}},y=e=>{const l=e&t,n=e&i,o=e&s;return{id:T(536870911&e),flippedHorizontally:!!l,flippedVertically:!!n,flippedDiagonally:!!o}};function T(e){return 0===e?void 0:e-1}var m,_,w,x,I;function b(e,t){let i=e<<16;return i+=t,i}function k(e,t,i,s){var l;if(e[s])return e[s];let n=null;const o=t[s];return(null==o?void 0:o.relPath)?(n=i(o.relPath),"res/error48.png"===(null===(l=n.baseTexture)||void 0===l?void 0:l.cacheId)&&(console.error(`The atlas texture "${o.relPath}" can't be loaded`),n=null)):console.error(`The tileset "${o.identifier}" doesn't seems to contain an atlas texture`),e[s]=n,n}!function(e){e.parseAtlas=function(e,t,i,s){if(!e.tiledversion)return console.warn("The loaded Tiled map does not contain a 'tiledversion' key. Are you sure this file has been exported from Tiled (mapeditor.org)?"),null;if(!e.tilesets.length||"source"in e.tilesets[0])return console.warn("The loaded Tiled map seems not to contain any tileset data (nothing in 'tilesets' key)."),null;const l=e.tilesets[0],{tilewidth:n,tileheight:o,tilecount:r,image:a,columns:d,spacing:c,margin:h}=l,u=void 0===l.firstgid?1:l.firstgid;i||(i=s(a));const p=r/d,f=n*d+c*(d-1)+2*h,y=o*p+c*(p-1)+2*h;if(i.width<f||i.height<y)return console.error(`It seems the atlas file was resized, which is not supported. It should be ${f}x${y} px, but it's actually ${i.width}x${i.height} px.`),null;i.width===f&&i.height===y||console.warn(`It seems the atlas file has unused pixels. It should be ${f}x${y} px, but it's actually ${i.width}x${i.height} px.`);const m=new g;for(let e=0;e<r;e++){const t=h+Math.floor(e%d)*(n+c),s=h+Math.floor(e/d)*(o+c),l=T(u+e);try{const e=new PIXI.Rectangle(t,s,n,o),r=new PIXI.Texture(i,e);m.setTexture(l,r)}catch(e){console.error("An error occurred while creating a PIXI.Texture to be used in a TileMap:",e)}}return m}}(m||(m={})),function(e){e.parseAtlas=function(e,t,i,s){const l=e.levels[t>-1?t:0];if(!l||!l.layerInstances)return null;const n={};for(const t of e.defs.tilesets)n[t.uid]=t;const o=new g,r={},a={};for(let e=l.layerInstances.length-1;e>=0;--e){const t=l.layerInstances[e];if("Entities"===t.__type)continue;const i=t.__tilesetDefUid;if("number"!=typeof i)continue;const d=n[i],c=k(a,n,s,i);if(!c)continue;const h={},u=d.tileGridSize;for(const e of[...t.autoLayerTiles,...t.gridTiles]){if(h[e.t])continue;const t=b(i,e.t);if(r[t])h[e.t]=!0;else{try{const[i,s]=e.src,l=new PIXI.Rectangle(i,s,u,u),n=new PIXI.Texture(c,l);o.setTexture(t,n)}catch(e){console.error("An error occurred while creating a PIXI.Texture to be used in a TileMap:",e)}h[e.t]=!0,r[t]=!0}}}if(l.bgRelPath){const e=s(l.bgRelPath),t=new PIXI.Rectangle(0,0,l.pxWid,l.pxHei),i=new PIXI.Texture(e,t);o.setLevelBackgroundTexture(l.bgRelPath,i)}return o}}(_||(_={})),e.PixiTileMapHelper=void 0,function(e){function t(e,t,i,s,l){const n=t.tileMap,o=n.getTileWidth(),r=n.getTileHeight();for(let a=0;a<n.getDimensionY();a++)for(let d=0;d<n.getDimensionX();d++){const c=o*d,h=r*a,u=t.getTileId(d,a),p=t.isFlippedHorizontally(d,a),g=t.isFlippedVertically(d,a),f=t.isFlippedDiagonally(d,a),y=n.getTileDefinition(u);if(!y)continue;const T=y.getHitBoxes(i);if(T)for(const t of T)if(0!==t.length){e.beginFill(s,l);for(let i=0;i<t.length;i++){let s=t[i][0],l=t[i][1];if(f){const e=s;s=l,l=e}p&&(s=o-s),g&&(l=r-l),0===i?e.moveTo(c+s,h+l):e.lineTo(c+s,h+l)}e.closePath(),e.endFill()}}}e.parseAtlas=function(e,t,i,s){return"ldtk"===e.kind?_.parseAtlas(e.data,t,i,s):"tiled"===e.kind?m.parseAtlas(e.data,t,i,s):(console.warn("The loaded Tiled map data does not contain a 'tiledversion' or '__header__' key. Are you sure this file has been exported from Tiled (mapeditor.org) or LDtk (ldtk.io)?"),null)},e.parseSimpleTileMapAtlas=function(e,t,i,s){const l=new g;for(let n=0;n<t;n++)for(let o=0;o<i;o++){const i=new PIXI.Rectangle(n*s,o*s,s,s),r=new PIXI.Texture(e,i);l.setTexture(t*o+n,r)}return l},e.updatePixiTileMap=function(e,t,i,s,o){const r=e;if(!r)return;r.clear();const a=t.getBackgroundResourceName();if(a){const e=i.getLevelBackgroundTexture(a);r.tile(e,0,0)}for(const e of t.getLayers())if(!("index"===s&&o!==e.id||"visible"===s&&!e.isVisible()))if(e instanceof d){const t=e;for(const e of t.objects){const s=e.getTileId(),l=i.getTexture(s);if(l){const i=n(s);r.tile(l,e.x,e.y-t.tileMap.getTileHeight(),{rotate:i})}}}else if(e instanceof h){const t=e,s=t.tileMap.getTileWidth(),o=t.tileMap.getTileHeight(),a=t.tileMap.getDimensionX(),d=t.tileMap.getDimensionY(),c=t.getAlpha();for(let e=0;e<d;e++)for(let d=0;d<a;d++){const a=s*d,h=o*e,u=t.getTileGID(d,e);if(void 0===u)continue;const p=l.getTileId(u),g=t.tileMap.getTileDefinition(p);if(g.hasStackedTiles())for(const e of g.getStackedTiles()){const t=l.getTileId(e),s=i.getTexture(t);if(!s)continue;const o=n(e);r.tile(s,a,h,{alpha:c,rotate:o})}else{const t=i.getTexture(p);if(!t){console.warn(`Unknown tile id: ${p} at (${d}, ${e})`);continue}const l=n(u),o=r.tile(t,a,h,{alpha:c,rotate:l});g.getAnimationLength()>0&&o.tileAnimX(s,g.getAnimationLength())}}}},e.updatePixiCollisionMask=function(e,i,s,l,n,o,r,a,d){if(e)if(e.clear(),e.lineStyle(n,o,r),e.drawRect(0,0,i.getWidth(),i.getHeight()),l){t(e,i.getTileLayer(l),s,a,d)}else for(const l of i.getLayers())l instanceof h&&t(e,l,s,a,d)}}(e.PixiTileMapHelper||(e.PixiTileMapHelper={})),function(e){e.load=function(e,t){const i=e.levels[t>-1?t:0];if(!i||!i.layerInstances)return null;const s=new Map;let l=0,n=0,a=0;for(let e=i.layerInstances.length-1;e>=0;--e){const t=i.layerInstances[e],o=t.__tilesetDefUid,r={};for(const e of[...t.autoLayerTiles,...t.gridTiles]){if(r[e.t])continue;const t=b(o,e.t);if(s.has(t)){r[e.t]=!0;continue}const i=new u(0);r[e.t]=!0,s.set(t,i)}"IntGrid"!==t.__type&&"AutoLayer"!==t.__type&&"Tiles"!==t.__type||(0===l?(l=t.__gridSize,n=t.__cWid,a=t.__cHei):t.__gridSize!==l&&console.warn("Grid size is different across layers. Only the first layer grid size will be followed."))}const d=new r(l,l,n,a,s),c=new Map;let h=268435455;for(let e=i.layerInstances.length-1;e>=0;--e){const t=i.layerInstances[e],l=t.__gridSize,n=t.__tilesetDefUid,r=d.addNewTileLayer(e);r.setAlpha(t.__opacity),r.setVisible(t.visible);for(const e of[...t.autoLayerTiles,...t.gridTiles]){const t=Math.floor(e.px[0]/l),i=Math.floor(e.px[1]/l),a=b(n,e.t),d=r.getTileId(t,i);if(void 0===d)r.setTile(t,i,a),r.setFlippedHorizontally(t,i,1===e.f||3===e.f),r.setFlippedVertically(t,i,2===e.f||3===e.f);else{const l=o(a,1===e.f||3===e.f,2===e.f||3===e.f,!1),n=s.get(d);if(null==n?void 0:n.hasStackedTiles()){const e=`${n.getStackedTiles().map((e=>`${e}`)).join(";")};${l}`,o=c.get(e);if(o)r.setTile(t,i,o.getStackTileId());else{const o=new u(0);o.setStackedTiles(h,...n.getStackedTiles(),l),s.set(h,o),h-=1,c.set(e,o),r.setTile(t,i,o.getStackTileId())}}else{const e=r.getTileGID(t,i),n=`${e};${l}`,o=new u(0);o.setStackedTiles(h,e,l),s.set(h,o),h-=1,c.set(n,o),r.setTile(t,i,o.getStackTileId())}}}}return i.bgRelPath&&d.setBackgroundResourceName(i.bgRelPath),d}}(w||(w={})),function(e){e.load=function(e,t){if(!e.tiledversion)return console.warn("The loaded Tiled map does not contain a 'tiledversion' key. Are you sure this file has been exported from Tiled (mapeditor.org)?"),null;const i=new Map;for(const t of e.tilesets){const s=void 0===t.firstgid?1:t.firstgid;if(t.tiles)for(const l of t.tiles){const t=new u(l.animation?l.animation.length:0),n=l.type||l.class;if(l.objectgroup)for(const i of l.objectgroup.objects){const s=i.type||i.class||n;if(!s||0===s.length)continue;let l=null,o=!1;if(i.polygon){const e=i.rotation*Math.PI/180;let t=Math.cos(e),s=Math.sin(e);-1!==t&&1!==t||(s=0),-1!==s&&1!==s||(t=0),l=i.polygon.map((e=>[i.x+e.x*t-e.y*s,i.y+e.x*s+e.y*t]))}else void 0!==i.x&&void 0!==i.y&&void 0!==i.width&&void 0!==i.height&&(l=[[i.x,i.y],[i.x,i.y+i.height],[i.x+i.width,i.y+i.height],[i.x+i.width,i.y]],o=0===i.x&&0===i.y&&i.width===e.tilewidth&&i.height===e.tileheight);l&&t.addHitBox(s,l,o)}else if(n){const i=[[0,0],[0,e.tileheight],[e.tilewidth,e.tileheight],[e.tilewidth,0]];t.addHitBox(n,i,!0)}i.set(T(s+l.id),t)}for(let e=0;e<t.tilecount;e++){const t=T(s+e);i.has(t)||i.set(t,new u(0))}}const s=new r(e.tilewidth,e.tileheight,e.width,e.height,i);for(const i of e.layers)if("objectgroup"===i.type){const e=s.addObjectLayer(i.id);e.setVisible(i.visible);for(const t of i.objects){if(!t.visible||!t.gid)continue;const i=y(t.gid),s=new c(t.x,t.y,i.id);e.add(s),s.setFlippedHorizontally(i.flippedHorizontally),s.setFlippedVertically(i.flippedVertically),s.setFlippedDiagonally(i.flippedDiagonally)}}else if("tilelayer"===i.type){let e=0,l=null;if("base64"===i.encoding?(l=f(t,i),l||console.warn("Failed to uncompress layer.data")):l=i.data,l){const t=s.addNewTileLayer(i.id);t.setAlpha(i.opacity),t.setVisible(i.visible);for(let s=0;s<i.height;s++)for(let n=0;n<i.width;n++){const i=l[e],o=y(i);void 0!==o.id&&(t.setTile(n,s,o.id),t.setFlippedHorizontally(n,s,o.flippedHorizontally),t.setFlippedVertically(n,s,o.flippedVertically),t.setFlippedDiagonally(n,s,o.flippedDiagonally)),e+=1}}}return s}}(x||(x={})),function(e){e.load=function(e,t,i){return"ldtk"===e.kind?w.load(e.data,t):"tiled"===e.kind?x.load(e.data,i):(console.warn("The loaded Tile Map data does not contain a 'tiledversion' or '__header__' key. Are you sure this file has been exported from Tiled (mapeditor.org) or LDtk (ldtk.io)?"),null)}}(I||(I={}));class M{constructor(){this._tileMapCache=new p,this._textureCacheCaches=new p}static getManager(e){return e.tileMapCollisionMaskManager||(e.tileMapCollisionMaskManager=new M),e.tileMapCollisionMaskManager}static identify(e){return e.tiledversion?(console.info("Detected the json file was created in Tiled"),{kind:"tiled",data:e}):e.__header__&&"LDtk"===e.__header__.app?(console.info("Detected the json/ldtk file was created in LDtk"),{kind:"ldtk",data:e}):(console.warn("The loaded Tile Map data does not contain a 'tiledversion' or '__header__' key. Are you sure this file has been exported from Tiled (mapeditor.org) or LDtk (ldtk.io)?"),null)}getOrLoadTileMap(e,t,i,s,l,n){const o=t+"|"+i+"|"+s;this._tileMapCache.getOrLoad(o,(n=>{e(t,i,(e=>{if(!e)return void n(null);const t=I.load(e,s,l);n(t)}))}),n)}getOrLoadSimpleTileMap(e,t,i,s,l,n){n(r.from(e,{tileSize:i,tileSetColumnCount:s,tileSetRowCount:l}))}getOrLoadTextureCache(t,i,s,l,n,o,r){const a=l+"|"+n+"|"+s+"|"+o;this._textureCacheCaches.getOrLoad(a,(r=>{t(l,n,(t=>{if(!t)return void r(null);const l=s?i(s):null,n=e.PixiTileMapHelper.parseAtlas(t,o,l,i);r(n)}))}),r)}getOrLoadSimpleTileMapTextureCache(t,i,s,l,n,o){const r=`${i}|${s}|${l}|${n}`;this._textureCacheCaches.getOrLoad(r,(o=>{if(!i)return void o(null);const r=t(i);o(e.PixiTileMapHelper.parseSimpleTileMapAtlas(r,l,n,s))}),o)}clearCaches(){this._tileMapCache=new p,this._textureCacheCaches=new p}}e.EditableTileMap=r,e.EditableTileMapLayer=h,e.TileDefinition=u,e.TileMapManager=M,e.TileTextureCache=g,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
2
|
//# sourceMappingURL=TileMapHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileMapHelper.js","sources":["../../../SharedLibs/src/model/GID.ts","../../../SharedLibs/src/model/TileMapModel.ts","../../../SharedLibs/src/render/ResourceCache.ts","../../../SharedLibs/src/render/TileTextureCache.ts","../../../SharedLibs/src/load/tiled/TiledTileMapLoaderHelper.ts","../../../SharedLibs/src/render/tiled/TiledPixiHelper.ts","../../../SharedLibs/src/render/ldtk/LDtkPixiHelper.ts","../../../SharedLibs/src/render/TileMapPixiHelper.ts","../../../SharedLibs/src/load/ldtk/LDtkTileMapLoader.ts","../../../SharedLibs/src/load/tiled/TiledTileMapLoader.ts","../../../SharedLibs/src/load/TileMapLoader.ts","../../../SharedLibs/src/load/ldtk/LDtkTileMapLoaderHelper.ts","../../../SharedLibs/src/render/TileMapManager.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["FLIPPED_HORIZONTALLY_FLAG","FLIPPED_VERTICALLY_FLAG","FLIPPED_DIAGONALLY_FLAG","FlippingHelper","getPixiRotate","tileGID","flippedDiagonally","isFlippedDiagonally","flippedHorizontally","isFlippedHorizontally","flippedVertically","isFlippedVertically","rotate","getTileGID","tileId","tileIdMask","getTileId","setFlippedHorizontally","setFlippedVertically","setFlippedDiagonally","EditableTileMap","constructor","tileWidth","tileHeight","dimX","dimY","tileSet","this","_tileSet","_layers","from","editableTileMapAsJsObject","tileSize","tileSetColumnCount","tileSetRowCount","Map","Array","fill","forEach","_","index","set","TileDefinition","tileMap","layers","layerAsJsObject","addTileLayer","EditableTileMapLayer","addNewTileLayer","toJSObject","map","layer","getWidth","getHeight","getTileHeight","getTileWidth","getDimensionX","getDimensionY","setDimensionX","dim","columnDelta","getLayers","increaseDimensions","reduceDimensions","columnsToAppend","columnsToUnshift","rowsToAppend","rowsToUnshift","setDimensionY","rowDelta","getTileDefinition","get","getTileDefinitions","values","id","push","getTileLayer","matchingLayer","find","addObjectLayer","EditableObjectLayer","getBackgroundResourceName","_backgroundResourceName","pointIsInsideTile","x","y","tag","indexX","Math","floor","indexY","tileLayer","undefined","hasTaggedHitBox","setBackgroundResourceName","resourceName","isEmpty","every","layerId","setTile","flipTileOnY","flip","flipTileOnX","isTileFlippedOnX","isTileFlippedOnY","removeTile","trimEmptyColumnsAndRowToFitLayer","initialRowCount","initialColumnCount","length","buildEmptyLayer","shiftedRows","shiftedColumns","poppedRows","poppedColumns","trimmingData","getTrimmingData","columnsToPop","columnsToShift","rowsToPop","rowsToShift","AbstractEditableLayer","visible","setVisible","isVisible","super","objects","add","object","TileObject","_alpha","dimensionX","dimensionY","_tiles","Int32Array","editableTileMapLayerAsJsObject","isTileIdValid","setAlpha","alpha","tiles","row","setTileGID","getAlpha","cell","slice","rowIndex","newRow","unshift","console","error","tilesRow","initialDimensionX","initialDimensionY","columnsToShiftByRow","columnsToPopByRow","isFirstNonEmptyRowFound","isFirstNonEmptyColumnFound","min","animationLength","taggedHitBoxes","stackedTiles","addHitBox","polygon","hasFullHitBox","taggedHitBox","hitbox","polygons","some","getHitBoxes","getAnimationLength","getStackTileId","stackTileId","getStackedTiles","hasStackedTiles","setStackedTiles","ResourceCache","_cachedValues","_callbacks","getOrLoad","key","load","callback","value","callbacks","delete","TileTextureCache","_levelBackgroundTextures","_textures","setTexture","texture","getTexture","getLevelBackgroundTexture","name","setLevelBackgroundTexture","decodeBase64LayerData","pako","tiledLayer","data","compression","decodedData","step1","atob","split","charCodeAt","decodeArray","arr","binData","Uint8Array","decompressedData","inflate","extractTileUidFlippedStates","globalTileUid","getTileIdFromTiledGUI","tiledGUI","TiledPixiHelper","LDtkPixiHelper","PixiTileMapHelper","LDtkTileMapLoader","TiledTileMapLoader","TileMapLoader","getLDtkTileId","tileSetId","uniqueId","getAtlasTexture","atlasTextures","tilesetCache","tilesetId","tileset","relPath","_a","baseTexture","cacheId","identifier","parseAtlas","levelIndex","atlasTexture","tiledversion","warn","tilesets","tiledSet","tilewidth","tileheight","tilecount","image","columns","spacing","margin","firstGid","firstgid","rows","expectedAtlasWidth","expectedAtlasHeight","width","height","textureCache","tileSetIndex","rect","PIXI","Rectangle","Texture","level","levels","layerInstances","defs","uid","levelTileCache","iLayer","__type","__tilesetDefUid","layerTileCache","gridSize","tileGridSize","tile","autoLayerTiles","gridTiles","t","src","bgRelPath","pxWid","pxHei","exports","kind","parseSimpleTileMapAtlas","columnCount","rowCount","updatePixiTileMap","untypedPixiTileMap","displayMode","layerIndex","pixiTileMap","clear","bgResourceName","objectLayer","xPos","yPos","tileDefinition","tileTexture","pixiTilemapFrame","tileAnimX","updatePixiCollisionMask","pixiGraphics","typeFilter","outlineSize","outlineColor","outlineOpacity","fillColor","fillOpacity","lineStyle","drawRect","hitboxes","vertices","beginFill","vertexX","vertexY","swap","moveTo","lineTo","closePath","endFill","ldtkTileMap","ldtkLevel","tileCache","has","tileDef","__gridSize","__cWid","__cHei","editableTileMap","composedTileMap","nextComposedTileId","editableTileLayer","__opacity","px","oldTileId","f","oldTileDef","hash","join","oldTileGID","tiledTileMap","definitions","tiledTileSet","animation","tileClass","type","class","objectgroup","angle","rotation","PI","cos","sin","point","tileIndex","collisionTileMap","tiledObject","gid","tileGid","tileSlotIndex","layerData","encoding","collisionTileLayer","opacity","tileUid","tileMapFileContent","TileMapManager","_tileMapCache","_textureCacheCaches","getManager","instanceHolder","tileMapCollisionMaskManager","identify","info","__header__","app","getOrLoadTileMap","loadTileMap","tileMapJsonResourceName","tileSetJsonResourceName","getOrLoadSimpleTileMap","tileMapAsJsObject","objectName","getOrLoadTextureCache","atlasImageResourceName","getOrLoadSimpleTileMapTextureCache","textureCacheLoadingCallback","clearCaches"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TileMapHelper.js","sources":["../../../SharedLibs/src/model/GID.ts","../../../SharedLibs/src/model/TileMapModel.ts","../../../SharedLibs/src/render/ResourceCache.ts","../../../SharedLibs/src/render/TileTextureCache.ts","../../../SharedLibs/src/load/tiled/TiledTileMapLoaderHelper.ts","../../../SharedLibs/src/render/tiled/TiledPixiHelper.ts","../../../SharedLibs/src/render/ldtk/LDtkPixiHelper.ts","../../../SharedLibs/src/load/ldtk/LDtkTileMapLoader.ts","../../../SharedLibs/src/load/tiled/TiledTileMapLoader.ts","../../../SharedLibs/src/load/TileMapLoader.ts","../../../SharedLibs/src/load/ldtk/LDtkTileMapLoaderHelper.ts","../../../SharedLibs/src/render/TileMapPixiHelper.ts","../../../SharedLibs/src/render/TileMapManager.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["FLIPPED_HORIZONTALLY_FLAG","FLIPPED_VERTICALLY_FLAG","FLIPPED_DIAGONALLY_FLAG","FlippingHelper","getPixiRotate","tileGID","flippedDiagonally","isFlippedDiagonally","flippedHorizontally","isFlippedHorizontally","flippedVertically","isFlippedVertically","rotate","getTileGID","tileId","tileIdMask","getTileId","setFlippedHorizontally","setFlippedVertically","setFlippedDiagonally","EditableTileMap","constructor","tileWidth","tileHeight","dimX","dimY","tileSet","this","_tileSet","_layers","from","editableTileMapAsJsObject","tileSize","tileSetColumnCount","tileSetRowCount","Map","Number","isInteger","Error","Array","fill","forEach","_","index","set","TileDefinition","tileMap","layers","layerAsJsObject","addTileLayer","EditableTileMapLayer","addNewTileLayer","toJSObject","map","layer","getWidth","getHeight","getTileHeight","getTileWidth","getDimensionX","getDimensionY","setDimensionX","dim","columnDelta","getLayers","increaseDimensions","reduceDimensions","columnsToAppend","columnsToUnshift","rowsToAppend","rowsToUnshift","setDimensionY","rowDelta","getTileDefinition","get","getTileDefinitions","values","id","push","getTileLayer","matchingLayer","find","addObjectLayer","EditableObjectLayer","getBackgroundResourceName","_backgroundResourceName","pointIsInsideTile","x","y","tag","indexX","Math","floor","indexY","tileLayer","undefined","hasTaggedHitBox","setBackgroundResourceName","resourceName","isEmpty","every","layerId","setTile","flipTileOnY","flip","flipTileOnX","isTileFlippedOnX","isTileFlippedOnY","removeTile","trimEmptyColumnsAndRowToFitLayer","initialRowCount","initialColumnCount","length","buildEmptyLayer","shiftedRows","shiftedColumns","poppedRows","poppedColumns","trimmingData","getTrimmingData","columnsToPop","columnsToShift","rowsToPop","rowsToShift","AbstractEditableLayer","visible","setVisible","isVisible","super","objects","add","object","TileObject","_alpha","dimensionX","dimensionY","_tiles","Int32Array","editableTileMapLayerAsJsObject","isTileIdValid","setAlpha","alpha","tiles","row","setTileGID","getAlpha","cell","slice","rowIndex","newRow","unshift","console","error","tilesRow","initialDimensionX","initialDimensionY","columnsToShiftByRow","columnsToPopByRow","isFirstNonEmptyRowFound","isFirstNonEmptyColumnFound","min","animationLength","taggedHitBoxes","stackedTiles","addHitBox","polygon","hasFullHitBox","taggedHitBox","hitbox","polygons","some","getHitBoxes","getAnimationLength","getStackTileId","stackTileId","getStackedTiles","hasStackedTiles","setStackedTiles","ResourceCache","_cachedValues","_callbacks","getOrLoad","key","load","callback","value","callbacks","delete","TileTextureCache","_levelBackgroundTextures","_textures","setTexture","texture","getTexture","getLevelBackgroundTexture","name","setLevelBackgroundTexture","decodeBase64LayerData","pako","tiledLayer","data","compression","decodedData","step1","atob","split","charCodeAt","decodeArray","arr","binData","Uint8Array","decompressedData","inflate","extractTileUidFlippedStates","globalTileUid","getTileIdFromTiledGUI","tiledGUI","TiledPixiHelper","LDtkPixiHelper","LDtkTileMapLoader","TiledTileMapLoader","TileMapLoader","getLDtkTileId","tileSetId","uniqueId","getAtlasTexture","atlasTextures","tilesetCache","tilesetId","tileset","relPath","_a","baseTexture","cacheId","identifier","parseAtlas","levelIndex","atlasTexture","tiledversion","warn","tilesets","tiledSet","tilewidth","tileheight","tilecount","image","columns","spacing","margin","firstGid","firstgid","rows","expectedAtlasWidth","expectedAtlasHeight","width","height","textureCache","tileSetIndex","rect","PIXI","Rectangle","Texture","level","levels","layerInstances","defs","uid","levelTileCache","iLayer","__type","__tilesetDefUid","layerTileCache","gridSize","tileGridSize","tile","autoLayerTiles","gridTiles","t","src","bgRelPath","pxWid","pxHei","exports","PixiTileMapHelper","drawCollisionLayer","pixiGraphics","typeFilter","fillColor","fillOpacity","xPos","yPos","tileDefinition","hitboxes","vertices","beginFill","vertexX","vertexY","swap","moveTo","lineTo","closePath","endFill","kind","parseSimpleTileMapAtlas","columnCount","rowCount","updatePixiTileMap","untypedPixiTileMap","displayMode","layerIndex","pixiTileMap","clear","bgResourceName","objectLayer","tileTexture","pixiTilemapFrame","tileAnimX","updatePixiCollisionMask","outlineSize","outlineColor","outlineOpacity","lineStyle","drawRect","ldtkTileMap","ldtkLevel","tileCache","has","tileDef","__gridSize","__cWid","__cHei","editableTileMap","composedTileMap","nextComposedTileId","editableTileLayer","__opacity","px","oldTileId","f","oldTileDef","hash","join","oldTileGID","tiledTileMap","definitions","tiledTileSet","animation","tileClass","type","class","objectgroup","angle","rotation","PI","cos","sin","point","tileIndex","collisionTileMap","tiledObject","gid","tileGid","tileSlotIndex","layerData","encoding","collisionTileLayer","opacity","tileUid","tileMapFileContent","TileMapManager","_tileMapCache","_textureCacheCaches","getManager","instanceHolder","tileMapCollisionMaskManager","identify","info","__header__","app","getOrLoadTileMap","loadTileMap","tileMapJsonResourceName","tileSetJsonResourceName","getOrLoadSimpleTileMap","tileMapAsJsObject","objectName","getOrLoadTextureCache","atlasImageResourceName","getOrLoadSimpleTileMapTextureCache","textureCacheLoadingCallback","clearCaches"],"mappings":"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"}
|