@codexo/exojs-tiled 0.15.3 → 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 +10 -18
  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
@@ -37,7 +37,7 @@ export interface TiledAnimationFrameData {
37
37
  readonly duration: number;
38
38
  }
39
39
  /**
40
- * A per-tile definition within a tileset's `tiles` array. Sparse only
40
+ * A per-tile definition within a tileset's `tiles` array. Sparse - only
41
41
  * tiles carrying metadata (properties, animation, a collision objectgroup,
42
42
  * or a collection-of-images source) appear here.
43
43
  */
@@ -58,7 +58,7 @@ export interface TiledTileData {
58
58
  /**
59
59
  * One color (terrain) entry within a wangset's `colors` array.
60
60
  *
61
- * `tile` is the representative tile local id for this color (1 if unset).
61
+ * `tile` is the representative tile local id for this color (-1 if unset).
62
62
  * `probability` is the relative spawn weight used by Tiled's random fill.
63
63
  */
64
64
  export interface TiledWangColorData {
@@ -84,9 +84,9 @@ export interface TiledWangTileData {
84
84
  * A wangset entry within a tileset's `wangsets` array.
85
85
  *
86
86
  * `type` is `'corner'`, `'edge'`, or `'mixed'` (Tiled 1.5+). Older files may
87
- * omit it or use other strings treat unknown values as-is.
87
+ * omit it or use other strings - treat unknown values as-is.
88
88
  *
89
- * `tile` is the representative tile local id for this wangset (1 if unset).
89
+ * `tile` is the representative tile local id for this wangset (-1 if unset).
90
90
  */
91
91
  export interface TiledWangSetData {
92
92
  readonly name: string;
@@ -96,6 +96,14 @@ export interface TiledWangSetData {
96
96
  readonly wangtiles: readonly TiledWangTileData[];
97
97
  readonly properties?: readonly TiledPropertyData[] | undefined;
98
98
  }
99
+ /**
100
+ * Where a tile object's stored `x`/`y` sits within the tile's bounding box
101
+ * ({@link TiledTilesetData.objectalignment}).
102
+ *
103
+ * `'unspecified'` is Tiled's own default and is orientation-dependent - see
104
+ * {@link import('./objectAlignment').resolveTiledObjectAlignment}.
105
+ */
106
+ export type TiledObjectAlignment = 'unspecified' | 'topleft' | 'top' | 'topright' | 'left' | 'center' | 'right' | 'bottomleft' | 'bottom' | 'bottomright';
99
107
  /**
100
108
  * A Tiled tileset, as the root of a standalone `.tsj` file or (minus
101
109
  * `firstgid`) embedded inline in a map's `tilesets` array.
@@ -114,7 +122,8 @@ export interface TiledTilesetData {
114
122
  readonly imagewidth?: number | undefined;
115
123
  readonly imageheight?: number | undefined;
116
124
  readonly tileoffset?: TiledPointData | undefined;
117
- readonly objectalignment?: string | undefined;
125
+ /** Alignment of a tile object's stored position within its bounding box. Absent means `'unspecified'`. */
126
+ readonly objectalignment?: TiledObjectAlignment | undefined;
118
127
  readonly tiles?: readonly TiledTileData[] | undefined;
119
128
  readonly wangsets?: readonly TiledWangSetData[] | undefined;
120
129
  readonly properties?: readonly TiledPropertyData[] | undefined;
@@ -130,7 +139,7 @@ export interface TiledExternalTilesetRefData {
130
139
  export type TiledEmbeddedTilesetRefData = TiledTilesetData & {
131
140
  readonly firstgid: number;
132
141
  };
133
- /** One entry of {@link TiledMapData.tilesets} either external (`source`) or embedded. */
142
+ /** One entry of {@link TiledMapData.tilesets} - either external (`source`) or embedded. */
134
143
  export type TiledTilesetRefData = TiledExternalTilesetRefData | TiledEmbeddedTilesetRefData;
135
144
  /** Text rendering options for a `text` object (object layers). */
136
145
  export interface TiledTextData {
@@ -156,8 +165,16 @@ export interface TiledTextData {
156
165
  export interface TiledObjectData {
157
166
  readonly id: number;
158
167
  readonly name: string;
159
- /** Object class (empty string if unset). */
168
+ /**
169
+ * Object class, under the name Tiled 1.10 and later write. Empty when unset.
170
+ *
171
+ * Tiled 1.9 wrote the same value as {@link TiledObjectData.class} instead;
172
+ * see {@link import('./TiledObject').TiledObject.type} for how the two are
173
+ * reconciled.
174
+ */
160
175
  readonly type: string;
176
+ /** Object class as Tiled 1.9 wrote it. Absent in every other version. */
177
+ readonly class?: string | undefined;
161
178
  readonly x: number;
162
179
  readonly y: number;
163
180
  readonly width: number;
@@ -257,3 +274,4 @@ export interface TiledMapData {
257
274
  readonly tilesets: readonly TiledTilesetRefData[];
258
275
  readonly properties?: readonly TiledPropertyData[] | undefined;
259
276
  }
277
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/data.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,5 @@
6
6
  * @throws {TiledFormatError} On zstd/unknown compression or malformed data.
7
7
  * @internal
8
8
  */
9
- export declare function decodeTiledLayerData(raw: unknown, source: string): Promise<unknown>;
9
+ export declare const decodeTiledLayerData: (raw: unknown, source: string) => Promise<unknown>;
10
+ //# sourceMappingURL=decodeLayerData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeLayerData.d.ts","sourceRoot":"","sources":["../../src/decodeLayerData.ts"],"names":[],"mappings":"AA4FA;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAU,KAAK,OAAO,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,CAKxF,CAAC"}
@@ -1,100 +1,61 @@
1
- import { Codec } from '@codexo/exojs';
2
- import { TiledFormatError } from './validate.js';
1
+ import { TiledFormatError } from "./validate.js";
2
+ import { Codec } from "@codexo/exojs";
3
3
 
4
- // Pre-validation decode pass for Tiled tile-layer data.
5
- //
6
- // Tiled can store tile-layer GIDs as plain CSV (a JSON array), or as a base64
7
- // string that is optionally gzip/zlib/zstd compressed. The rest of the pipeline
8
- // (validation, `TiledMap`, `toTileMap`) only deals with the decoded `number[]`
9
- // GID array, so this pass runs first — during the async load phase — and
10
- // rewrites any base64/compressed `data` (and infinite-map `chunks[].data`) into
11
- // plain GID arrays in place. After it runs, the document looks like a CSV map to
12
- // every downstream stage, which stays synchronous and unchanged.
4
+ //#region src/decodeLayerData.ts
13
5
  /** Read a little-endian Uint32 GID array out of a decoded byte buffer. */
14
- function bytesToGids(bytes, source, path) {
15
- if (bytes.length % 4 !== 0) {
16
- throw new TiledFormatError(source, path, `decoded tile data length ${bytes.length} is not a multiple of 4`);
17
- }
18
- const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
19
- const count = bytes.length / 4;
20
- const gids = new Array(count);
21
- for (let i = 0; i < count; i++) {
22
- gids[i] = view.getUint32(i * 4, true); // Tiled writes little-endian.
23
- }
24
- return gids;
25
- }
6
+ const bytesToGids = (bytes, source, path) => {
7
+ if (bytes.length % 4 !== 0) throw new TiledFormatError(source, path, `decoded tile data length ${bytes.length} is not a multiple of 4`);
8
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
9
+ const count = bytes.length / 4;
10
+ const gids = new Array(count);
11
+ for (let i = 0; i < count; i++) gids[i] = view.getUint32(i * 4, true);
12
+ return gids;
13
+ };
26
14
  /** Decode one base64 `data` string into a GID array, applying any compression. */
27
- async function decodeBase64Gids(data, compression, source, path) {
28
- let bytes = Codec.decodeBase64(data);
29
- if (compression === 'gzip') {
30
- bytes = await Codec.decompress(bytes, 'gzip');
31
- }
32
- else if (compression === 'zlib') {
33
- bytes = await Codec.decompress(bytes, 'deflate');
34
- }
35
- else if (compression === 'zstd') {
36
- throw new TiledFormatError(source, path, 'zstd-compressed tile data is not supported (no native decoder; re-export with gzip/zlib or uncompressed)');
37
- }
38
- else if (compression !== undefined && compression !== '') {
39
- throw new TiledFormatError(source, path, `unsupported tile layer compression ${JSON.stringify(compression)}`);
40
- }
41
- return bytesToGids(bytes, source, path);
42
- }
15
+ const decodeBase64Gids = async (data, compression, source, path) => {
16
+ let bytes = Codec.decodeBase64(data);
17
+ if (compression === "gzip") bytes = await Codec.decompress(bytes, "gzip");
18
+ else if (compression === "zlib") bytes = await Codec.decompress(bytes, "deflate");
19
+ else if (compression === "zstd") throw new TiledFormatError(source, path, "zstd-compressed tile data is not supported (no native decoder; re-export with gzip/zlib or uncompressed)");
20
+ else if (compression !== void 0 && compression !== "") throw new TiledFormatError(source, path, `unsupported tile layer compression ${JSON.stringify(compression)}`);
21
+ return bytesToGids(bytes, source, path);
22
+ };
43
23
  /** Decode a single tile layer's `data` and/or `chunks[].data` in place. */
44
- async function decodeTileLayer(layer, source, path) {
45
- if (layer.encoding !== 'base64') {
46
- return; // CSV / plain array nothing to decode.
47
- }
48
- if (typeof layer.data === 'string') {
49
- layer.data = await decodeBase64Gids(layer.data, layer.compression, source, `${path}.data`);
50
- }
51
- if (Array.isArray(layer.chunks)) {
52
- await Promise.all(layer.chunks.map(async (chunk, i) => {
53
- if (typeof chunk !== 'object' || chunk === null)
54
- return;
55
- const c = chunk;
56
- if (typeof c.data === 'string') {
57
- c.data = await decodeBase64Gids(c.data, layer.compression, source, `${path}.chunks[${i}].data`);
58
- }
59
- }));
60
- }
61
- // Now that data is a plain GID array, drop the encoding/compression markers so
62
- // downstream validation treats it like a CSV layer.
63
- delete layer.encoding;
64
- delete layer.compression;
65
- }
24
+ const decodeTileLayer = async (layer, source, path) => {
25
+ if (layer.encoding !== "base64") return;
26
+ if (typeof layer.data === "string") layer.data = await decodeBase64Gids(layer.data, layer.compression, source, `${path}.data`);
27
+ if (Array.isArray(layer.chunks)) await Promise.all(layer.chunks.map(async (chunk, i) => {
28
+ if (typeof chunk !== "object" || chunk === null) return;
29
+ const c = chunk;
30
+ if (typeof c.data === "string") c.data = await decodeBase64Gids(c.data, layer.compression, source, `${path}.chunks[${i}].data`);
31
+ }));
32
+ delete layer.encoding;
33
+ delete layer.compression;
34
+ };
66
35
  /** Recursively decode every tile layer under a `layers` array (groups nest). */
67
- async function decodeLayers(layers, source, path) {
68
- if (!Array.isArray(layers)) {
69
- return;
70
- }
71
- await Promise.all(layers.map(async (layer, i) => {
72
- if (typeof layer !== 'object' || layer === null)
73
- return;
74
- const l = layer;
75
- const layerPath = `${path}[${i}]`;
76
- if (l.type === 'tilelayer') {
77
- await decodeTileLayer(l, source, layerPath);
78
- }
79
- else if (l.type === 'group') {
80
- await decodeLayers(l.layers, source, `${layerPath}.layers`);
81
- }
82
- }));
83
- }
36
+ const decodeLayers = async (layers, source, path) => {
37
+ if (!Array.isArray(layers)) return;
38
+ await Promise.all(layers.map(async (layer, i) => {
39
+ if (typeof layer !== "object" || layer === null) return;
40
+ const l = layer;
41
+ const layerPath = `${path}[${i}]`;
42
+ if (l.type === "tilelayer") await decodeTileLayer(l, source, layerPath);
43
+ else if (l.type === "group") await decodeLayers(l.layers, source, `${layerPath}.layers`);
44
+ }));
45
+ };
84
46
  /**
85
- * Decode any base64/compressed tile-layer data in a raw Tiled map document into
86
- * plain GID arrays, mutating `raw` in place and returning it. Safe to call on a
87
- * pure-CSV map (it does nothing). Runs before validation.
88
- *
89
- * @throws {TiledFormatError} On zstd/unknown compression or malformed data.
90
- * @internal
91
- */
92
- async function decodeTiledLayerData(raw, source) {
93
- if (typeof raw === 'object' && raw !== null) {
94
- await decodeLayers(raw.layers, source, 'layers');
95
- }
96
- return raw;
97
- }
47
+ * Decode any base64/compressed tile-layer data in a raw Tiled map document into
48
+ * plain GID arrays, mutating `raw` in place and returning it. Safe to call on a
49
+ * pure-CSV map (it does nothing). Runs before validation.
50
+ *
51
+ * @throws {TiledFormatError} On zstd/unknown compression or malformed data.
52
+ * @internal
53
+ */
54
+ const decodeTiledLayerData = async (raw, source) => {
55
+ if (typeof raw === "object" && raw !== null) await decodeLayers(raw.layers, source, "layers");
56
+ return raw;
57
+ };
98
58
 
59
+ //#endregion
99
60
  export { decodeTiledLayerData };
100
- //# sourceMappingURL=decodeLayerData.js.map
61
+ //# sourceMappingURL=decodeLayerData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decodeLayerData.js","sources":["../../../src/decodeLayerData.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decodeLayerData.js","names":[],"sources":["../../src/decodeLayerData.ts"],"sourcesContent":["// Pre-validation decode pass for Tiled tile-layer data.\n//\n// Tiled can store tile-layer GIDs as plain CSV (a JSON array), or as a base64\n// string that is optionally gzip/zlib/zstd compressed. The rest of the pipeline\n// (validation, `TiledMap`, `toTileMap`) only deals with the decoded `number[]`\n// GID array, so this pass runs first - during the async load phase - and\n// rewrites any base64/compressed `data` (and infinite-map `chunks[].data`) into\n// plain GID arrays in place. After it runs, the document looks like a CSV map to\n// every downstream stage, which stays synchronous and unchanged.\n\nimport { Codec } from '@codexo/exojs';\n\nimport { TiledFormatError } from './validate';\n\n/** Read a little-endian Uint32 GID array out of a decoded byte buffer. */\nconst bytesToGids = (bytes: Uint8Array, source: string, path: string): number[] => {\n if (bytes.length % 4 !== 0) {\n throw new TiledFormatError(source, path, `decoded tile data length ${bytes.length} is not a multiple of 4`);\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const count = bytes.length / 4;\n const gids = new Array<number>(count);\n for (let i = 0; i < count; i++) {\n gids[i] = view.getUint32(i * 4, true); // Tiled writes little-endian.\n }\n return gids;\n};\n\n/** Decode one base64 `data` string into a GID array, applying any compression. */\nconst decodeBase64Gids = async (data: string, compression: unknown, source: string, path: string): Promise<number[]> => {\n let bytes = Codec.decodeBase64(data);\n\n if (compression === 'gzip') {\n bytes = await Codec.decompress(bytes, 'gzip');\n } else if (compression === 'zlib') {\n bytes = await Codec.decompress(bytes, 'deflate');\n } else if (compression === 'zstd') {\n throw new TiledFormatError(source, path, 'zstd-compressed tile data is not supported (no native decoder; re-export with gzip/zlib or uncompressed)');\n } else if (compression !== undefined && compression !== '') {\n throw new TiledFormatError(source, path, `unsupported tile layer compression ${JSON.stringify(compression)}`);\n }\n\n return bytesToGids(bytes, source, path);\n};\n\n/** Decode a single tile layer's `data` and/or `chunks[].data` in place. */\nconst decodeTileLayer = async (layer: Record<string, unknown>, source: string, path: string): Promise<void> => {\n if (layer.encoding !== 'base64') {\n return; // CSV / plain array — nothing to decode.\n }\n\n if (typeof layer.data === 'string') {\n layer.data = await decodeBase64Gids(layer.data, layer.compression, source, `${path}.data`);\n }\n\n if (Array.isArray(layer.chunks)) {\n await Promise.all(\n (layer.chunks as unknown[]).map(async (chunk, i) => {\n if (typeof chunk !== 'object' || chunk === null) return;\n const c = chunk as Record<string, unknown>;\n if (typeof c.data === 'string') {\n c.data = await decodeBase64Gids(c.data, layer.compression, source, `${path}.chunks[${i}].data`);\n }\n }),\n );\n }\n\n // Now that data is a plain GID array, drop the encoding/compression markers so\n // downstream validation treats it like a CSV layer.\n delete layer.encoding;\n delete layer.compression;\n};\n\n/** Recursively decode every tile layer under a `layers` array (groups nest). */\nconst decodeLayers = async (layers: unknown, source: string, path: string): Promise<void> => {\n if (!Array.isArray(layers)) {\n return;\n }\n await Promise.all(\n (layers as unknown[]).map(async (layer, i) => {\n if (typeof layer !== 'object' || layer === null) return;\n const l = layer as Record<string, unknown>;\n const layerPath = `${path}[${i}]`;\n if (l.type === 'tilelayer') {\n await decodeTileLayer(l, source, layerPath);\n } else if (l.type === 'group') {\n await decodeLayers(l.layers, source, `${layerPath}.layers`);\n }\n }),\n );\n};\n\n/**\n * Decode any base64/compressed tile-layer data in a raw Tiled map document into\n * plain GID arrays, mutating `raw` in place and returning it. Safe to call on a\n * pure-CSV map (it does nothing). Runs before validation.\n *\n * @throws {TiledFormatError} On zstd/unknown compression or malformed data.\n * @internal\n */\nexport const decodeTiledLayerData = async (raw: unknown, source: string): Promise<unknown> => {\n if (typeof raw === 'object' && raw !== null) {\n await decodeLayers((raw as Record<string, unknown>).layers, source, 'layers');\n }\n return raw;\n};\n"],"mappings":";;;;;AAeA,MAAM,eAAe,OAAmB,QAAgB,SAA2B;CACjF,IAAI,MAAM,SAAS,MAAM,GACvB,MAAM,IAAI,iBAAiB,QAAQ,MAAM,4BAA4B,MAAM,OAAO,wBAAwB;CAE5G,MAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;CAC1E,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,OAAO,IAAI,MAAc,KAAK;CACpC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KACzB,KAAK,KAAK,KAAK,UAAU,IAAI,GAAG,IAAI;CAEtC,OAAO;AACT;;AAGA,MAAM,mBAAmB,OAAO,MAAc,aAAsB,QAAgB,SAAoC;CACtH,IAAI,QAAQ,MAAM,aAAa,IAAI;CAEnC,IAAI,gBAAgB,QAClB,QAAQ,MAAM,MAAM,WAAW,OAAO,MAAM;MACvC,IAAI,gBAAgB,QACzB,QAAQ,MAAM,MAAM,WAAW,OAAO,SAAS;MAC1C,IAAI,gBAAgB,QACzB,MAAM,IAAI,iBAAiB,QAAQ,MAAM,0GAA0G;MAC9I,IAAI,gBAAgB,UAAa,gBAAgB,IACtD,MAAM,IAAI,iBAAiB,QAAQ,MAAM,sCAAsC,KAAK,UAAU,WAAW,GAAG;CAG9G,OAAO,YAAY,OAAO,QAAQ,IAAI;AACxC;;AAGA,MAAM,kBAAkB,OAAO,OAAgC,QAAgB,SAAgC;CAC7G,IAAI,MAAM,aAAa,UACrB;CAGF,IAAI,OAAO,MAAM,SAAS,UACxB,MAAM,OAAO,MAAM,iBAAiB,MAAM,MAAM,MAAM,aAAa,QAAQ,GAAG,KAAK,MAAM;CAG3F,IAAI,MAAM,QAAQ,MAAM,MAAM,GAC5B,MAAM,QAAQ,IACX,MAAM,OAAqB,IAAI,OAAO,OAAO,MAAM;EAClD,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EACjD,MAAM,IAAI;EACV,IAAI,OAAO,EAAE,SAAS,UACpB,EAAE,OAAO,MAAM,iBAAiB,EAAE,MAAM,MAAM,aAAa,QAAQ,GAAG,KAAK,UAAU,EAAE,OAAO;CAElG,CAAC,CACH;CAKF,OAAO,MAAM;CACb,OAAO,MAAM;AACf;;AAGA,MAAM,eAAe,OAAO,QAAiB,QAAgB,SAAgC;CAC3F,IAAI,CAAC,MAAM,QAAQ,MAAM,GACvB;CAEF,MAAM,QAAQ,IACX,OAAqB,IAAI,OAAO,OAAO,MAAM;EAC5C,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;EACjD,MAAM,IAAI;EACV,MAAM,YAAY,GAAG,KAAK,GAAG,EAAE;EAC/B,IAAI,EAAE,SAAS,aACb,MAAM,gBAAgB,GAAG,QAAQ,SAAS;OACrC,IAAI,EAAE,SAAS,SACpB,MAAM,aAAa,EAAE,QAAQ,QAAQ,GAAG,UAAU,QAAQ;CAE9D,CAAC,CACH;AACF;;;;;;;;;AAUA,MAAa,uBAAuB,OAAO,KAAc,WAAqC;CAC5F,IAAI,OAAO,QAAQ,YAAY,QAAQ,MACrC,MAAM,aAAc,IAAgC,QAAQ,QAAQ,QAAQ;CAE9E,OAAO;AACT"}
package/dist/esm/gid.d.ts CHANGED
@@ -10,4 +10,5 @@ export declare const TILED_ROTATED_HEXAGONAL_120_FLAG = 268435456;
10
10
  * value is first coerced to an unsigned 32-bit integer via `>>> 0`.
11
11
  * @internal
12
12
  */
13
- export declare function maskTiledGid(raw: number): number;
13
+ export declare const maskTiledGid: (raw: number) => number;
14
+ //# sourceMappingURL=gid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gid.d.ts","sourceRoot":"","sources":["../../src/gid.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,+BAA+B,aAAa,CAAC;AAC1D,eAAO,MAAM,6BAA6B,aAAa,CAAC;AACxD,eAAO,MAAM,6BAA6B,YAAa,CAAC;AACxD,eAAO,MAAM,gCAAgC,YAAa,CAAC;AAK3D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAAsC,CAAC"}
package/dist/esm/gid.js CHANGED
@@ -1,28 +1,19 @@
1
- // Tiled GID flip-flag bits (TMJ tile-layer `data` / object `gid` values).
2
- // The high four bits of a 32-bit GID encode flip/rotation state; the
3
- // remaining 28 bits are the actual tileset-relative global tile id.
4
- //
5
- // These constants exist only to mask flip bits off before resolving a GID
6
- // against a tileset's [firstgid, firstgid + tilecount) range during source
7
- // validation. Converting flip bits into a runtime `TileTransform` is a C2
8
- // (runtime conversion) concern and is intentionally not implemented here.
9
- // @internal
10
- const TILED_FLIPPED_HORIZONTALLY_FLAG = 0x80000000;
11
- const TILED_FLIPPED_VERTICALLY_FLAG = 0x40000000;
12
- const TILED_FLIPPED_DIAGONALLY_FLAG = 0x20000000;
1
+ //#region src/gid.ts
2
+ const TILED_FLIPPED_HORIZONTALLY_FLAG = 2147483648;
3
+ const TILED_FLIPPED_VERTICALLY_FLAG = 1073741824;
4
+ const TILED_FLIPPED_DIAGONALLY_FLAG = 536870912;
13
5
  /** Mask isolating the 28-bit tile id, clearing all four flip/rotation flag bits. */
14
- const TILED_GID_MASK = 0x0fffffff;
6
+ const TILED_GID_MASK = 268435455;
15
7
  /**
16
- * Strips the flip/rotation flag bits from a raw Tiled GID, returning the
17
- * plain tileset-relative global tile id (0 = empty cell).
18
- *
19
- * GIDs may exceed `2^31` (the horizontal-flip flag alone is `2^31`), so the
20
- * value is first coerced to an unsigned 32-bit integer via `>>> 0`.
21
- * @internal
22
- */
23
- function maskTiledGid(raw) {
24
- return (raw >>> 0) & TILED_GID_MASK;
25
- }
8
+ * Strips the flip/rotation flag bits from a raw Tiled GID, returning the
9
+ * plain tileset-relative global tile id (0 = empty cell).
10
+ *
11
+ * GIDs may exceed `2^31` (the horizontal-flip flag alone is `2^31`), so the
12
+ * value is first coerced to an unsigned 32-bit integer via `>>> 0`.
13
+ * @internal
14
+ */
15
+ const maskTiledGid = (raw) => raw >>> 0 & TILED_GID_MASK;
26
16
 
17
+ //#endregion
27
18
  export { TILED_FLIPPED_DIAGONALLY_FLAG, TILED_FLIPPED_HORIZONTALLY_FLAG, TILED_FLIPPED_VERTICALLY_FLAG, maskTiledGid };
28
- //# sourceMappingURL=gid.js.map
19
+ //# sourceMappingURL=gid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gid.js","sources":["../../../src/gid.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAM,+BAA+B,GAAG;AACxC,MAAM,6BAA6B,GAAG;AACtC,MAAM,6BAA6B,GAAG;AAG7C;AACA,MAAM,cAAc,GAAG,UAAU;AAEjC;;;;;;;AAOG;AACG,SAAU,YAAY,CAAC,GAAW,EAAA;AACtC,IAAA,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,cAAc;AACrC;;;;"}
1
+ {"version":3,"file":"gid.js","names":[],"sources":["../../src/gid.ts"],"sourcesContent":["// Tiled GID flip-flag bits (TMJ tile-layer `data` / object `gid` values).\n// The high four bits of a 32-bit GID encode flip/rotation state; the\n// remaining 28 bits are the actual tileset-relative global tile id.\n//\n// These constants exist only to mask flip bits off before resolving a GID\n// against a tileset's [firstgid, firstgid + tilecount) range during source\n// validation. Converting flip bits into a runtime `TileTransform` is a C2\n// (runtime conversion) concern and is intentionally not implemented here.\n// @internal\n\nexport const TILED_FLIPPED_HORIZONTALLY_FLAG = 0x80000000;\nexport const TILED_FLIPPED_VERTICALLY_FLAG = 0x40000000;\nexport const TILED_FLIPPED_DIAGONALLY_FLAG = 0x20000000;\nexport const TILED_ROTATED_HEXAGONAL_120_FLAG = 0x10000000;\n\n/** Mask isolating the 28-bit tile id, clearing all four flip/rotation flag bits. */\nconst TILED_GID_MASK = 0x0fffffff;\n\n/**\n * Strips the flip/rotation flag bits from a raw Tiled GID, returning the\n * plain tileset-relative global tile id (0 = empty cell).\n *\n * GIDs may exceed `2^31` (the horizontal-flip flag alone is `2^31`), so the\n * value is first coerced to an unsigned 32-bit integer via `>>> 0`.\n * @internal\n */\nexport const maskTiledGid = (raw: number): number => (raw >>> 0) & TILED_GID_MASK;\n"],"mappings":";AAUA,MAAa,kCAAkC;AAC/C,MAAa,gCAAgC;AAC7C,MAAa,gCAAgC;;AAI7C,MAAM,iBAAiB;;;;;;;;;AAUvB,MAAa,gBAAgB,QAAyB,QAAQ,IAAK"}
@@ -1 +1,2 @@
1
1
  export * from './public';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,UAAU,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,12 +1,14 @@
1
- export { tiledBuildInfo } from './tiledBuildInfo.js';
2
- export { tiledExtension } from './tiledExtension.js';
3
- export { tiledMapBinding } from './tiledMapBinding.js';
4
- export { tiledRuntimeMapBinding } from './tiledRuntimeMapBinding.js';
5
- export { ObjectLayer, TILE_TRANSFORM_IDENTITY, TileLayer, TileLayerNode, TileMap, TileMapBand, TileMapNode, TileMapView, TileSet, WangSet, tilemapExtension } from '@codexo/exojs-tilemap';
6
- export { TiledGroupLayer, TiledImageLayer, TiledLayer, TiledObjectLayer, TiledTileLayer, createTiledLayer } from './TiledLayer.js';
7
- export { TiledMap } from './TiledMap.js';
8
- export { TiledObject } from './TiledObject.js';
9
- export { TiledTileset } from './TiledTileset.js';
10
- export { tiledWangSetToWangSet } from './wangSets.js';
11
- export { TiledFormatError } from './validate.js';
12
- //# sourceMappingURL=index.js.map
1
+ import { tiledBuildInfo } from "./tiledBuildInfo.js";
2
+ import { TILED_OBJECT_ALIGNMENTS, getTiledObjectAnchorOffset, resolveTiledObjectAlignment } from "./objectAlignment.js";
3
+ import { TiledFormatError } from "./validate.js";
4
+ import { TiledObject } from "./TiledObject.js";
5
+ import { TiledGroupLayer, TiledImageLayer, TiledLayer, TiledObjectLayer, TiledTileLayer, createTiledLayer } from "./TiledLayer.js";
6
+ import { TiledMap } from "./TiledMap.js";
7
+ import { TiledTileset } from "./TiledTileset.js";
8
+ import { TiledSourceAssetType, tiledSourceType } from "./tiledSourceType.js";
9
+ import { TileMapAssetType, tileMapType } from "./tileMapType.js";
10
+ import { tiledExtension } from "./tiledExtension.js";
11
+ import { tiledWangSetToWangSet } from "./wangSets.js";
12
+ import { MapLevelRuntime, MapLevelSide, MapObjectSpawner, MapSpawnError, MapSpawnSession, MapWorld, MapWorldRuntime, ObjectLayer, TILE_TRANSFORM_IDENTITY, TileLayer, TileLayerNode, TileMap, TileMapBand, TileMapNode, TileMapView, TileSet, WangSet, mapObjectDescriptor, mapObjectDescriptors, tilemapExtension } from "./public.js";
13
+
14
+ export { MapLevelRuntime, MapLevelSide, MapObjectSpawner, MapSpawnError, MapSpawnSession, MapWorld, MapWorldRuntime, ObjectLayer, TILED_OBJECT_ALIGNMENTS, TILE_TRANSFORM_IDENTITY, TileLayer, TileLayerNode, TileMap, TileMapAssetType, TileMapBand, TileMapNode, TileMapView, TileSet, TiledFormatError, TiledGroupLayer, TiledImageLayer, TiledLayer, TiledMap, TiledObject, TiledObjectLayer, TiledSourceAssetType, TiledTileLayer, TiledTileset, WangSet, createTiledLayer, getTiledObjectAnchorOffset, mapObjectDescriptor, mapObjectDescriptors, resolveTiledObjectAlignment, tileMapType, tiledBuildInfo, tiledExtension, tiledSourceType, tiledWangSetToWangSet, tilemapExtension };
@@ -1,9 +1,15 @@
1
- import { type AssetLoaderContext } from '@codexo/exojs';
1
+ import type { AssetFactoryContext } from '@codexo/exojs';
2
+ import type { TiledMapData } from './data';
2
3
  import { TiledMap } from './TiledMap';
4
+ import type { TiledLoadOptions } from './tiledOptions';
5
+ /** What every step below needs from the load it belongs to. */
6
+ type TiledContext = AssetFactoryContext<TiledLoadOptions>;
3
7
  /**
4
- * Loads and resolves a Tiled map: fetches and validates the `.tmj`, resolves
5
- * each tileset (external `.tsj` or embedded) and its image(s), and returns
6
- * the assembled, GID-validated {@link TiledMap}.
8
+ * Assembles a validated Tiled document into a {@link TiledMap}: resolves every
9
+ * tileset (external `.tsj` or embedded) and its images, loads every image
10
+ * layer's texture, and validates the GIDs against the assembled tilesets.
7
11
  * @internal
8
12
  */
9
- export declare function loadTiledMap(source: string, context: AssetLoaderContext): Promise<TiledMap>;
13
+ export declare const loadTiledMap: (data: TiledMapData, context: TiledContext) => Promise<TiledMap>;
14
+ export {};
15
+ //# sourceMappingURL=loadTiledMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadTiledMap.d.ts","sourceRoot":"","sources":["../../src/loadTiledMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,eAAe,CAAC;AAGlE,OAAO,KAAK,EAAkB,YAAY,EAAyC,MAAM,QAAQ,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKvD,+DAA+D;AAC/D,KAAK,YAAY,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;AAyF1D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAU,MAAM,YAAY,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,QAAQ,CAQ9F,CAAC"}