@codexo/exojs-tiled 0.15.2 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +59 -66
  2. package/dist/esm/TiledLayer.d.ts +2 -1
  3. package/dist/esm/TiledLayer.d.ts.map +1 -0
  4. package/dist/esm/TiledLayer.js +106 -108
  5. package/dist/esm/TiledLayer.js.map +1 -1
  6. package/dist/esm/TiledMap.d.ts +35 -7
  7. package/dist/esm/TiledMap.d.ts.map +1 -0
  8. package/dist/esm/TiledMap.js +714 -589
  9. package/dist/esm/TiledMap.js.map +1 -1
  10. package/dist/esm/TiledObject.d.ts +7 -0
  11. package/dist/esm/TiledObject.d.ts.map +1 -0
  12. package/dist/esm/TiledObject.js +59 -51
  13. package/dist/esm/TiledObject.js.map +1 -1
  14. package/dist/esm/TiledTileset.d.ts +11 -4
  15. package/dist/esm/TiledTileset.d.ts.map +1 -0
  16. package/dist/esm/TiledTileset.js +81 -70
  17. package/dist/esm/TiledTileset.js.map +1 -1
  18. package/dist/esm/data.d.ts +25 -7
  19. package/dist/esm/data.d.ts.map +1 -0
  20. package/dist/esm/decodeLayerData.d.ts +2 -1
  21. package/dist/esm/decodeLayerData.d.ts.map +1 -0
  22. package/dist/esm/decodeLayerData.js +53 -92
  23. package/dist/esm/decodeLayerData.js.map +1 -1
  24. package/dist/esm/gid.d.ts +2 -1
  25. package/dist/esm/gid.d.ts.map +1 -0
  26. package/dist/esm/gid.js +15 -24
  27. package/dist/esm/gid.js.map +1 -1
  28. package/dist/esm/index.d.ts +1 -0
  29. package/dist/esm/index.d.ts.map +1 -0
  30. package/dist/esm/index.js +14 -12
  31. package/dist/esm/loadTiledMap.d.ts +11 -5
  32. package/dist/esm/loadTiledMap.d.ts.map +1 -0
  33. package/dist/esm/loadTiledMap.js +82 -91
  34. package/dist/esm/loadTiledMap.js.map +1 -1
  35. package/dist/esm/objectAlignment.d.ts +28 -0
  36. package/dist/esm/objectAlignment.d.ts.map +1 -0
  37. package/dist/esm/objectAlignment.js +79 -0
  38. package/dist/esm/objectAlignment.js.map +1 -0
  39. package/dist/esm/public.d.ts +17 -15
  40. package/dist/esm/public.d.ts.map +1 -0
  41. package/dist/esm/public.js +14 -0
  42. package/dist/esm/tileMapType.d.ts +31 -0
  43. package/dist/esm/tileMapType.d.ts.map +1 -0
  44. package/dist/esm/tileMapType.js +42 -0
  45. package/dist/esm/tileMapType.js.map +1 -0
  46. package/dist/esm/tiledBuildInfo.d.ts +1 -0
  47. package/dist/esm/tiledBuildInfo.d.ts.map +1 -0
  48. package/dist/esm/tiledBuildInfo.js +6 -4
  49. package/dist/esm/tiledBuildInfo.js.map +1 -1
  50. package/dist/esm/tiledExtension.d.ts +7 -6
  51. package/dist/esm/tiledExtension.d.ts.map +1 -0
  52. package/dist/esm/tiledExtension.js +23 -25
  53. package/dist/esm/tiledExtension.js.map +1 -1
  54. package/dist/esm/tiledOptions.d.ts +5 -4
  55. package/dist/esm/tiledOptions.d.ts.map +1 -0
  56. package/dist/esm/tiledOptions.js +11 -13
  57. package/dist/esm/tiledOptions.js.map +1 -1
  58. package/dist/esm/tiledSourceType.d.ts +24 -0
  59. package/dist/esm/tiledSourceType.d.ts.map +1 -0
  60. package/dist/esm/tiledSourceType.js +44 -0
  61. package/dist/esm/tiledSourceType.js.map +1 -0
  62. package/dist/esm/url.d.ts +2 -1
  63. package/dist/esm/url.d.ts.map +1 -0
  64. package/dist/esm/url.js +26 -37
  65. package/dist/esm/url.js.map +1 -1
  66. package/dist/esm/validate.d.ts +11 -10
  67. package/dist/esm/validate.d.ts.map +1 -0
  68. package/dist/esm/validate.js +485 -534
  69. package/dist/esm/validate.js.map +1 -1
  70. package/dist/esm/wangSets.d.ts +5 -4
  71. package/dist/esm/wangSets.d.ts.map +1 -0
  72. package/dist/esm/wangSets.js +90 -115
  73. package/dist/esm/wangSets.js.map +1 -1
  74. package/package.json +9 -17
  75. package/dist/esm/index.js.map +0 -1
  76. package/dist/esm/register.d.ts +0 -1
  77. package/dist/esm/register.js +0 -22
  78. package/dist/esm/register.js.map +0 -1
  79. package/dist/esm/tiledMapBinding.d.ts +0 -19
  80. package/dist/esm/tiledMapBinding.js +0 -31
  81. package/dist/esm/tiledMapBinding.js.map +0 -1
  82. package/dist/esm/tiledRuntimeMapBinding.d.ts +0 -29
  83. package/dist/esm/tiledRuntimeMapBinding.js +0 -42
  84. package/dist/esm/tiledRuntimeMapBinding.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TiledMap.js","sources":["../../../src/TiledMap.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TiledMap.js","names":[],"sources":["../../src/TiledMap.ts"],"sourcesContent":["import { type Texture, TextureRegion } from '@codexo/exojs';\nimport type {\n ChunkPayload,\n ChunkSource,\n ObjectPoint,\n ResolvedTile,\n TextStyle,\n TileAnimationFrame,\n TileDefinition,\n TileMapObject,\n TileProperties,\n TilePropertyValue,\n TileTransform,\n} from '@codexo/exojs-tilemap';\nimport { ImageLayer, ObjectLayer, packTile, TileLayer, TileMap, TilePropertyKind, TileSet } from '@codexo/exojs-tilemap';\n\nimport type {\n TiledChunkData,\n TiledClassPropertyValueData,\n TiledMapData,\n TiledObjectData,\n TiledOrientation,\n TiledPropertyData,\n TiledRenderOrder,\n TiledTileData,\n} from './data';\nimport { maskTiledGid, TILED_FLIPPED_DIAGONALLY_FLAG, TILED_FLIPPED_HORIZONTALLY_FLAG, TILED_FLIPPED_VERTICALLY_FLAG } from './gid';\nimport { getTiledObjectAnchorOffset, resolveTiledObjectAlignment } from './objectAlignment';\nimport { createTiledLayer, TiledGroupLayer, TiledImageLayer, type TiledLayer, TiledObjectLayer, TiledTileLayer } from './TiledLayer';\nimport type { TiledObject } from './TiledObject';\nimport type { TiledTileset } from './TiledTileset';\nimport { resolveTiledUrl } from './url';\nimport { TiledFormatError } from './validate';\n\n/**\n * A parsed and validated Tiled map (`.tmj`).\n *\n * `TiledMap` represents the parsed Tiled source format. `TileMap` is the\n * format-independent ExoJS runtime map used for rendering, queries, and\n * mutation.\n *\n * Construction validates that {@link tilesets} cover a non-overlapping,\n * duplicate-free range of global tile ids, and that every GID referenced by\n * {@link layers} (tile layer cells, infinite-map chunks, and tile object\n * `gid`s) falls within one of those ranges. Both checks throw\n * {@link TiledFormatError} on failure.\n */\nexport class TiledMap {\n /** Resolved URL this map was loaded from. */\n public readonly source: string;\n /** The validated raw map data this instance was built from. */\n public readonly data: TiledMapData;\n\n public readonly orientation: TiledOrientation;\n public readonly renderOrder?: TiledRenderOrder | undefined;\n public readonly class: string;\n /** Map width in tiles. */\n public readonly width: number;\n /** Map height in tiles. */\n public readonly height: number;\n /** Tile grid cell width in pixels. */\n public readonly tileWidth: number;\n /** Tile grid cell height in pixels. */\n public readonly tileHeight: number;\n public readonly infinite: boolean;\n public readonly backgroundColor?: string | undefined;\n public readonly layers: readonly TiledLayer[];\n /** Tilesets used by this map, sorted by {@link TiledTileset.firstGid} ascending. */\n public readonly tilesets: readonly TiledTileset[];\n public readonly properties: readonly TiledPropertyData[];\n\n private readonly _imageTextures: ReadonlyMap<number, Texture>;\n private readonly _chunkSources = new Map<number, ChunkSource>();\n\n public constructor(source: string, data: TiledMapData, tilesets: readonly TiledTileset[], imageTextures: ReadonlyMap<number, Texture> = new Map()) {\n this.source = source;\n this.data = data;\n this.orientation = data.orientation;\n this.renderOrder = data.renderorder;\n this.class = data.class ?? '';\n this.width = data.width;\n this.height = data.height;\n this.tileWidth = data.tilewidth;\n this.tileHeight = data.tileheight;\n this.infinite = data.infinite;\n this.backgroundColor = data.backgroundcolor;\n this.properties = data.properties ?? [];\n this._imageTextures = imageTextures;\n this.layers = data.layers.map(createTiledLayer);\n this.tilesets = sortAndValidateTilesetRanges(tilesets, source);\n\n checkGidCoverage(this, source);\n }\n\n /**\n * Returns the tileset that owns `gid`, or `undefined` if `gid` is `0`\n * (the empty-cell sentinel) or is not covered by any tileset.\n *\n * Flip/rotation flag bits are masked off before the range lookup, so the\n * raw GID values found in {@link TiledTileLayer.data}/`chunks` and\n * {@link TiledObject.gid} can be passed directly.\n */\n public findTilesetForGid(gid: number): TiledTileset | undefined {\n const id = maskTiledGid(gid);\n\n if (id === 0) {\n return undefined;\n }\n\n for (const tileset of this.tilesets) {\n if (id >= tileset.firstGid && id <= tileset.lastGid) {\n return tileset;\n }\n }\n\n return undefined;\n }\n\n /** Looks up a custom property by name. */\n public getProperty(name: string): TiledPropertyData | undefined {\n return this.properties.find(property => property.name === name);\n }\n\n /**\n * Convert this parsed Tiled source model into a format-independent runtime\n * {@link TileMap} from `@codexo/exojs-tilemap`.\n *\n * Only orthogonal maps with atlas tilesets are supported. A non-orthogonal\n * map, a collection-of-images tileset, or a tileset with no image at all\n * throws {@link TiledFormatError} rather than silently producing wrong\n * (misplaced) or empty geometry. Tile\n * layers become renderable `TileLayer`s, object groups become data-only\n * `ObjectLayer`s, and image layers become data-only `ImageLayer`s; group\n * layer children are flattened in document order.\n *\n * The runtime map has no group node, so each group's own style is baked into\n * its children as Tiled composes it: `visible` ANDs, `opacity` and the\n * parallax factors multiply, the offsets add, and tint colours multiply per\n * colour channel. Object layers take the visibility, opacity and offset the\n * same way - `ObjectLayer` carries no parallax or tint of its own, so a\n * group's contribution to those two is dropped for object layers only.\n *\n * An `infinite: true` (chunked) tile layer converts to an **unbounded**\n * runtime `TileLayer` with no tiles populated eagerly - its data streams in\n * on demand via the {@link ChunkSource} built for it, retrievable with\n * {@link getChunkSource} after this call returns.\n *\n * The returned `TileMap` does **not** own the tileset textures - they remain\n * in the Loader cache. Destroying the returned map does not unload textures.\n */\n public toTileMap(): TileMap {\n this._chunkSources.clear();\n\n // Orthogonal-only in this release. Reject maps we cannot convert\n // faithfully rather than silently producing misplaced (isometric/\n // staggered/hexagonal) geometry.\n if (this.orientation !== 'orthogonal') {\n throw new TiledFormatError(this.source, 'orientation', `toTileMap() supports only orthogonal maps in this release, got \"${this.orientation}\"`);\n }\n\n // Build runtime tilesets. Every tileset must resolve to an atlas texture:\n // a collection-of-images tileset is not supported yet, and a tileset with\n // no image at all is unusable. Both throw TiledFormatError rather than\n // dropping the tileset - a skipped tileset makes every cell and tile object\n // that references it disappear from the runtime map without a diagnostic.\n const runtimeTilesets: TileSet[] = [];\n // indexToRuntime[i] = runtime TileSet for tilesets[i], or null for a hole in\n // the (caller-supplied) tilesets array.\n const indexToRuntime: Array<TileSet | null> = [];\n for (let i = 0; i < this.tilesets.length; i++) {\n const tiledTs = this.tilesets[i];\n if (!tiledTs) {\n indexToRuntime.push(null);\n continue;\n }\n if (!tiledTs.texture) {\n if (tiledTs.tileTextures.size > 0) {\n throw new TiledFormatError(\n this.source,\n `tilesets/${tiledTs.name}`,\n `tileset \"${tiledTs.name}\" is a collection-of-images tileset; ` + `toTileMap() requires atlas tilesets in this release`,\n );\n }\n throw new TiledFormatError(\n this.source,\n `tilesets/${tiledTs.name}`,\n `tileset \"${tiledTs.name}\" has no image; an atlas tileset needs an ` + `\"image\" that resolves to a loaded texture`,\n );\n }\n const tw = tiledTs.imageWidth ?? tiledTs.texture.width;\n const th = tiledTs.imageHeight ?? tiledTs.texture.height;\n const region = new TextureRegion(tiledTs.texture, { x: 0, y: 0, width: tw, height: th });\n const rts = new TileSet({\n name: tiledTs.name,\n texture: region,\n tileWidth: tiledTs.tileWidth,\n tileHeight: tiledTs.tileHeight,\n tileCount: tiledTs.tileCount,\n columns: tiledTs.columns,\n spacing: tiledTs.spacing,\n margin: tiledTs.margin,\n class: tiledTs.class,\n offsetX: tiledTs.tileOffset.x,\n offsetY: tiledTs.tileOffset.y,\n });\n // Carry per-tile metadata (properties + animation frames) into the runtime\n // tileset. Without this, Tiled tile animations and per-tile properties are\n // lost at conversion. Out-of-range entries are skipped defensively.\n const defs = buildTileDefinitions(tiledTs.tiles, tiledTs.tileCount);\n if (defs.length > 0) {\n rts._setDefinitions(defs);\n }\n runtimeTilesets.push(rts);\n indexToRuntime.push(rts);\n }\n\n // Collect and convert tile + object + image layers, flattening group layers.\n // `order` records each converted renderable (tile or image) layer's id in\n // document (flattened, walk) order - object layers are excluded, matching\n // TileMap.documentOrder's contract.\n //\n // The runtime map has no group node, so each enclosing group's own style has\n // to be folded into its children as they are converted (`group`), or it would\n // simply be dropped: a hidden group would render, a half-transparent one\n // would render opaque, and an offset/parallax/tint group would place and\n // shade its children as if it were at the identity.\n const runtimeLayers: TileLayer[] = [];\n const runtimeObjectLayers: ObjectLayer[] = [];\n const runtimeImageLayers: ImageLayer[] = [];\n const order: number[] = [];\n const convertLayers = (layers: readonly TiledLayer[], group: TiledGroupStyle): void => {\n for (const layer of layers) {\n if (layer instanceof TiledGroupLayer) {\n convertLayers(layer.layers, composeGroupStyle(group, layer));\n } else if (layer instanceof TiledTileLayer) {\n const chunked = layer.chunks !== undefined;\n const rLayer = new TileLayer({\n id: layer.id,\n name: layer.name,\n ...(chunked ? {} : { width: layer.width, height: layer.height }),\n tilesets: runtimeTilesets,\n tileWidth: this.tileWidth,\n tileHeight: this.tileHeight,\n visible: group.visible && layer.visible,\n opacity: group.opacity * layer.opacity,\n offsetX: group.offsetX + layer.offsetX,\n offsetY: group.offsetY + layer.offsetY,\n parallaxX: group.parallaxX * layer.parallaxX,\n parallaxY: group.parallaxY * layer.parallaxY,\n class: layer.class,\n tintColor: multiplyTiledTint(group.tintColor, parseTiledColor(layer.tintColor)),\n });\n if (layer.data) {\n populateTileLayer(rLayer, layer.data, this.tilesets, indexToRuntime, layer.width);\n } else if (chunked) {\n this._chunkSources.set(layer.id, buildTiledChunkSource(layer, rLayer, this.tilesets, indexToRuntime, this.source));\n }\n runtimeLayers.push(rLayer);\n order.push(layer.id);\n } else if (layer instanceof TiledObjectLayer) {\n runtimeObjectLayers.push(convertObjectLayer(layer, this.tilesets, indexToRuntime, this.orientation, group));\n } else if (layer instanceof TiledImageLayer) {\n runtimeImageLayers.push(\n new ImageLayer({\n id: layer.id,\n name: layer.name,\n class: layer.class,\n image: resolveTiledUrl(layer.image, this.source),\n texture: this._imageTextures.get(layer.id) ?? null,\n visible: group.visible && layer.visible,\n opacity: group.opacity * layer.opacity,\n offsetX: group.offsetX + layer.offsetX,\n offsetY: group.offsetY + layer.offsetY,\n parallaxX: group.parallaxX * layer.parallaxX,\n parallaxY: group.parallaxY * layer.parallaxY,\n tintColor: multiplyTiledTint(group.tintColor, parseTiledColor(layer.tintColor)),\n repeatX: layer.repeatX,\n repeatY: layer.repeatY,\n properties: convertProperties(layer.properties),\n }),\n );\n order.push(layer.id);\n }\n }\n };\n convertLayers(this.layers, rootGroupStyle);\n\n return new TileMap({\n name: this.source,\n // Tiled always reports width/height as 0 at the map level for an\n // infinite map (its extent is unbounded/streamed); omit both rather\n // than passing 0, which TileMap's constructor rejects.\n ...(this.infinite ? {} : { width: this.width, height: this.height }),\n tileWidth: this.tileWidth,\n tileHeight: this.tileHeight,\n tilesets: runtimeTilesets,\n layers: runtimeLayers,\n objectLayers: runtimeObjectLayers,\n imageLayers: runtimeImageLayers,\n class: this.class,\n backgroundColor: parseTiledColor(this.backgroundColor),\n renderOrder: this.renderOrder ?? 'right-down',\n properties: convertProperties(this.properties),\n documentOrder: order,\n });\n }\n\n /**\n * The {@link ChunkSource} built for the chunked tile layer with the given\n * Tiled layer `id`, as a side effect of the most recent {@link toTileMap}\n * call. Returns `undefined` if `toTileMap()` hasn't been called yet, if\n * `layerId` doesn't name a tile layer, or if that layer is finite\n * (`data`-based) rather than chunked (`infinite`-map `chunks`-based).\n *\n * Call {@link toTileMap} before calling this - it is what builds the\n * providers this method reads from.\n * @advanced\n */\n public getChunkSource(layerId: number): ChunkSource | undefined {\n return this._chunkSources.get(layerId);\n }\n\n /**\n * Releases this map's reference to its parsed source. Tileset textures are\n * Loader-owned and may be shared with other maps; this does NOT destroy\n * them.\n */\n public destroy(): void {\n // Intentionally empty: all sub-resources (textures) are Loader-owned.\n }\n}\n\n/**\n * Index of the tileset owning `baseGid` (flip flags already masked off), or\n * `-1` when none covers it: the rightmost entry with `firstGid <= baseGid`,\n * relying on `tilesets` being sorted ascending.\n */\nconst findTilesetIndexForGid = (baseGid: number, tiledTilesets: readonly TiledTileset[]): number => {\n for (let t = tiledTilesets.length - 1; t >= 0; t--) {\n const candidate = tiledTilesets[t];\n if (candidate && baseGid >= candidate.firstGid) return t;\n }\n\n return -1;\n};\n\n/**\n * Resolve a raw (flag-bearing) Tiled GID to a runtime {@link ResolvedTile}, or\n * `null` for an empty cell or a GID no tileset covers.\n */\nconst resolveGid = (rawGid: number, tiledTilesets: readonly TiledTileset[], indexToRuntime: ReadonlyArray<TileSet | null>): ResolvedTile | null => {\n if (rawGid === 0) return null;\n const baseGid = maskTiledGid(rawGid);\n const transform: TileTransform = {\n flipX: ((rawGid >>> 0) & TILED_FLIPPED_HORIZONTALLY_FLAG) !== 0,\n flipY: ((rawGid >>> 0) & TILED_FLIPPED_VERTICALLY_FLAG) !== 0,\n diagonal: ((rawGid >>> 0) & TILED_FLIPPED_DIAGONALLY_FLAG) !== 0,\n };\n const tsIdx = findTilesetIndexForGid(baseGid, tiledTilesets);\n if (tsIdx === -1) return null;\n const owningTs = tiledTilesets[tsIdx];\n const runtimeTs = indexToRuntime[tsIdx];\n if (!owningTs || !runtimeTs) return null; // hole in the tilesets array\n return {\n tileset: runtimeTs,\n localTileId: baseGid - owningTs.firstGid,\n transform,\n };\n};\n\n/**\n * Fill a `TileLayer` from a flat GID array decoded from a Tiled tile layer.\n *\n * @param width The source Tiled layer's width in tiles - `toTileMap()` always\n * constructs `layer` as bounded with this same width, but that\n * fact isn't visible to the type checker from `layer` alone\n * (runtime `TileLayer.width` is `number | undefined` since it\n * also supports unbounded layers), so the caller's already-known\n * Tiled-source width is threaded through explicitly instead.\n */\nconst populateTileLayer = (\n layer: TileLayer,\n gids: readonly number[],\n tiledTilesets: readonly TiledTileset[],\n indexToRuntime: ReadonlyArray<TileSet | null>,\n width: number,\n): void => {\n for (let i = 0; i < gids.length; i++) {\n const gid = gids[i];\n if (gid === undefined) continue;\n const tile = resolveGid(gid, tiledTilesets, indexToRuntime);\n if (!tile) continue;\n layer.setTileAt(i % width, Math.floor(i / width), tile);\n }\n};\n\n/**\n * Build a {@link ChunkSource} that lazily re-slices a chunked\n * {@link TiledTileLayer}'s fixed-size on-disk chunks into `runtimeLayer`'s\n * own chunk grid. Indexes `layer.chunks` once by on-disk coordinate;\n * `getChunk` composes each request from the on-disk chunks it overlaps.\n *\n * @throws {TiledFormatError} if the layer's on-disk chunks don't all share\n * the same width/height (Tiled always emits a uniform size in\n * practice; this is a defensive guard against malformed input).\n * @throws {TiledFormatError} if an on-disk chunk's `x`/`y` isn't aligned to\n * the on-disk chunk grid (Tiled always emits aligned chunks; a\n * misaligned chunk would otherwise silently corrupt the re-sliced\n * tile indices instead of failing loudly).\n */\nconst buildTiledChunkSource = (\n layer: TiledTileLayer,\n runtimeLayer: TileLayer,\n tiledTilesets: readonly TiledTileset[],\n indexToRuntime: ReadonlyArray<TileSet | null>,\n source: string,\n): ChunkSource => {\n const index = new Map<string, TiledChunkData>();\n let onDiskWidth = 0;\n let onDiskHeight = 0;\n for (const chunk of layer.chunks ?? []) {\n if (onDiskWidth === 0) {\n onDiskWidth = chunk.width;\n onDiskHeight = chunk.height;\n } else if (chunk.width !== onDiskWidth || chunk.height !== onDiskHeight) {\n throw new TiledFormatError(\n source,\n `layers/${layer.name}/chunks`,\n `non-uniform infinite-map chunk size is not supported (expected ${onDiskWidth}x${onDiskHeight}, got ${chunk.width}x${chunk.height})`,\n );\n }\n if (chunk.x % onDiskWidth !== 0 || chunk.y % onDiskHeight !== 0) {\n throw new TiledFormatError(\n source,\n `layers/${layer.name}/chunks`,\n `misaligned infinite-map chunk in layer ${layer.id} at (${chunk.x}, ${chunk.y}) is not a multiple of the on-disk chunk size (${onDiskWidth}x${onDiskHeight})`,\n );\n }\n index.set(`${chunk.x},${chunk.y}`, chunk);\n }\n\n return {\n getChunk(cx: number, cy: number): ChunkPayload | null {\n if (onDiskWidth === 0) return null; // layer had no chunks at all\n\n const chunkWidth = runtimeLayer.chunkWidth;\n const chunkHeight = runtimeLayer.chunkHeight;\n const qx0 = cx * chunkWidth;\n const qy0 = cy * chunkHeight;\n const qx1 = qx0 + chunkWidth - 1;\n const qy1 = qy0 + chunkHeight - 1;\n\n // Tiled always aligns chunk coordinates to the on-disk chunk size, so\n // floor-dividing the query rect's corners by that size and stepping by\n // it visits exactly the on-disk grid cells the query can overlap.\n const gx0 = Math.floor(qx0 / onDiskWidth) * onDiskWidth;\n const gx1 = Math.floor(qx1 / onDiskWidth) * onDiskWidth;\n const gy0 = Math.floor(qy0 / onDiskHeight) * onDiskHeight;\n const gy1 = Math.floor(qy1 / onDiskHeight) * onDiskHeight;\n\n let out: Uint32Array | null = null;\n for (let gy = gy0; gy <= gy1; gy += onDiskHeight) {\n for (let gx = gx0; gx <= gx1; gx += onDiskWidth) {\n const chunk = index.get(`${gx},${gy}`);\n if (!chunk) continue;\n\n const ix0 = Math.max(qx0, gx);\n const ix1 = Math.min(qx1, gx + onDiskWidth - 1);\n const iy0 = Math.max(qy0, gy);\n const iy1 = Math.min(qy1, gy + onDiskHeight - 1);\n\n for (let ty = iy0; ty <= iy1; ty++) {\n for (let tx = ix0; tx <= ix1; tx++) {\n const rawGid = chunk.data[(ty - gy) * onDiskWidth + (tx - gx)];\n if (rawGid === undefined || rawGid === 0) continue; // sparse hole, or empty cell\n\n const resolved = resolveGid(rawGid, tiledTilesets, indexToRuntime);\n if (!resolved) continue; // empty cell, or a GID no tileset covers\n\n out ??= new Uint32Array(chunkWidth * chunkHeight);\n const tilesetIndex = runtimeLayer.tilesets.indexOf(resolved.tileset);\n out[(ty - qy0) * chunkWidth + (tx - qx0)] = packTile(tilesetIndex, resolved.localTileId, resolved.transform);\n }\n }\n }\n }\n\n return out === null ? null : { width: chunkWidth, height: chunkHeight, tiles: out };\n },\n };\n};\n\n/** Convert a parsed `TiledObjectLayer` into a runtime data-only `ObjectLayer`. */\nconst convertObjectLayer = (\n layer: TiledObjectLayer,\n tiledTilesets: readonly TiledTileset[],\n indexToRuntime: ReadonlyArray<TileSet | null>,\n orientation: TiledOrientation,\n group: TiledGroupStyle,\n): ObjectLayer => {\n const objects: TileMapObject[] = [];\n for (const object of layer.objects) {\n const converted = convertObject(object, tiledTilesets, indexToRuntime, orientation);\n if (converted) objects.push(converted);\n }\n return new ObjectLayer({\n id: layer.id,\n name: layer.name,\n class: layer.class,\n visible: group.visible && layer.visible,\n opacity: group.opacity * layer.opacity,\n offsetX: group.offsetX + layer.offsetX,\n offsetY: group.offsetY + layer.offsetY,\n parallaxX: group.parallaxX * layer.parallaxX,\n parallaxY: group.parallaxY * layer.parallaxY,\n tintColor: multiplyTiledTint(group.tintColor, parseTiledColor(layer.tintColor)),\n drawOrder: layer.drawOrder,\n objects,\n properties: convertProperties(layer.properties),\n });\n};\n\n/**\n * Convert one `TiledObject` to a `TileMapObject`. A tile object whose GID\n * resolves to no tileset is dropped - returns `null`.\n *\n * Tiled stores a **tile object**'s `x`/`y` at the tileset's object-alignment\n * anchor (bottom-left by default in an orthogonal map, bottom-centre in an\n * isometric one), while every other object kind stores the top-left corner of\n * its bounding box. The anchor is converted to the corner here so that\n * `TileMapObject.x`/`y` means the same thing for every kind - see\n * {@link import('@codexo/exojs-tilemap').TileObject} for the resulting\n * convention.\n */\nconst convertObject = (\n object: TiledObject,\n tiledTilesets: readonly TiledTileset[],\n indexToRuntime: ReadonlyArray<TileSet | null>,\n orientation: TiledOrientation,\n): TileMapObject | null => {\n const base = {\n id: object.id,\n name: object.name,\n type: object.type,\n x: object.x,\n y: object.y,\n width: object.width,\n height: object.height,\n rotation: object.rotation,\n visible: object.visible,\n properties: convertProperties(object.properties),\n source: object,\n };\n\n if (object.text) {\n const t = object.text;\n const color = t.color !== undefined ? parseTiledColor(t.color) : undefined;\n const textStyle: TextStyle = {\n text: t.text,\n ...(color !== undefined && { color }),\n ...(t.fontfamily !== undefined && { fontFamily: t.fontfamily }),\n ...(t.pixelsize !== undefined && { pixelSize: t.pixelsize }),\n ...(t.bold !== undefined && { bold: t.bold }),\n ...(t.italic !== undefined && { italic: t.italic }),\n ...(t.underline !== undefined && { underline: t.underline }),\n ...(t.strikeout !== undefined && { strikeout: t.strikeout }),\n ...(t.wrap !== undefined && { wrap: t.wrap }),\n ...(t.halign !== undefined && { halign: t.halign }),\n ...(t.valign !== undefined && { valign: t.valign }),\n };\n return { ...base, kind: 'text', text: textStyle };\n }\n\n if (object.gid !== undefined) {\n const tile = resolveGid(object.gid, tiledTilesets, indexToRuntime);\n if (!tile) return null;\n const anchor = tileObjectAnchorOffset(object.gid, object.width, object.height, tiledTilesets, orientation);\n return { ...base, x: base.x - anchor.x, y: base.y - anchor.y, kind: 'tile', tile };\n }\n if (object.point) {\n return { ...base, kind: 'point' };\n }\n if (object.ellipse) {\n return { ...base, kind: 'ellipse' };\n }\n if (object.polygon) {\n return { ...base, kind: 'polygon', points: toPoints(object.polygon) };\n }\n if (object.polyline) {\n return { ...base, kind: 'polyline', points: toPoints(object.polyline) };\n }\n return { ...base, kind: 'rectangle' };\n};\n\nconst toPoints = (points: ReadonlyArray<{ x: number; y: number }>): ObjectPoint[] => points.map(p => ({ x: p.x, y: p.y }));\n\n/** Shared zero offset for a tile object whose GID belongs to no tileset. */\nconst ORIGIN_OFFSET = { x: 0, y: 0 } as const;\n\n/**\n * Offset from a tile object's stored anchor to the top-left corner of its\n * bounding box, using the owning tileset's `objectalignment` (or Tiled's\n * orientation-dependent default). Falls back to no offset when `gid` belongs\n * to no tileset - such an object is dropped by the caller anyway.\n */\nconst tileObjectAnchorOffset = (\n gid: number,\n width: number,\n height: number,\n tiledTilesets: readonly TiledTileset[],\n orientation: TiledOrientation,\n): { readonly x: number; readonly y: number } => {\n const owningTs = tiledTilesets[findTilesetIndexForGid(maskTiledGid(gid), tiledTilesets)];\n if (!owningTs) return ORIGIN_OFFSET;\n\n const alignment = resolveTiledObjectAlignment(owningTs.objectAlignment, orientation);\n\n return getTiledObjectAnchorOffset(alignment, width, height);\n};\n\n/**\n * The accumulated style of the Tiled group layers enclosing a layer. The runtime\n * map is flat, so this is what a group contributes to each of its descendants.\n */\ninterface TiledGroupStyle {\n readonly visible: boolean;\n readonly opacity: number;\n readonly offsetX: number;\n readonly offsetY: number;\n readonly parallaxX: number;\n readonly parallaxY: number;\n readonly tintColor: number | null;\n}\n\n/** The identity style: what a layer at the top level of the document inherits. */\nconst rootGroupStyle: TiledGroupStyle = {\n visible: true,\n opacity: 1,\n offsetX: 0,\n offsetY: 0,\n parallaxX: 1,\n parallaxY: 1,\n tintColor: null,\n};\n\n/**\n * Fold `group`'s own style into the style its children inherit, composing each\n * channel the way Tiled derives a nested layer's effective value: visibility\n * ANDs, opacity and parallax multiply, offsets add, and tints multiply per\n * colour channel.\n */\nconst composeGroupStyle = (parent: TiledGroupStyle, group: TiledGroupLayer): TiledGroupStyle => ({\n visible: parent.visible && group.visible,\n opacity: parent.opacity * group.opacity,\n offsetX: parent.offsetX + group.offsetX,\n offsetY: parent.offsetY + group.offsetY,\n parallaxX: parent.parallaxX * group.parallaxX,\n parallaxY: parent.parallaxY * group.parallaxY,\n tintColor: multiplyTiledTint(parent.tintColor, parseTiledColor(group.tintColor)),\n});\n\n/**\n * Multiply two `0xRRGGBB` tints channel-wise (Tiled's own composition rule).\n * `null` means \"no tint\" and acts as the identity, so an untinted group leaves\n * its children's tints untouched - and vice versa.\n */\nconst multiplyTiledTint = (a: number | null, b: number | null): number | null => {\n if (a === null) return b;\n if (b === null) return a;\n\n const red = Math.round((((a >> 16) & 0xff) * ((b >> 16) & 0xff)) / 255);\n const green = Math.round((((a >> 8) & 0xff) * ((b >> 8) & 0xff)) / 255);\n const blue = Math.round(((a & 0xff) * (b & 0xff)) / 255);\n\n return (red << 16) | (green << 8) | blue;\n};\n\n/**\n * Parse a Tiled colour string (`#RRGGBB` or `#AARRGGBB`) into a `0xRRGGBB`\n * integer, dropping any alpha. Returns `null` for an absent or malformed value.\n */\nconst parseTiledColor = (value: string | undefined): number | null => {\n if (value === undefined || value === '') return null;\n const hex = value.startsWith('#') ? value.slice(1) : value;\n let rrggbb: string;\n if (hex.length === 8) {\n rrggbb = hex.slice(2); // drop leading alpha\n } else if (hex.length === 6) {\n rrggbb = hex;\n } else {\n return null;\n }\n const parsed = Number.parseInt(rrggbb, 16);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\n/**\n * Build runtime {@link TileDefinition}s from a Tiled tileset's per-tile data,\n * carrying over per-tile properties, animation frames, and collision shapes\n * (the tile's `objectgroup`). Tiles whose `id` is out of range, and animation\n * frames referencing out-of-range local ids, are skipped so the runtime tileset\n * never receives malformed definitions.\n */\nconst buildTileDefinitions = (tiles: readonly TiledTileData[], tileCount: number): TileDefinition[] => {\n const defs: TileDefinition[] = [];\n for (const tile of tiles) {\n if (tile.id < 0 || tile.id >= tileCount) continue;\n\n const properties = tile.properties ? convertProperties(tile.properties) : undefined;\n const hasProps = properties !== undefined && Object.keys(properties).length > 0;\n\n let animation: readonly TileAnimationFrame[] | undefined;\n if (tile.animation && tile.animation.length > 0) {\n const frames = tile.animation\n .filter(frame => frame.tileid >= 0 && frame.tileid < tileCount)\n .map(frame => ({ localTileId: frame.tileid, duration: frame.duration }));\n if (frames.length > 0) animation = frames;\n }\n\n let collision: readonly TileMapObject[] | undefined;\n if (tile.objectgroup && tile.objectgroup.objects.length > 0) {\n const shapes = tile.objectgroup.objects.map(obj => convertCollisionObject(obj)).filter((obj): obj is TileMapObject => obj !== null);\n if (shapes.length > 0) collision = shapes;\n }\n\n if (!hasProps && animation === undefined && collision === undefined) continue;\n\n defs.push({\n localTileId: tile.id,\n ...(hasProps && { properties }),\n ...(animation !== undefined && { animation }),\n ...(collision !== undefined && { collision }),\n });\n }\n return defs;\n};\n\n/**\n * Convert a raw `TiledObjectData` to a runtime `TileMapObject` for use as a\n * per-tile collision shape. Text objects and tile-object (gid) references are\n * dropped - returns `null`. Does not perform GID resolution; collision shapes\n * in tile objectgroups are almost exclusively plain geometry.\n */\nconst convertCollisionObject = (obj: TiledObjectData): TileMapObject | null => {\n if (obj.text) return null; // text not representable as a collision shape\n if (obj.gid !== undefined) return null; // tile objects require GID resolution not available here\n\n const base = {\n id: obj.id,\n name: obj.name,\n type: obj.type,\n x: obj.x,\n y: obj.y,\n width: obj.width,\n height: obj.height,\n rotation: obj.rotation,\n visible: obj.visible,\n properties: convertProperties(obj.properties ?? []),\n };\n\n if (obj.point === true) return { ...base, kind: 'point' };\n if (obj.ellipse === true) return { ...base, kind: 'ellipse' };\n if (obj.polygon) return { ...base, kind: 'polygon', points: toPoints(obj.polygon) };\n if (obj.polyline) return { ...base, kind: 'polyline', points: toPoints(obj.polyline) };\n return { ...base, kind: 'rectangle' };\n};\n\n/**\n * Project Tiled custom properties to the generic flat property bag.\n * `object`-typed properties become a {@link TilePropertyKind.ObjectRef}\n * (the wire value is already the referenced object's numeric id - Tiled has\n * no LDtk-style navigation fields, so those stay `undefined`). `class`-typed\n * properties recursively convert their nested member bag into a\n * {@link TileProperties}.\n */\nconst convertProperties = (properties: readonly TiledPropertyData[]): TileProperties => {\n if (properties.length === 0) return Object.freeze({});\n const out: Record<string, TilePropertyValue> = {};\n for (const property of properties) {\n const value = convertPropertyValue(property);\n if (value !== undefined) {\n out[property.name] = value;\n }\n }\n return Object.freeze(out);\n};\n\n/** Convert one {@link TiledPropertyData} to its canonical {@link TilePropertyValue}. */\nconst convertPropertyValue = (property: TiledPropertyData): TilePropertyValue | undefined => {\n switch (property.type) {\n case 'string':\n case 'int':\n case 'float':\n case 'bool':\n case 'color':\n case 'file':\n return property.value;\n\n case 'object':\n return { kind: TilePropertyKind.ObjectRef, id: property.value as number };\n\n case 'class':\n return convertClassPropertyValue(property.value as TiledClassPropertyValueData, property.propertytype);\n\n default: {\n // Exhaustiveness check: if a new TiledPropertyType is ever added,\n // `property.type` will fail to narrow to `never` here and tsc will error.\n const _exhaustive: never = property.type;\n void _exhaustive;\n throw new Error(`convertProperties: unrecognised Tiled property type \"${property.type as string}\".`);\n }\n }\n};\n\n/**\n * Reserved key under which a `class`-typed property's Tiled custom-class name\n * ({@link TiledPropertyData.propertytype}, e.g. `\"Stats\"`) is stored inside the\n * converted nested {@link TileProperties} bag, mirroring the `ldtkUid`/\n * `ldtkWorldIid`-style reserved-metadata-key convention used by the LDtk\n * adapter (`packages/exojs-ldtk/src/ldtkToTileMap.ts`). Only set on the\n * top-level converted bag for a class-typed property that has a\n * `propertytype` - nested-class members carry no `propertytype` of their own\n * in Tiled's data model, so recursive calls never set it.\n */\nconst tiledClassNameProperty = 'tiledClassName';\n\n/**\n * Recursively convert a `class`-typed property's nested member bag into a\n * {@link TileProperties}. Scalar members pass through; nested-class members\n * recurse (Tiled classes may nest arbitrarily deep). When `propertytype` is\n * given (the Tiled custom-class name), it is tagged onto the bag under the\n * reserved {@link tiledClassNameProperty} key, applied last so it can never\n * be clobbered by a same-named member.\n */\nconst convertClassPropertyValue = (value: TiledClassPropertyValueData, propertytype?: string): TileProperties => {\n const out: Record<string, TilePropertyValue> = {};\n for (const [name, member] of Object.entries(value)) {\n out[name] = typeof member === 'string' || typeof member === 'number' || typeof member === 'boolean' ? member : convertClassPropertyValue(member);\n }\n if (propertytype !== undefined) {\n out[tiledClassNameProperty] = propertytype;\n }\n return Object.freeze(out);\n};\n\nconst sortAndValidateTilesetRanges = (tilesets: readonly TiledTileset[], source: string): readonly TiledTileset[] => {\n const sorted = [...tilesets].sort((a, b) => a.firstGid - b.firstGid);\n\n for (let i = 1; i < sorted.length; i++) {\n const previous = sorted[i - 1];\n const current = sorted[i];\n if (previous === undefined || current === undefined) continue;\n\n if (current.firstGid === previous.firstGid) {\n throw new TiledFormatError(source, 'tilesets', `duplicate firstgid ${current.firstGid} (tilesets \"${previous.name}\" and \"${current.name}\")`);\n }\n\n if (current.firstGid <= previous.lastGid) {\n throw new TiledFormatError(\n source,\n 'tilesets',\n `tileset \"${current.name}\" (firstgid ${current.firstGid}) overlaps tileset \"${previous.name}\" (firstgid ${previous.firstGid}, last gid ${previous.lastGid})`,\n );\n }\n }\n\n return sorted;\n};\n\nconst walkLayers = (layers: readonly TiledLayer[], path: string, visit: (layer: TiledLayer, layerPath: string) => void): void => {\n for (let i = 0; i < layers.length; i++) {\n const layer = layers[i];\n if (layer === undefined) continue;\n const layerPath = `${path}[${i}]`;\n\n visit(layer, layerPath);\n\n if (layer instanceof TiledGroupLayer) {\n walkLayers(layer.layers, `${layerPath}.layers`, visit);\n }\n }\n};\n\nconst checkGidArray = (gids: readonly number[], map: TiledMap, source: string, path: string): void => {\n for (let i = 0; i < gids.length; i++) {\n const gid = gids[i];\n if (gid === undefined) continue;\n\n if (gid !== 0 && map.findTilesetForGid(gid) === undefined) {\n throw new TiledFormatError(source, `${path}[${i}]`, `gid ${gid} (masked: ${maskTiledGid(gid)}) is not covered by any tileset`);\n }\n }\n};\n\nconst checkGidCoverage = (map: TiledMap, source: string): void => {\n walkLayers(map.layers, 'layers', (layer, layerPath) => {\n if (layer instanceof TiledTileLayer) {\n if (layer.data !== undefined) {\n checkGidArray(layer.data, map, source, `${layerPath}.data`);\n }\n\n if (layer.chunks !== undefined) {\n for (let c = 0; c < layer.chunks.length; c++) {\n const chunk = layer.chunks[c];\n if (chunk === undefined) continue;\n checkGidArray(chunk.data, map, source, `${layerPath}.chunks[${c}].data`);\n }\n }\n } else if (layer instanceof TiledObjectLayer) {\n for (let o = 0; o < layer.objects.length; o++) {\n const object = layer.objects[o];\n if (object === undefined) continue;\n const gid = object.gid;\n\n // gid 0 (after masking the flip bits) is the empty-cell sentinel, the\n // same as in tile-layer data - accept it as \"no tile\" instead of\n // rejecting it as uncovered.\n if (gid !== undefined && maskTiledGid(gid) !== 0 && map.findTilesetForGid(gid) === undefined) {\n throw new TiledFormatError(source, `${layerPath}.objects[${o}].gid`, `gid ${gid} (masked: ${maskTiledGid(gid)}) is not covered by any tileset`);\n }\n }\n }\n });\n};\n"],"mappings":"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"}
@@ -11,6 +11,12 @@ import type { TiledObjectData, TiledPointData, TiledPropertyData, TiledTextData
11
11
  export declare class TiledObject {
12
12
  readonly id: number;
13
13
  readonly name: string;
14
+ /**
15
+ * The object's class, normalised across Tiled versions: 1.9 wrote it as
16
+ * `class`, every other version as `type`. A file carries one of the two, so
17
+ * `class` wins when present and non-empty and `type` is used otherwise.
18
+ * Empty when the object has no class.
19
+ */
14
20
  readonly type: string;
15
21
  readonly x: number;
16
22
  readonly y: number;
@@ -30,3 +36,4 @@ export declare class TiledObject {
30
36
  /** Looks up a custom property by name. */
31
37
  getProperty(name: string): TiledPropertyData | undefined;
32
38
  }
39
+ //# sourceMappingURL=TiledObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TiledObject.d.ts","sourceRoot":"","sources":["../../src/TiledObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEhG;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAC;IAChE,SAAgB,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAC;IACjE,SAAgB,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjD,SAAgB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,SAAgB,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;gBAEtC,IAAI,EAAE,eAAe;IAoBxC,0CAA0C;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAGhE"}
@@ -1,54 +1,62 @@
1
+ //#region src/TiledObject.ts
1
2
  /**
2
- * A parsed Tiled object, placed in an {@link TiledObjectLayer} or a tile's
3
- * collision `objectgroup`.
4
- *
5
- * The shape of the object is determined by which of {@link point},
6
- * {@link ellipse}, {@link polygon}, {@link polyline}, {@link text}, or
7
- * {@link gid} is set; if none are set, the object is a plain rectangle
8
- * spanning `[x, y, width, height]`.
9
- */
10
- class TiledObject {
11
- id;
12
- name;
13
- type;
14
- x;
15
- y;
16
- width;
17
- height;
18
- rotation;
19
- visible;
20
- gid;
21
- point;
22
- ellipse;
23
- polygon;
24
- polyline;
25
- text;
26
- template;
27
- properties;
28
- constructor(data) {
29
- this.id = data.id;
30
- this.name = data.name;
31
- this.type = data.type;
32
- this.x = data.x;
33
- this.y = data.y;
34
- this.width = data.width;
35
- this.height = data.height;
36
- this.rotation = data.rotation;
37
- this.visible = data.visible;
38
- this.gid = data.gid;
39
- this.point = data.point ?? false;
40
- this.ellipse = data.ellipse ?? false;
41
- this.polygon = data.polygon;
42
- this.polyline = data.polyline;
43
- this.text = data.text;
44
- this.template = data.template;
45
- this.properties = data.properties ?? [];
46
- }
47
- /** Looks up a custom property by name. */
48
- getProperty(name) {
49
- return this.properties.find(property => property.name === name);
50
- }
51
- }
3
+ * A parsed Tiled object, placed in an {@link TiledObjectLayer} or a tile's
4
+ * collision `objectgroup`.
5
+ *
6
+ * The shape of the object is determined by which of {@link point},
7
+ * {@link ellipse}, {@link polygon}, {@link polyline}, {@link text}, or
8
+ * {@link gid} is set; if none are set, the object is a plain rectangle
9
+ * spanning `[x, y, width, height]`.
10
+ */
11
+ var TiledObject = class {
12
+ id;
13
+ name;
14
+ /**
15
+ * The object's class, normalised across Tiled versions: 1.9 wrote it as
16
+ * `class`, every other version as `type`. A file carries one of the two, so
17
+ * `class` wins when present and non-empty and `type` is used otherwise.
18
+ * Empty when the object has no class.
19
+ */
20
+ type;
21
+ x;
22
+ y;
23
+ width;
24
+ height;
25
+ rotation;
26
+ visible;
27
+ gid;
28
+ point;
29
+ ellipse;
30
+ polygon;
31
+ polyline;
32
+ text;
33
+ template;
34
+ properties;
35
+ constructor(data) {
36
+ this.id = data.id;
37
+ this.name = data.name;
38
+ this.type = data.class !== void 0 && data.class !== "" ? data.class : data.type;
39
+ this.x = data.x;
40
+ this.y = data.y;
41
+ this.width = data.width;
42
+ this.height = data.height;
43
+ this.rotation = data.rotation;
44
+ this.visible = data.visible;
45
+ this.gid = data.gid;
46
+ this.point = data.point ?? false;
47
+ this.ellipse = data.ellipse ?? false;
48
+ this.polygon = data.polygon;
49
+ this.polyline = data.polyline;
50
+ this.text = data.text;
51
+ this.template = data.template;
52
+ this.properties = data.properties ?? [];
53
+ }
54
+ /** Looks up a custom property by name. */
55
+ getProperty(name) {
56
+ return this.properties.find((property) => property.name === name);
57
+ }
58
+ };
52
59
 
60
+ //#endregion
53
61
  export { TiledObject };
54
- //# sourceMappingURL=TiledObject.js.map
62
+ //# sourceMappingURL=TiledObject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TiledObject.js","sources":["../../../src/TiledObject.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;;;AAQG;MACU,WAAW,CAAA;AACN,IAAA,EAAE;AACF,IAAA,IAAI;AACJ,IAAA,IAAI;AACJ,IAAA,CAAC;AACD,IAAA,CAAC;AACD,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,QAAQ;AACR,IAAA,OAAO;AACP,IAAA,GAAG;AACH,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,QAAQ;AACR,IAAA,IAAI;AACJ,IAAA,QAAQ;AACR,IAAA,UAAU;AAE1B,IAAA,WAAA,CAAmB,IAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;IACzC;;AAGO,IAAA,WAAW,CAAC,IAAY,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC;IACjE;AACD;;;;"}
1
+ {"version":3,"file":"TiledObject.js","names":[],"sources":["../../src/TiledObject.ts"],"sourcesContent":["import type { TiledObjectData, TiledPointData, TiledPropertyData, TiledTextData } from './data';\n\n/**\n * A parsed Tiled object, placed in an {@link TiledObjectLayer} or a tile's\n * collision `objectgroup`.\n *\n * The shape of the object is determined by which of {@link point},\n * {@link ellipse}, {@link polygon}, {@link polyline}, {@link text}, or\n * {@link gid} is set; if none are set, the object is a plain rectangle\n * spanning `[x, y, width, height]`.\n */\nexport class TiledObject {\n public readonly id: number;\n public readonly name: string;\n /**\n * The object's class, normalised across Tiled versions: 1.9 wrote it as\n * `class`, every other version as `type`. A file carries one of the two, so\n * `class` wins when present and non-empty and `type` is used otherwise.\n * Empty when the object has no class.\n */\n public readonly type: string;\n public readonly x: number;\n public readonly y: number;\n public readonly width: number;\n public readonly height: number;\n public readonly rotation: number;\n public readonly visible: boolean;\n public readonly gid?: number | undefined;\n public readonly point: boolean;\n public readonly ellipse: boolean;\n public readonly polygon?: readonly TiledPointData[] | undefined;\n public readonly polyline?: readonly TiledPointData[] | undefined;\n public readonly text?: TiledTextData | undefined;\n public readonly template?: string | undefined;\n public readonly properties: readonly TiledPropertyData[];\n\n public constructor(data: TiledObjectData) {\n this.id = data.id;\n this.name = data.name;\n this.type = data.class !== undefined && data.class !== '' ? data.class : data.type;\n this.x = data.x;\n this.y = data.y;\n this.width = data.width;\n this.height = data.height;\n this.rotation = data.rotation;\n this.visible = data.visible;\n this.gid = data.gid;\n this.point = data.point ?? false;\n this.ellipse = data.ellipse ?? false;\n this.polygon = data.polygon;\n this.polyline = data.polyline;\n this.text = data.text;\n this.template = data.template;\n this.properties = data.properties ?? [];\n }\n\n /** Looks up a custom property by name. */\n public getProperty(name: string): TiledPropertyData | undefined {\n return this.properties.find(property => property.name === name);\n }\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAa,cAAb,MAAyB;CACvB,AAAgB;CAChB,AAAgB;;;;;;;CAOhB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAAuB;EACxC,KAAK,KAAK,KAAK;EACf,KAAK,OAAO,KAAK;EACjB,KAAK,OAAO,KAAK,UAAU,UAAa,KAAK,UAAU,KAAK,KAAK,QAAQ,KAAK;EAC9E,KAAK,IAAI,KAAK;EACd,KAAK,IAAI,KAAK;EACd,KAAK,QAAQ,KAAK;EAClB,KAAK,SAAS,KAAK;EACnB,KAAK,WAAW,KAAK;EACrB,KAAK,UAAU,KAAK;EACpB,KAAK,MAAM,KAAK;EAChB,KAAK,QAAQ,KAAK,SAAS;EAC3B,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,UAAU,KAAK;EACpB,KAAK,WAAW,KAAK;EACrB,KAAK,OAAO,KAAK;EACjB,KAAK,WAAW,KAAK;EACrB,KAAK,aAAa,KAAK,cAAc,CAAC;CACxC;;CAGA,AAAO,YAAY,MAA6C;EAC9D,OAAO,KAAK,WAAW,MAAK,aAAY,SAAS,SAAS,IAAI;CAChE;AACF"}
@@ -1,9 +1,9 @@
1
1
  import type { Texture } from '@codexo/exojs';
2
- import type { TiledPointData, TiledPropertyData, TiledTileData, TiledTilesetData, TiledWangSetData } from './data';
2
+ import type { TiledObjectAlignment, TiledPointData, TiledPropertyData, TiledTileData, TiledTilesetData, TiledWangSetData } from './data';
3
3
  /**
4
4
  * Loader-resolved resources for a {@link TiledTileset}: the absolute image
5
5
  * URL(s) and the {@link Texture} instance(s) loaded for them. All textures
6
- * are owned by the `Loader` cache a {@link TiledTileset} never destroys
6
+ * are owned by the `Loader` cache - a {@link TiledTileset} never destroys
7
7
  * them.
8
8
  */
9
9
  export interface TiledTilesetResources {
@@ -17,7 +17,7 @@ export interface TiledTilesetResources {
17
17
  readonly tileTextures?: ReadonlyMap<number, Texture> | undefined;
18
18
  }
19
19
  /**
20
- * A parsed Tiled tileset either embedded inline in a map's `tilesets`
20
+ * A parsed Tiled tileset - either embedded inline in a map's `tilesets`
21
21
  * array, or parsed from an external `.tsj` file referenced by it.
22
22
  *
23
23
  * {@link firstGid} and {@link lastGid} define the inclusive range of global
@@ -44,7 +44,13 @@ export declare class TiledTileset {
44
44
  /** Texture loaded for {@link imageUrl}. Loader-owned; not destroyed by {@link TiledMap.destroy}. */
45
45
  readonly texture?: Texture | undefined;
46
46
  readonly tileOffset: TiledPointData;
47
- readonly objectAlignment?: string | undefined;
47
+ /**
48
+ * Where a tile object's stored position sits within its bounding box.
49
+ * `undefined` (and `'unspecified'`) means Tiled's orientation-dependent
50
+ * default - resolve it with
51
+ * {@link import('./objectAlignment').resolveTiledObjectAlignment}.
52
+ */
53
+ readonly objectAlignment?: TiledObjectAlignment | undefined;
48
54
  readonly tiles: readonly TiledTileData[];
49
55
  /** Wang sets (terrain/auto-tile definitions) declared on this tileset. Empty when none are defined. */
50
56
  readonly wangSets: readonly TiledWangSetData[];
@@ -59,3 +65,4 @@ export declare class TiledTileset {
59
65
  /** Looks up a custom property by name. */
60
66
  getProperty(name: string): TiledPropertyData | undefined;
61
67
  }
68
+ //# sourceMappingURL=TiledTileset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TiledTileset.d.ts","sourceRoot":"","sources":["../../src/TiledTileset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAEzI;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,wFAAwF;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,6HAA6H;IAC7H,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,4GAA4G;IAC5G,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAClE;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,kDAAkD;IAClD,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,wFAAwF;IACxF,SAAgB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,oGAAoG;IACpG,SAAgB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,SAAgB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,SAAgB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,oGAAoG;IACpG,SAAgB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,SAAgB,UAAU,EAAE,cAAc,CAAC;IAC3C;;;;;OAKG;IACH,SAAgB,eAAe,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnE,SAAgB,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IAChD,uGAAuG;IACvG,SAAgB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtD,4FAA4F;IAC5F,SAAgB,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,SAAgB,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;gBAEtC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,qBAA0B;IAuBlG,yHAAyH;IACzH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,uDAAuD;IAChD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1D,0CAA0C;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAGhE"}
@@ -1,73 +1,84 @@
1
+ //#region src/TiledTileset.ts
1
2
  /**
2
- * A parsed Tiled tileset either embedded inline in a map's `tilesets`
3
- * array, or parsed from an external `.tsj` file referenced by it.
4
- *
5
- * {@link firstGid} and {@link lastGid} define the inclusive range of global
6
- * tile ids (after masking flip/rotation flags via `maskTiledGid`) that this
7
- * tileset owns within its owning {@link TiledMap}.
8
- */
9
- class TiledTileset {
10
- /** First global tile id owned by this tileset. */
11
- firstGid;
12
- /** Resolved URL of the external `.tsj` file, or `undefined` for an embedded tileset. */
13
- source;
14
- name;
15
- class;
16
- tileWidth;
17
- tileHeight;
18
- tileCount;
19
- columns;
20
- spacing;
21
- margin;
22
- /** Resolved URL of the tileset's atlas image, or `undefined` for a collection-of-images tileset. */
23
- imageUrl;
24
- imageWidth;
25
- imageHeight;
26
- /** Texture loaded for {@link imageUrl}. Loader-owned; not destroyed by {@link TiledMap.destroy}. */
27
- texture;
28
- tileOffset;
29
- objectAlignment;
30
- tiles;
31
- /** Wang sets (terrain/auto-tile definitions) declared on this tileset. Empty when none are defined. */
32
- wangSets;
33
- /** Textures loaded for collection-of-images tiles, keyed by local tile id. Loader-owned. */
34
- tileTextures;
35
- properties;
36
- constructor(data, firstGid, resources = {}) {
37
- this.firstGid = firstGid;
38
- this.source = resources.source;
39
- this.name = data.name;
40
- this.class = data.class ?? '';
41
- this.tileWidth = data.tilewidth;
42
- this.tileHeight = data.tileheight;
43
- this.tileCount = data.tilecount;
44
- this.columns = data.columns;
45
- this.spacing = data.spacing ?? 0;
46
- this.margin = data.margin ?? 0;
47
- this.imageUrl = resources.imageUrl;
48
- this.imageWidth = data.imagewidth;
49
- this.imageHeight = data.imageheight;
50
- this.texture = resources.texture;
51
- this.tileOffset = data.tileoffset ?? { x: 0, y: 0 };
52
- this.objectAlignment = data.objectalignment;
53
- this.tiles = data.tiles ?? [];
54
- this.wangSets = data.wangsets ?? [];
55
- this.tileTextures = resources.tileTextures ?? new Map();
56
- this.properties = data.properties ?? [];
57
- }
58
- /** Last global tile id (inclusive) owned by this tileset. Empty (`lastGid < firstGid`) when {@link tileCount} is `0`. */
59
- get lastGid() {
60
- return this.firstGid + this.tileCount - 1;
61
- }
62
- /** Looks up a per-tile definition by local tile id. */
63
- getTile(localId) {
64
- return this.tiles.find(tile => tile.id === localId);
65
- }
66
- /** Looks up a custom property by name. */
67
- getProperty(name) {
68
- return this.properties.find(property => property.name === name);
69
- }
70
- }
3
+ * A parsed Tiled tileset - either embedded inline in a map's `tilesets`
4
+ * array, or parsed from an external `.tsj` file referenced by it.
5
+ *
6
+ * {@link firstGid} and {@link lastGid} define the inclusive range of global
7
+ * tile ids (after masking flip/rotation flags via `maskTiledGid`) that this
8
+ * tileset owns within its owning {@link TiledMap}.
9
+ */
10
+ var TiledTileset = class {
11
+ /** First global tile id owned by this tileset. */
12
+ firstGid;
13
+ /** Resolved URL of the external `.tsj` file, or `undefined` for an embedded tileset. */
14
+ source;
15
+ name;
16
+ class;
17
+ tileWidth;
18
+ tileHeight;
19
+ tileCount;
20
+ columns;
21
+ spacing;
22
+ margin;
23
+ /** Resolved URL of the tileset's atlas image, or `undefined` for a collection-of-images tileset. */
24
+ imageUrl;
25
+ imageWidth;
26
+ imageHeight;
27
+ /** Texture loaded for {@link imageUrl}. Loader-owned; not destroyed by {@link TiledMap.destroy}. */
28
+ texture;
29
+ tileOffset;
30
+ /**
31
+ * Where a tile object's stored position sits within its bounding box.
32
+ * `undefined` (and `'unspecified'`) means Tiled's orientation-dependent
33
+ * default - resolve it with
34
+ * {@link import('./objectAlignment').resolveTiledObjectAlignment}.
35
+ */
36
+ objectAlignment;
37
+ tiles;
38
+ /** Wang sets (terrain/auto-tile definitions) declared on this tileset. Empty when none are defined. */
39
+ wangSets;
40
+ /** Textures loaded for collection-of-images tiles, keyed by local tile id. Loader-owned. */
41
+ tileTextures;
42
+ properties;
43
+ constructor(data, firstGid, resources = {}) {
44
+ this.firstGid = firstGid;
45
+ this.source = resources.source;
46
+ this.name = data.name;
47
+ this.class = data.class ?? "";
48
+ this.tileWidth = data.tilewidth;
49
+ this.tileHeight = data.tileheight;
50
+ this.tileCount = data.tilecount;
51
+ this.columns = data.columns;
52
+ this.spacing = data.spacing ?? 0;
53
+ this.margin = data.margin ?? 0;
54
+ this.imageUrl = resources.imageUrl;
55
+ this.imageWidth = data.imagewidth;
56
+ this.imageHeight = data.imageheight;
57
+ this.texture = resources.texture;
58
+ this.tileOffset = data.tileoffset ?? {
59
+ x: 0,
60
+ y: 0
61
+ };
62
+ this.objectAlignment = data.objectalignment;
63
+ this.tiles = data.tiles ?? [];
64
+ this.wangSets = data.wangsets ?? [];
65
+ this.tileTextures = resources.tileTextures ?? /* @__PURE__ */ new Map();
66
+ this.properties = data.properties ?? [];
67
+ }
68
+ /** Last global tile id (inclusive) owned by this tileset. Empty (`lastGid < firstGid`) when {@link tileCount} is `0`. */
69
+ get lastGid() {
70
+ return this.firstGid + this.tileCount - 1;
71
+ }
72
+ /** Looks up a per-tile definition by local tile id. */
73
+ getTile(localId) {
74
+ return this.tiles.find((tile) => tile.id === localId);
75
+ }
76
+ /** Looks up a custom property by name. */
77
+ getProperty(name) {
78
+ return this.properties.find((property) => property.name === name);
79
+ }
80
+ };
71
81
 
82
+ //#endregion
72
83
  export { TiledTileset };
73
- //# sourceMappingURL=TiledTileset.js.map
84
+ //# sourceMappingURL=TiledTileset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TiledTileset.js","sources":["../../../src/TiledTileset.ts"],"sourcesContent":[null],"names":[],"mappings":"AAqBA;;;;;;;AAOG;MACU,YAAY,CAAA;;AAEP,IAAA,QAAQ;;AAER,IAAA,MAAM;AACN,IAAA,IAAI;AACJ,IAAA,KAAK;AACL,IAAA,SAAS;AACT,IAAA,UAAU;AACV,IAAA,SAAS;AACT,IAAA,OAAO;AACP,IAAA,OAAO;AACP,IAAA,MAAM;;AAEN,IAAA,QAAQ;AACR,IAAA,UAAU;AACV,IAAA,WAAW;;AAEX,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,eAAe;AACf,IAAA,KAAK;;AAEL,IAAA,QAAQ;;AAER,IAAA,YAAY;AACZ,IAAA,UAAU;AAE1B,IAAA,WAAA,CAAmB,IAAsB,EAAE,QAAgB,EAAE,YAAmC,EAAE,EAAA;AAChG,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE;QACnC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,IAAI,GAAG,EAAE;QACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;IACzC;;AAGA,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;IAC3C;;AAGO,IAAA,OAAO,CAAC,OAAe,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC;IACrD;;AAGO,IAAA,WAAW,CAAC,IAAY,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC;IACjE;AACD;;;;"}
1
+ {"version":3,"file":"TiledTileset.js","names":[],"sources":["../../src/TiledTileset.ts"],"sourcesContent":["import type { Texture } from '@codexo/exojs';\n\nimport type { TiledObjectAlignment, TiledPointData, TiledPropertyData, TiledTileData, TiledTilesetData, TiledWangSetData } from './data';\n\n/**\n * Loader-resolved resources for a {@link TiledTileset}: the absolute image\n * URL(s) and the {@link Texture} instance(s) loaded for them. All textures\n * are owned by the `Loader` cache - a {@link TiledTileset} never destroys\n * them.\n */\nexport interface TiledTilesetResources {\n /** Resolved URL of the external `.tsj` file, or `undefined` for an embedded tileset. */\n readonly source?: string | undefined;\n /** Resolved URL of the tileset's atlas {@link TiledTilesetData.image}, or `undefined` for a collection-of-images tileset. */\n readonly imageUrl?: string | undefined;\n /** Texture loaded for {@link imageUrl}. */\n readonly texture?: Texture | undefined;\n /** Textures loaded for collection-of-images {@link TiledTileData.image} entries, keyed by local tile id. */\n readonly tileTextures?: ReadonlyMap<number, Texture> | undefined;\n}\n\n/**\n * A parsed Tiled tileset - either embedded inline in a map's `tilesets`\n * array, or parsed from an external `.tsj` file referenced by it.\n *\n * {@link firstGid} and {@link lastGid} define the inclusive range of global\n * tile ids (after masking flip/rotation flags via `maskTiledGid`) that this\n * tileset owns within its owning {@link TiledMap}.\n */\nexport class TiledTileset {\n /** First global tile id owned by this tileset. */\n public readonly firstGid: number;\n /** Resolved URL of the external `.tsj` file, or `undefined` for an embedded tileset. */\n public readonly source?: string | undefined;\n public readonly name: string;\n public readonly class: string;\n public readonly tileWidth: number;\n public readonly tileHeight: number;\n public readonly tileCount: number;\n public readonly columns: number;\n public readonly spacing: number;\n public readonly margin: number;\n /** Resolved URL of the tileset's atlas image, or `undefined` for a collection-of-images tileset. */\n public readonly imageUrl?: string | undefined;\n public readonly imageWidth?: number | undefined;\n public readonly imageHeight?: number | undefined;\n /** Texture loaded for {@link imageUrl}. Loader-owned; not destroyed by {@link TiledMap.destroy}. */\n public readonly texture?: Texture | undefined;\n public readonly tileOffset: TiledPointData;\n /**\n * Where a tile object's stored position sits within its bounding box.\n * `undefined` (and `'unspecified'`) means Tiled's orientation-dependent\n * default - resolve it with\n * {@link import('./objectAlignment').resolveTiledObjectAlignment}.\n */\n public readonly objectAlignment?: TiledObjectAlignment | undefined;\n public readonly tiles: readonly TiledTileData[];\n /** Wang sets (terrain/auto-tile definitions) declared on this tileset. Empty when none are defined. */\n public readonly wangSets: readonly TiledWangSetData[];\n /** Textures loaded for collection-of-images tiles, keyed by local tile id. Loader-owned. */\n public readonly tileTextures: ReadonlyMap<number, Texture>;\n public readonly properties: readonly TiledPropertyData[];\n\n public constructor(data: TiledTilesetData, firstGid: number, resources: TiledTilesetResources = {}) {\n this.firstGid = firstGid;\n this.source = resources.source;\n this.name = data.name;\n this.class = data.class ?? '';\n this.tileWidth = data.tilewidth;\n this.tileHeight = data.tileheight;\n this.tileCount = data.tilecount;\n this.columns = data.columns;\n this.spacing = data.spacing ?? 0;\n this.margin = data.margin ?? 0;\n this.imageUrl = resources.imageUrl;\n this.imageWidth = data.imagewidth;\n this.imageHeight = data.imageheight;\n this.texture = resources.texture;\n this.tileOffset = data.tileoffset ?? { x: 0, y: 0 };\n this.objectAlignment = data.objectalignment;\n this.tiles = data.tiles ?? [];\n this.wangSets = data.wangsets ?? [];\n this.tileTextures = resources.tileTextures ?? new Map();\n this.properties = data.properties ?? [];\n }\n\n /** Last global tile id (inclusive) owned by this tileset. Empty (`lastGid < firstGid`) when {@link tileCount} is `0`. */\n public get lastGid(): number {\n return this.firstGid + this.tileCount - 1;\n }\n\n /** Looks up a per-tile definition by local tile id. */\n public getTile(localId: number): TiledTileData | undefined {\n return this.tiles.find(tile => tile.id === localId);\n }\n\n /** Looks up a custom property by name. */\n public getProperty(name: string): TiledPropertyData | undefined {\n return this.properties.find(property => property.name === name);\n }\n}\n"],"mappings":";;;;;;;;;AA6BA,IAAa,eAAb,MAA0B;;CAExB,AAAgB;;CAEhB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;;CAEhB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;;CAEhB,AAAgB;CAChB,AAAgB;;;;;;;CAOhB,AAAgB;CAChB,AAAgB;;CAEhB,AAAgB;;CAEhB,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAAwB,UAAkB,YAAmC,CAAC,GAAG;EAClG,KAAK,WAAW;EAChB,KAAK,SAAS,UAAU;EACxB,KAAK,OAAO,KAAK;EACjB,KAAK,QAAQ,KAAK,SAAS;EAC3B,KAAK,YAAY,KAAK;EACtB,KAAK,aAAa,KAAK;EACvB,KAAK,YAAY,KAAK;EACtB,KAAK,UAAU,KAAK;EACpB,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,SAAS,KAAK,UAAU;EAC7B,KAAK,WAAW,UAAU;EAC1B,KAAK,aAAa,KAAK;EACvB,KAAK,cAAc,KAAK;EACxB,KAAK,UAAU,UAAU;EACzB,KAAK,aAAa,KAAK,cAAc;GAAE,GAAG;GAAG,GAAG;EAAE;EAClD,KAAK,kBAAkB,KAAK;EAC5B,KAAK,QAAQ,KAAK,SAAS,CAAC;EAC5B,KAAK,WAAW,KAAK,YAAY,CAAC;EAClC,KAAK,eAAe,UAAU,gCAAgB,IAAI,IAAI;EACtD,KAAK,aAAa,KAAK,cAAc,CAAC;CACxC;;CAGA,IAAW,UAAkB;EAC3B,OAAO,KAAK,WAAW,KAAK,YAAY;CAC1C;;CAGA,AAAO,QAAQ,SAA4C;EACzD,OAAO,KAAK,MAAM,MAAK,SAAQ,KAAK,OAAO,OAAO;CACpD;;CAGA,AAAO,YAAY,MAA6C;EAC9D,OAAO,KAAK,WAAW,MAAK,aAAY,SAAS,SAAS,IAAI;CAChE;AACF"}