@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.
- package/README.md +59 -66
- package/dist/esm/TiledLayer.d.ts +2 -1
- package/dist/esm/TiledLayer.d.ts.map +1 -0
- package/dist/esm/TiledLayer.js +106 -108
- package/dist/esm/TiledLayer.js.map +1 -1
- package/dist/esm/TiledMap.d.ts +35 -7
- package/dist/esm/TiledMap.d.ts.map +1 -0
- package/dist/esm/TiledMap.js +714 -589
- package/dist/esm/TiledMap.js.map +1 -1
- package/dist/esm/TiledObject.d.ts +7 -0
- package/dist/esm/TiledObject.d.ts.map +1 -0
- package/dist/esm/TiledObject.js +59 -51
- package/dist/esm/TiledObject.js.map +1 -1
- package/dist/esm/TiledTileset.d.ts +11 -4
- package/dist/esm/TiledTileset.d.ts.map +1 -0
- package/dist/esm/TiledTileset.js +81 -70
- package/dist/esm/TiledTileset.js.map +1 -1
- package/dist/esm/data.d.ts +25 -7
- package/dist/esm/data.d.ts.map +1 -0
- package/dist/esm/decodeLayerData.d.ts +2 -1
- package/dist/esm/decodeLayerData.d.ts.map +1 -0
- package/dist/esm/decodeLayerData.js +53 -92
- package/dist/esm/decodeLayerData.js.map +1 -1
- package/dist/esm/gid.d.ts +2 -1
- package/dist/esm/gid.d.ts.map +1 -0
- package/dist/esm/gid.js +15 -24
- package/dist/esm/gid.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +14 -12
- package/dist/esm/loadTiledMap.d.ts +11 -5
- package/dist/esm/loadTiledMap.d.ts.map +1 -0
- package/dist/esm/loadTiledMap.js +82 -91
- package/dist/esm/loadTiledMap.js.map +1 -1
- package/dist/esm/objectAlignment.d.ts +28 -0
- package/dist/esm/objectAlignment.d.ts.map +1 -0
- package/dist/esm/objectAlignment.js +79 -0
- package/dist/esm/objectAlignment.js.map +1 -0
- package/dist/esm/public.d.ts +17 -15
- package/dist/esm/public.d.ts.map +1 -0
- package/dist/esm/public.js +14 -0
- package/dist/esm/tileMapType.d.ts +31 -0
- package/dist/esm/tileMapType.d.ts.map +1 -0
- package/dist/esm/tileMapType.js +42 -0
- package/dist/esm/tileMapType.js.map +1 -0
- package/dist/esm/tiledBuildInfo.d.ts +1 -0
- package/dist/esm/tiledBuildInfo.d.ts.map +1 -0
- package/dist/esm/tiledBuildInfo.js +6 -4
- package/dist/esm/tiledBuildInfo.js.map +1 -1
- package/dist/esm/tiledExtension.d.ts +7 -6
- package/dist/esm/tiledExtension.d.ts.map +1 -0
- package/dist/esm/tiledExtension.js +23 -25
- package/dist/esm/tiledExtension.js.map +1 -1
- package/dist/esm/tiledOptions.d.ts +5 -4
- package/dist/esm/tiledOptions.d.ts.map +1 -0
- package/dist/esm/tiledOptions.js +11 -13
- package/dist/esm/tiledOptions.js.map +1 -1
- package/dist/esm/tiledSourceType.d.ts +24 -0
- package/dist/esm/tiledSourceType.d.ts.map +1 -0
- package/dist/esm/tiledSourceType.js +44 -0
- package/dist/esm/tiledSourceType.js.map +1 -0
- package/dist/esm/url.d.ts +2 -1
- package/dist/esm/url.d.ts.map +1 -0
- package/dist/esm/url.js +26 -37
- package/dist/esm/url.js.map +1 -1
- package/dist/esm/validate.d.ts +11 -10
- package/dist/esm/validate.d.ts.map +1 -0
- package/dist/esm/validate.js +485 -534
- package/dist/esm/validate.js.map +1 -1
- package/dist/esm/wangSets.d.ts +5 -4
- package/dist/esm/wangSets.d.ts.map +1 -0
- package/dist/esm/wangSets.js +90 -115
- package/dist/esm/wangSets.js.map +1 -1
- package/package.json +10 -18
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/register.d.ts +0 -1
- package/dist/esm/register.js +0 -22
- package/dist/esm/register.js.map +0 -1
- package/dist/esm/tiledMapBinding.d.ts +0 -19
- package/dist/esm/tiledMapBinding.js +0 -31
- package/dist/esm/tiledMapBinding.js.map +0 -1
- package/dist/esm/tiledRuntimeMapBinding.d.ts +0 -29
- package/dist/esm/tiledRuntimeMapBinding.js +0 -42
- package/dist/esm/tiledRuntimeMapBinding.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,11 +6,13 @@ into a generic runtime `TileMap` or a typed parsed source model.
|
|
|
6
6
|
## Installation
|
|
7
7
|
|
|
8
8
|
```sh
|
|
9
|
-
npm install @codexo/exojs @codexo/exojs-tiled
|
|
9
|
+
npm install @codexo/exojs @codexo/exojs-tilemap @codexo/exojs-tiled
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
`@codexo/exojs`
|
|
13
|
-
|
|
12
|
+
Both `@codexo/exojs` and `@codexo/exojs-tilemap` are **peer** dependencies, so install them
|
|
13
|
+
explicitly alongside the adapter. Nothing is pulled in transitively: strict package managers
|
|
14
|
+
(pnpm, Yarn PnP) will not resolve an unlisted peer, and npm's auto-install of peers still leaves
|
|
15
|
+
the versions outside your control. Keep the engine and every adapter on the same version.
|
|
14
16
|
|
|
15
17
|
If you want the generic tilemap runtime without the Tiled adapter:
|
|
16
18
|
|
|
@@ -20,10 +22,10 @@ npm install @codexo/exojs @codexo/exojs-tilemap
|
|
|
20
22
|
|
|
21
23
|
## What this package provides
|
|
22
24
|
|
|
23
|
-
- `TileMap` (re-exported from `@codexo/exojs-tilemap`) — generic runtime tilemap; the common-case result of `loader.load(
|
|
25
|
+
- `TileMap` (re-exported from `@codexo/exojs-tilemap`) — generic runtime tilemap; the common-case result of `loader.load(Asset.type('tileMap', url))`
|
|
24
26
|
- `TileMapNode` / `TileLayerNode` (re-exported from `@codexo/exojs-tilemap`) — scene nodes that render a loaded `TileMap` on WebGL2/WebGPU
|
|
25
27
|
- `TileMapView` / `TileMapBand` (re-exported from `@codexo/exojs-tilemap`) — group a map's layers into independently placeable bands for interleaving actors between tile layers; same class identity, so `instanceof` holds across both import paths (the canonical view/band docs live in the [`@codexo/exojs-tilemap` README](https://www.npmjs.com/package/@codexo/exojs-tilemap))
|
|
26
|
-
- `TiledMap` — parsed Tiled source model; advanced/diagnostic use via `loader.load(
|
|
28
|
+
- `TiledMap` — parsed Tiled source model; advanced/diagnostic use via `loader.load(Asset.type('tiledSource', url))`
|
|
27
29
|
- `TiledTileset` — parsed tileset (atlas-image or collection-of-images); holds resolved textures
|
|
28
30
|
- `TiledLayer` hierarchy — `TiledTileLayer`, `TiledObjectLayer`, `TiledImageLayer`, `TiledGroupLayer`
|
|
29
31
|
- `TiledObject` — parsed object (point, ellipse, polygon, polyline, text, tile-ref, rectangle)
|
|
@@ -43,10 +45,10 @@ import { TileMap, TileMapNode, tiledExtension } from '@codexo/exojs-tiled';
|
|
|
43
45
|
|
|
44
46
|
const app = new Application({ extensions: [tiledExtension] });
|
|
45
47
|
|
|
46
|
-
const map = await app.loader.load(
|
|
48
|
+
const map = await app.loader.load(Asset.type('tileMap', 'maps/world.tmj'));
|
|
47
49
|
// map is a @codexo/exojs-tilemap TileMap
|
|
48
50
|
|
|
49
|
-
app.
|
|
51
|
+
app.scenes.root.addChild(new TileMapNode(map));
|
|
50
52
|
```
|
|
51
53
|
|
|
52
54
|
`TileMapNode` and `TileLayerNode` are the same classes exported by `@codexo/exojs-tilemap` (see its
|
|
@@ -60,41 +62,27 @@ Load the fully resolved Tiled source model and convert it manually:
|
|
|
60
62
|
```ts
|
|
61
63
|
import { TiledMap } from '@codexo/exojs-tiled';
|
|
62
64
|
|
|
63
|
-
const source = await app.loader.load(
|
|
65
|
+
const source = await app.loader.load(Asset.type('tiledSource', 'maps/world.tmj'));
|
|
64
66
|
const map = source.toTileMap();
|
|
65
67
|
```
|
|
66
68
|
|
|
67
69
|
Both paths are semantically equivalent. The runtime binding (`TileMap`) uses the Loader-managed
|
|
68
70
|
source-model sub-load internally, so concurrent or duplicate loads are deduplicated.
|
|
69
71
|
|
|
70
|
-
## `/register` convenience entry
|
|
71
|
-
|
|
72
|
-
Importing `/register` registers `tiledExtension` (and its `tilemapExtension` dependency) in the
|
|
73
|
-
global `ExtensionRegistry`. Subsequently created Applications that use global defaults will
|
|
74
|
-
receive both extensions automatically.
|
|
75
|
-
|
|
76
|
-
```ts
|
|
77
|
-
// Side effect: registers tiledExtension in the global ExtensionRegistry.
|
|
78
|
-
import '@codexo/exojs-tiled/register';
|
|
79
|
-
|
|
80
|
-
// All named exports are also re-exported from /register:
|
|
81
|
-
import { TileMap, TiledMap, tiledExtension } from '@codexo/exojs-tiled/register';
|
|
82
|
-
```
|
|
83
|
-
|
|
84
72
|
## Extension dependency
|
|
85
73
|
|
|
86
74
|
`tiledExtension.dependencies` includes `tilemapExtension` from `@codexo/exojs-tilemap`.
|
|
87
|
-
|
|
88
|
-
|
|
75
|
+
Passing `tiledExtension` to `ApplicationOptions.extensions` is sufficient — `buildSnapshot`
|
|
76
|
+
traverses the dependency graph automatically.
|
|
89
77
|
|
|
90
78
|
## Asset loading
|
|
91
79
|
|
|
92
|
-
`loader.load(
|
|
80
|
+
`loader.load(Asset.type('tileMap', url))` (common path) and `loader.load(Asset.type('tiledSource', url))` (advanced path) both:
|
|
93
81
|
|
|
94
82
|
1. Fetch and validate the `.tmj` file.
|
|
95
83
|
2. Resolve each tileset entry (fetches external `.tsj` files via the Loader cache).
|
|
96
84
|
3. Load atlas images (`tileset.image`) and per-tile images (collection-of-images tilesets)
|
|
97
|
-
via `loader.load(
|
|
85
|
+
via `loader.load(imageUrl)` — the Loader deduplicates identical URLs.
|
|
98
86
|
4. Validate GID ranges (no duplicates, no overlaps, all layer GIDs covered) — throws
|
|
99
87
|
`TiledFormatError` on any inconsistency.
|
|
100
88
|
|
|
@@ -105,53 +93,53 @@ The runtime binding additionally calls `TiledMap.toTileMap()` to produce the gen
|
|
|
105
93
|
```ts
|
|
106
94
|
// `.tmj`/`.tsj` are recognised by extension; a format hint is only needed for
|
|
107
95
|
// Tiled data served from a generic `.json` path:
|
|
108
|
-
await loader.load(
|
|
96
|
+
await loader.load(Asset.type('tileMap', 'maps/world.json', { format: 'tiled' }));
|
|
109
97
|
```
|
|
110
98
|
|
|
111
|
-
| Option
|
|
112
|
-
|
|
99
|
+
| Option | Type | Default | Description |
|
|
100
|
+
| -------- | --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
113
101
|
| `format` | `'tiled'` | `'tiled'` | Format hint for ambiguous `.json` paths. `.tmj`/`.tsj` are recognised by extension. `'tiled'` is the only accepted value (a foreign format is a compile error). Participates in the asset identity key. |
|
|
114
102
|
|
|
115
|
-
Options are optional. Parsing is always strict: `validateTiledMapData` throws a `TiledFormatError` on any malformed
|
|
103
|
+
Options are optional. Parsing is always strict: `validateTiledMapData` throws a `TiledFormatError` on any malformed _known_ field, and silently preserves _unknown_ fields (so real-world Tiled files using features ExoJS does not model still load).
|
|
116
104
|
|
|
117
105
|
## Parsed API overview
|
|
118
106
|
|
|
119
107
|
### `TiledMap`
|
|
120
108
|
|
|
121
109
|
```ts
|
|
122
|
-
map.source
|
|
123
|
-
map.width
|
|
124
|
-
map.height
|
|
125
|
-
map.tileWidth
|
|
126
|
-
map.tileHeight
|
|
127
|
-
map.orientation
|
|
128
|
-
map.renderOrder
|
|
129
|
-
map.infinite
|
|
130
|
-
map.backgroundColor
|
|
131
|
-
map.layers
|
|
132
|
-
map.tilesets
|
|
133
|
-
map.properties
|
|
134
|
-
map.findTilesetForGid(gid)
|
|
135
|
-
map.getProperty(name)
|
|
136
|
-
map.toTileMap()
|
|
137
|
-
map.destroy()
|
|
110
|
+
map.source; // resolved URL this map was loaded from
|
|
111
|
+
map.width; // map width in tiles
|
|
112
|
+
map.height; // map height in tiles
|
|
113
|
+
map.tileWidth; // tile grid cell width in pixels
|
|
114
|
+
map.tileHeight; // tile grid cell height in pixels
|
|
115
|
+
map.orientation; // 'orthogonal' | 'isometric' | 'staggered' | 'hexagonal'
|
|
116
|
+
map.renderOrder; // 'right-down' | 'right-up' | 'left-down' | 'left-up' | undefined
|
|
117
|
+
map.infinite; // true for infinite maps (layers use chunks, not flat data)
|
|
118
|
+
map.backgroundColor; // optional CSS color string
|
|
119
|
+
map.layers; // TiledLayer[] — parsed layer hierarchy
|
|
120
|
+
map.tilesets; // TiledTileset[] — sorted by firstGid ascending
|
|
121
|
+
map.properties; // TiledPropertyData[] — custom properties
|
|
122
|
+
map.findTilesetForGid(gid); // → TiledTileset | undefined (masks flip bits automatically)
|
|
123
|
+
map.getProperty(name); // → TiledPropertyData | undefined
|
|
124
|
+
map.toTileMap(); // → TileMap — synchronous runtime conversion
|
|
125
|
+
map.destroy(); // no-op; textures are Loader-owned
|
|
138
126
|
```
|
|
139
127
|
|
|
140
128
|
### `TiledTileset`
|
|
141
129
|
|
|
142
130
|
```ts
|
|
143
|
-
tileset.firstGid
|
|
144
|
-
tileset.lastGid
|
|
145
|
-
tileset.name
|
|
146
|
-
tileset.tileWidth / tileHeight
|
|
147
|
-
tileset.tileCount / columns / spacing / margin
|
|
148
|
-
tileset.source
|
|
149
|
-
tileset.imageUrl
|
|
150
|
-
tileset.texture
|
|
151
|
-
tileset.tileTextures
|
|
152
|
-
tileset.tiles
|
|
153
|
-
tileset.getTile(localId)
|
|
154
|
-
tileset.getProperty(name)
|
|
131
|
+
tileset.firstGid; // first GID in this tileset's range (inclusive)
|
|
132
|
+
tileset.lastGid; // last GID in this tileset's range (inclusive)
|
|
133
|
+
tileset.name;
|
|
134
|
+
tileset.tileWidth / tileHeight;
|
|
135
|
+
tileset.tileCount / columns / spacing / margin;
|
|
136
|
+
tileset.source; // resolved .tsj URL (undefined for embedded tilesets)
|
|
137
|
+
tileset.imageUrl; // resolved atlas image URL (undefined for collection-of-images)
|
|
138
|
+
tileset.texture; // Texture loaded for imageUrl (Loader-owned)
|
|
139
|
+
tileset.tileTextures; // Map<localId, Texture> for collection-of-images tilesets (Loader-owned)
|
|
140
|
+
tileset.tiles; // TiledTileData[] — per-tile animation/property/collision data
|
|
141
|
+
tileset.getTile(localId); // → TiledTileData | undefined
|
|
142
|
+
tileset.getProperty(name); // → TiledPropertyData | undefined
|
|
155
143
|
```
|
|
156
144
|
|
|
157
145
|
### `TiledLayer` subclasses
|
|
@@ -159,18 +147,23 @@ tileset.getProperty(name) // → TiledPropertyData | undefined
|
|
|
159
147
|
All layers extend `TiledLayer` (base: `id`, `name`, `class`, `visible`, `opacity`, `x`, `y`,
|
|
160
148
|
`offsetX/Y`, `parallaxX/Y`, `tintColor`, `properties`, `getProperty(name)`).
|
|
161
149
|
|
|
162
|
-
| Subclass
|
|
163
|
-
|
|
164
|
-
| `TiledTileLayer`
|
|
165
|
-
| `TiledObjectLayer` | `'objectgroup'` | `drawOrder`, `objects: TiledObject[]`
|
|
166
|
-
| `TiledImageLayer`
|
|
167
|
-
| `TiledGroupLayer`
|
|
150
|
+
| Subclass | `type` | Extra fields |
|
|
151
|
+
| ------------------ | --------------- | ------------------------------------------------------------------- |
|
|
152
|
+
| `TiledTileLayer` | `'tilelayer'` | `width`, `height`, `data?: number[]` (finite), `chunks?` (infinite) |
|
|
153
|
+
| `TiledObjectLayer` | `'objectgroup'` | `drawOrder`, `objects: TiledObject[]` |
|
|
154
|
+
| `TiledImageLayer` | `'imagelayer'` | `image`, `repeatX`, `repeatY` |
|
|
155
|
+
| `TiledGroupLayer` | `'group'` | `layers: TiledLayer[]` |
|
|
168
156
|
|
|
169
157
|
### `TiledObject`
|
|
170
158
|
|
|
171
159
|
Shape discriminants: `point` (boolean), `ellipse` (boolean), `polygon`, `polyline`, `text`,
|
|
172
160
|
`gid` (tile object). If none are set, the object is a plain rectangle.
|
|
173
161
|
|
|
162
|
+
`TiledObject.type` is the object's **class**, normalised across Tiled versions: 1.9 wrote it as
|
|
163
|
+
`class` in the JSON, every other version as `type`. A file carries one of the two, so `class` wins
|
|
164
|
+
when present and non-empty. That string is also the dispatch key a
|
|
165
|
+
[`MapObjectSpawner`](https://www.npmjs.com/package/@codexo/exojs-tilemap) sees.
|
|
166
|
+
|
|
174
167
|
## Texture ownership
|
|
175
168
|
|
|
176
169
|
Textures for tileset images are loaded via the Loader and remain in the Loader cache.
|
|
@@ -180,8 +173,8 @@ The Loader handles texture lifecycle (including deduplication across maps that s
|
|
|
180
173
|
## Core compatibility
|
|
181
174
|
|
|
182
175
|
| `@codexo/exojs-tiled` | `@codexo/exojs` |
|
|
183
|
-
|
|
184
|
-
| 0.13.x
|
|
176
|
+
| --------------------- | --------------- |
|
|
177
|
+
| 0.13.x | 0.13.x |
|
|
185
178
|
|
|
186
179
|
## Links
|
|
187
180
|
|
package/dist/esm/TiledLayer.d.ts
CHANGED
|
@@ -69,4 +69,5 @@ export declare class TiledGroupLayer extends TiledLayer {
|
|
|
69
69
|
constructor(data: TiledGroupLayerData);
|
|
70
70
|
}
|
|
71
71
|
/** Constructs the appropriate {@link TiledLayer} subclass for `data.type`. */
|
|
72
|
-
export declare
|
|
72
|
+
export declare const createTiledLayer: (data: TiledLayerData) => TiledLayer;
|
|
73
|
+
//# sourceMappingURL=TiledLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TiledLayer.d.ts","sourceRoot":"","sources":["../../src/TiledLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,2GAA2G;AAC3G,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEpD;;;;;;;GAOG;AACH,8BAAsB,UAAU;IAC9B,kBAAyB,IAAI,EAAE,cAAc,CAAC;IAE9C,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAgB,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAEzD,SAAS,aAAa,IAAI,EAAE,kBAAkB;IAgB9C,0CAA0C;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAGhE;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAyB,IAAI,EAAG,WAAW,CAAU;IAErD,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACrD,SAAgB,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAC;gBAE5C,IAAI,EAAE,kBAAkB;CAO5C;AAED,4DAA4D;AAC5D,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,SAAyB,IAAI,EAAG,aAAa,CAAU;IAEvD,SAAgB,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,SAAgB,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;gBAE7B,IAAI,EAAE,oBAAoB;CAK9C;AAED;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAyB,IAAI,EAAG,YAAY,CAAU;IAEtD,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAEd,IAAI,EAAE,mBAAmB;CAM7C;AAED,mEAAmE;AACnE,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAyB,IAAI,EAAG,OAAO,CAAU;IAEjD,SAAgB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;gBAE3B,IAAI,EAAE,mBAAmB;CAI7C;AAED,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,GAAI,MAAM,cAAc,KAAG,UAWvD,CAAC"}
|
package/dist/esm/TiledLayer.js
CHANGED
|
@@ -1,117 +1,115 @@
|
|
|
1
|
-
import { TiledObject } from
|
|
1
|
+
import { TiledObject } from "./TiledObject.js";
|
|
2
2
|
|
|
3
|
+
//#region src/TiledLayer.ts
|
|
3
4
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
5
|
+
* Base class for the four parsed Tiled layer types. Holds the fields shared
|
|
6
|
+
* by every layer (`tilelayer`, `objectgroup`, `imagelayer`, `group`).
|
|
7
|
+
*
|
|
8
|
+
* Use {@link TiledLayer.type} (or `instanceof`) to discriminate between
|
|
9
|
+
* {@link TiledTileLayer}, {@link TiledObjectLayer}, {@link TiledImageLayer},
|
|
10
|
+
* and {@link TiledGroupLayer}.
|
|
11
|
+
*/
|
|
12
|
+
var TiledLayer = class {
|
|
13
|
+
id;
|
|
14
|
+
name;
|
|
15
|
+
class;
|
|
16
|
+
visible;
|
|
17
|
+
opacity;
|
|
18
|
+
x;
|
|
19
|
+
y;
|
|
20
|
+
offsetX;
|
|
21
|
+
offsetY;
|
|
22
|
+
parallaxX;
|
|
23
|
+
parallaxY;
|
|
24
|
+
tintColor;
|
|
25
|
+
properties;
|
|
26
|
+
constructor(data) {
|
|
27
|
+
this.id = data.id;
|
|
28
|
+
this.name = data.name;
|
|
29
|
+
this.class = data.class ?? "";
|
|
30
|
+
this.visible = data.visible;
|
|
31
|
+
this.opacity = data.opacity;
|
|
32
|
+
this.x = data.x;
|
|
33
|
+
this.y = data.y;
|
|
34
|
+
this.offsetX = data.offsetx ?? 0;
|
|
35
|
+
this.offsetY = data.offsety ?? 0;
|
|
36
|
+
this.parallaxX = data.parallaxx ?? 1;
|
|
37
|
+
this.parallaxY = data.parallaxy ?? 1;
|
|
38
|
+
this.tintColor = data.tintcolor;
|
|
39
|
+
this.properties = data.properties ?? [];
|
|
40
|
+
}
|
|
41
|
+
/** Looks up a custom property by name. */
|
|
42
|
+
getProperty(name) {
|
|
43
|
+
return this.properties.find((property) => property.name === name);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
45
46
|
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
47
|
+
* A tile layer. On a finite map, {@link data} holds the flat row-major array
|
|
48
|
+
* of GIDs (`width * height` entries). On an infinite map, {@link chunks}
|
|
49
|
+
* holds the sparse list of tile chunks instead; exactly one of the two is
|
|
50
|
+
* defined, matching the owning {@link TiledMap}'s `infinite` flag.
|
|
51
|
+
*/
|
|
52
|
+
var TiledTileLayer = class extends TiledLayer {
|
|
53
|
+
type = "tilelayer";
|
|
54
|
+
width;
|
|
55
|
+
height;
|
|
56
|
+
data;
|
|
57
|
+
chunks;
|
|
58
|
+
constructor(data) {
|
|
59
|
+
super(data);
|
|
60
|
+
this.width = data.width;
|
|
61
|
+
this.height = data.height;
|
|
62
|
+
this.data = data.data;
|
|
63
|
+
this.chunks = data.chunks;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
65
66
|
/** An object layer: a flat list of {@link TiledObject}s. */
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
67
|
+
var TiledObjectLayer = class extends TiledLayer {
|
|
68
|
+
type = "objectgroup";
|
|
69
|
+
drawOrder;
|
|
70
|
+
objects;
|
|
71
|
+
constructor(data) {
|
|
72
|
+
super(data);
|
|
73
|
+
this.drawOrder = data.draworder ?? "topdown";
|
|
74
|
+
this.objects = data.objects.map((object) => new TiledObject(object));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
76
77
|
/**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
78
|
+
* An image layer. {@link image} is the path to the layer's image exactly as
|
|
79
|
+
* written in the Tiled JSON (relative to the map's location); resolving it
|
|
80
|
+
* against the owning {@link TiledMap}'s `source` is left to the consumer.
|
|
81
|
+
*/
|
|
82
|
+
var TiledImageLayer = class extends TiledLayer {
|
|
83
|
+
type = "imagelayer";
|
|
84
|
+
image;
|
|
85
|
+
repeatX;
|
|
86
|
+
repeatY;
|
|
87
|
+
constructor(data) {
|
|
88
|
+
super(data);
|
|
89
|
+
this.image = data.image;
|
|
90
|
+
this.repeatX = data.repeatx ?? false;
|
|
91
|
+
this.repeatY = data.repeaty ?? false;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
93
94
|
/** A group layer, recursively containing further parsed layers. */
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
95
|
+
var TiledGroupLayer = class extends TiledLayer {
|
|
96
|
+
type = "group";
|
|
97
|
+
layers;
|
|
98
|
+
constructor(data) {
|
|
99
|
+
super(data);
|
|
100
|
+
this.layers = data.layers.map(createTiledLayer);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
102
103
|
/** Constructs the appropriate {@link TiledLayer} subclass for `data.type`. */
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
case 'group':
|
|
112
|
-
return new TiledGroupLayer(data);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
104
|
+
const createTiledLayer = (data) => {
|
|
105
|
+
switch (data.type) {
|
|
106
|
+
case "tilelayer": return new TiledTileLayer(data);
|
|
107
|
+
case "objectgroup": return new TiledObjectLayer(data);
|
|
108
|
+
case "imagelayer": return new TiledImageLayer(data);
|
|
109
|
+
case "group": return new TiledGroupLayer(data);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
115
112
|
|
|
113
|
+
//#endregion
|
|
116
114
|
export { TiledGroupLayer, TiledImageLayer, TiledLayer, TiledObjectLayer, TiledTileLayer, createTiledLayer };
|
|
117
|
-
//# sourceMappingURL=TiledLayer.js.map
|
|
115
|
+
//# sourceMappingURL=TiledLayer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TiledLayer.js","sources":["
|
|
1
|
+
{"version":3,"file":"TiledLayer.js","names":[],"sources":["../../src/TiledLayer.ts"],"sourcesContent":["import type {\n TiledChunkData,\n TiledGroupLayerData,\n TiledImageLayerData,\n TiledLayerData,\n TiledLayerDataBase,\n TiledObjectLayerData,\n TiledPropertyData,\n TiledTileLayerData,\n} from './data';\nimport { TiledObject } from './TiledObject';\n\n/** Discriminant shared by every {@link TiledLayer} subclass, mirroring {@link TiledLayerData}'s `type`. */\nexport type TiledLayerType = TiledLayerData['type'];\n\n/**\n * Base class for the four parsed Tiled layer types. Holds the fields shared\n * by every layer (`tilelayer`, `objectgroup`, `imagelayer`, `group`).\n *\n * Use {@link TiledLayer.type} (or `instanceof`) to discriminate between\n * {@link TiledTileLayer}, {@link TiledObjectLayer}, {@link TiledImageLayer},\n * and {@link TiledGroupLayer}.\n */\nexport abstract class TiledLayer {\n public abstract readonly type: TiledLayerType;\n\n public readonly id: number;\n public readonly name: string;\n public readonly class: string;\n public readonly visible: boolean;\n public readonly opacity: number;\n public readonly x: number;\n public readonly y: number;\n public readonly offsetX: number;\n public readonly offsetY: number;\n public readonly parallaxX: number;\n public readonly parallaxY: number;\n public readonly tintColor?: string | undefined;\n public readonly properties: readonly TiledPropertyData[];\n\n protected constructor(data: TiledLayerDataBase) {\n this.id = data.id;\n this.name = data.name;\n this.class = data.class ?? '';\n this.visible = data.visible;\n this.opacity = data.opacity;\n this.x = data.x;\n this.y = data.y;\n this.offsetX = data.offsetx ?? 0;\n this.offsetY = data.offsety ?? 0;\n this.parallaxX = data.parallaxx ?? 1;\n this.parallaxY = data.parallaxy ?? 1;\n this.tintColor = data.tintcolor;\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\n/**\n * A tile layer. On a finite map, {@link data} holds the flat row-major array\n * of GIDs (`width * height` entries). On an infinite map, {@link chunks}\n * holds the sparse list of tile chunks instead; exactly one of the two is\n * defined, matching the owning {@link TiledMap}'s `infinite` flag.\n */\nexport class TiledTileLayer extends TiledLayer {\n public override readonly type = 'tilelayer' as const;\n\n public readonly width: number;\n public readonly height: number;\n public readonly data?: readonly number[] | undefined;\n public readonly chunks?: readonly TiledChunkData[] | undefined;\n\n public constructor(data: TiledTileLayerData) {\n super(data);\n this.width = data.width;\n this.height = data.height;\n this.data = data.data;\n this.chunks = data.chunks;\n }\n}\n\n/** An object layer: a flat list of {@link TiledObject}s. */\nexport class TiledObjectLayer extends TiledLayer {\n public override readonly type = 'objectgroup' as const;\n\n public readonly drawOrder: NonNullable<TiledObjectLayerData['draworder']>;\n public readonly objects: readonly TiledObject[];\n\n public constructor(data: TiledObjectLayerData) {\n super(data);\n this.drawOrder = data.draworder ?? 'topdown';\n this.objects = data.objects.map(object => new TiledObject(object));\n }\n}\n\n/**\n * An image layer. {@link image} is the path to the layer's image exactly as\n * written in the Tiled JSON (relative to the map's location); resolving it\n * against the owning {@link TiledMap}'s `source` is left to the consumer.\n */\nexport class TiledImageLayer extends TiledLayer {\n public override readonly type = 'imagelayer' as const;\n\n public readonly image: string;\n public readonly repeatX: boolean;\n public readonly repeatY: boolean;\n\n public constructor(data: TiledImageLayerData) {\n super(data);\n this.image = data.image;\n this.repeatX = data.repeatx ?? false;\n this.repeatY = data.repeaty ?? false;\n }\n}\n\n/** A group layer, recursively containing further parsed layers. */\nexport class TiledGroupLayer extends TiledLayer {\n public override readonly type = 'group' as const;\n\n public readonly layers: readonly TiledLayer[];\n\n public constructor(data: TiledGroupLayerData) {\n super(data);\n this.layers = data.layers.map(createTiledLayer);\n }\n}\n\n/** Constructs the appropriate {@link TiledLayer} subclass for `data.type`. */\nexport const createTiledLayer = (data: TiledLayerData): TiledLayer => {\n switch (data.type) {\n case 'tilelayer':\n return new TiledTileLayer(data);\n case 'objectgroup':\n return new TiledObjectLayer(data);\n case 'imagelayer':\n return new TiledImageLayer(data);\n case 'group':\n return new TiledGroupLayer(data);\n }\n};\n"],"mappings":";;;;;;;;;;;AAuBA,IAAsB,aAAtB,MAAiC;CAG/B,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,AAAU,YAAY,MAA0B;EAC9C,KAAK,KAAK,KAAK;EACf,KAAK,OAAO,KAAK;EACjB,KAAK,QAAQ,KAAK,SAAS;EAC3B,KAAK,UAAU,KAAK;EACpB,KAAK,UAAU,KAAK;EACpB,KAAK,IAAI,KAAK;EACd,KAAK,IAAI,KAAK;EACd,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,YAAY,KAAK,aAAa;EACnC,KAAK,YAAY,KAAK,aAAa;EACnC,KAAK,YAAY,KAAK;EACtB,KAAK,aAAa,KAAK,cAAc,CAAC;CACxC;;CAGA,AAAO,YAAY,MAA6C;EAC9D,OAAO,KAAK,WAAW,MAAK,aAAY,SAAS,SAAS,IAAI;CAChE;AACF;;;;;;;AAQA,IAAa,iBAAb,cAAoC,WAAW;CAC7C,AAAyB,OAAO;CAEhC,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAA0B;EAC3C,MAAM,IAAI;EACV,KAAK,QAAQ,KAAK;EAClB,KAAK,SAAS,KAAK;EACnB,KAAK,OAAO,KAAK;EACjB,KAAK,SAAS,KAAK;CACrB;AACF;;AAGA,IAAa,mBAAb,cAAsC,WAAW;CAC/C,AAAyB,OAAO;CAEhC,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAA4B;EAC7C,MAAM,IAAI;EACV,KAAK,YAAY,KAAK,aAAa;EACnC,KAAK,UAAU,KAAK,QAAQ,KAAI,WAAU,IAAI,YAAY,MAAM,CAAC;CACnE;AACF;;;;;;AAOA,IAAa,kBAAb,cAAqC,WAAW;CAC9C,AAAyB,OAAO;CAEhC,AAAgB;CAChB,AAAgB;CAChB,AAAgB;CAEhB,AAAO,YAAY,MAA2B;EAC5C,MAAM,IAAI;EACV,KAAK,QAAQ,KAAK;EAClB,KAAK,UAAU,KAAK,WAAW;EAC/B,KAAK,UAAU,KAAK,WAAW;CACjC;AACF;;AAGA,IAAa,kBAAb,cAAqC,WAAW;CAC9C,AAAyB,OAAO;CAEhC,AAAgB;CAEhB,AAAO,YAAY,MAA2B;EAC5C,MAAM,IAAI;EACV,KAAK,SAAS,KAAK,OAAO,IAAI,gBAAgB;CAChD;AACF;;AAGA,MAAa,oBAAoB,SAAqC;CACpE,QAAQ,KAAK,MAAb;EACE,KAAK,aACH,OAAO,IAAI,eAAe,IAAI;EAChC,KAAK,eACH,OAAO,IAAI,iBAAiB,IAAI;EAClC,KAAK,cACH,OAAO,IAAI,gBAAgB,IAAI;EACjC,KAAK,SACH,OAAO,IAAI,gBAAgB,IAAI;CACnC;AACF"}
|
package/dist/esm/TiledMap.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Texture } from '@codexo/exojs';
|
|
2
|
+
import type { ChunkSource } from '@codexo/exojs-tilemap';
|
|
2
3
|
import { TileMap } from '@codexo/exojs-tilemap';
|
|
3
4
|
import type { TiledMapData, TiledOrientation, TiledPropertyData, TiledRenderOrder } from './data';
|
|
4
5
|
import { type TiledLayer } from './TiledLayer';
|
|
@@ -39,6 +40,7 @@ export declare class TiledMap {
|
|
|
39
40
|
readonly tilesets: readonly TiledTileset[];
|
|
40
41
|
readonly properties: readonly TiledPropertyData[];
|
|
41
42
|
private readonly _imageTextures;
|
|
43
|
+
private readonly _chunkSources;
|
|
42
44
|
constructor(source: string, data: TiledMapData, tilesets: readonly TiledTileset[], imageTextures?: ReadonlyMap<number, Texture>);
|
|
43
45
|
/**
|
|
44
46
|
* Returns the tileset that owns `gid`, or `undefined` if `gid` is `0`
|
|
@@ -55,17 +57,42 @@ export declare class TiledMap {
|
|
|
55
57
|
* Convert this parsed Tiled source model into a format-independent runtime
|
|
56
58
|
* {@link TileMap} from `@codexo/exojs-tilemap`.
|
|
57
59
|
*
|
|
58
|
-
* Only
|
|
59
|
-
*
|
|
60
|
-
* {@link TiledFormatError} rather than silently producing wrong
|
|
61
|
-
* or empty geometry. Tile
|
|
62
|
-
*
|
|
63
|
-
* `
|
|
60
|
+
* Only orthogonal maps with atlas tilesets are supported. A non-orthogonal
|
|
61
|
+
* map, a collection-of-images tileset, or a tileset with no image at all
|
|
62
|
+
* throws {@link TiledFormatError} rather than silently producing wrong
|
|
63
|
+
* (misplaced) or empty geometry. Tile
|
|
64
|
+
* layers become renderable `TileLayer`s, object groups become data-only
|
|
65
|
+
* `ObjectLayer`s, and image layers become data-only `ImageLayer`s; group
|
|
66
|
+
* layer children are flattened in document order.
|
|
64
67
|
*
|
|
65
|
-
* The
|
|
68
|
+
* The runtime map has no group node, so each group's own style is baked into
|
|
69
|
+
* its children as Tiled composes it: `visible` ANDs, `opacity` and the
|
|
70
|
+
* parallax factors multiply, the offsets add, and tint colours multiply per
|
|
71
|
+
* colour channel. Object layers take the visibility, opacity and offset the
|
|
72
|
+
* same way - `ObjectLayer` carries no parallax or tint of its own, so a
|
|
73
|
+
* group's contribution to those two is dropped for object layers only.
|
|
74
|
+
*
|
|
75
|
+
* An `infinite: true` (chunked) tile layer converts to an **unbounded**
|
|
76
|
+
* runtime `TileLayer` with no tiles populated eagerly - its data streams in
|
|
77
|
+
* on demand via the {@link ChunkSource} built for it, retrievable with
|
|
78
|
+
* {@link getChunkSource} after this call returns.
|
|
79
|
+
*
|
|
80
|
+
* The returned `TileMap` does **not** own the tileset textures - they remain
|
|
66
81
|
* in the Loader cache. Destroying the returned map does not unload textures.
|
|
67
82
|
*/
|
|
68
83
|
toTileMap(): TileMap;
|
|
84
|
+
/**
|
|
85
|
+
* The {@link ChunkSource} built for the chunked tile layer with the given
|
|
86
|
+
* Tiled layer `id`, as a side effect of the most recent {@link toTileMap}
|
|
87
|
+
* call. Returns `undefined` if `toTileMap()` hasn't been called yet, if
|
|
88
|
+
* `layerId` doesn't name a tile layer, or if that layer is finite
|
|
89
|
+
* (`data`-based) rather than chunked (`infinite`-map `chunks`-based).
|
|
90
|
+
*
|
|
91
|
+
* Call {@link toTileMap} before calling this - it is what builds the
|
|
92
|
+
* providers this method reads from.
|
|
93
|
+
* @advanced
|
|
94
|
+
*/
|
|
95
|
+
getChunkSource(layerId: number): ChunkSource | undefined;
|
|
69
96
|
/**
|
|
70
97
|
* Releases this map's reference to its parsed source. Tileset textures are
|
|
71
98
|
* Loader-owned and may be shared with other maps; this does NOT destroy
|
|
@@ -73,3 +100,4 @@ export declare class TiledMap {
|
|
|
73
100
|
*/
|
|
74
101
|
destroy(): void;
|
|
75
102
|
}
|
|
103
|
+
//# sourceMappingURL=TiledMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TiledMap.d.ts","sourceRoot":"","sources":["../../src/TiledMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAEV,WAAW,EAUZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgD,OAAO,EAA6B,MAAM,uBAAuB,CAAC;AAEzH,OAAO,KAAK,EAGV,YAAY,EAEZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAsD,KAAK,UAAU,EAAoC,MAAM,cAAc,CAAC;AAErI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD;;;;;;;;;;;;GAYG;AACH,qBAAa,QAAQ;IACnB,6CAA6C;IAC7C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,SAAgB,IAAI,EAAE,YAAY,CAAC;IAEnC,SAAgB,WAAW,EAAE,gBAAgB,CAAC;IAC9C,SAAgB,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC3D,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,0BAA0B;IAC1B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,2BAA2B;IAC3B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,sCAAsC;IACtC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,uCAAuC;IACvC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,QAAQ,EAAE,OAAO,CAAC;IAClC,SAAgB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,SAAgB,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9C,oFAAoF;IACpF,SAAgB,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClD,SAAgB,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAEzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAE7C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,EAAE,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAa;IAoBjJ;;;;;;;OAOG;IACI,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAgB/D,0CAA0C;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI/D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,SAAS,IAAI,OAAO;IA6J3B;;;;;;;;;;OAUG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/D;;;;OAIG;IACI,OAAO,IAAI,IAAI;CAGvB"}
|