Skip to content

Commit 63fb292

Browse files
committed
Keep named tiles after optimisation
1 parent 7c5cb8e commit 63fb292

File tree

9 files changed

+116
-628
lines changed

9 files changed

+116
-628
lines changed

dist/Optimizer.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export declare class Optimizer {
3030
} | undefined, outputPath: string);
3131
optimize(): Promise<ITiledMap>;
3232
private optimizeLayers;
33+
private optimizeNamedTiles;
3334
private generateNextTileset;
3435
private generateNewTilesetBuffer;
3536
private optimizeNewTile;

dist/Optimizer.js

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class Optimizer {
4848
console.log("Start tiles optimization...");
4949
}
5050
await this.optimizeLayers(this.optimizedMap.layers);
51+
await this.optimizeNamedTiles();
5152
await this.currentTilesetRendering();
5253
this.optimizedMap.tilesets = [];
5354
for (const currentTileset of this.optimizedTilesets) {
@@ -83,11 +84,33 @@ class Optimizer {
8384
continue;
8485
}
8586
await this.checkCurrentTileset();
86-
const newTileId = this.optimizeNewTile(Number(tileId));
87+
const newTileId = await this.optimizeNewTile(Number(tileId));
8788
layer.data[y] = newTileId;
8889
}
8990
}
9091
}
92+
async optimizeNamedTiles() {
93+
for (const tileset of this.tilesetsBuffers.keys()) {
94+
if (!tileset.tiles) {
95+
continue;
96+
}
97+
if (!tileset.firstgid) {
98+
throw new Error(`firstgid property is undefined on ${tileset.name} tileset`);
99+
}
100+
for (const tile of tileset.tiles) {
101+
const tileId = tileset.firstgid + tile.id;
102+
if (this.optimizedTiles.has(tileId)) {
103+
continue;
104+
}
105+
if (!tile.properties) {
106+
continue;
107+
}
108+
if (tile.properties.find((property) => property.name === "name")) {
109+
await this.optimizeNewTile(tileId);
110+
}
111+
}
112+
}
113+
}
91114
generateNextTileset() {
92115
if (this.logLevel === libGuards_1.LogLevel.VERBOSE) {
93116
console.log("Generate a new tileset data");
@@ -116,7 +139,7 @@ class Optimizer {
116139
});
117140
return await newFile.pack().pipe((0, sharp_1.default)()).toBuffer();
118141
}
119-
optimizeNewTile(tileId) {
142+
async optimizeNewTile(tileId) {
120143
if (this.logLevel === libGuards_1.LogLevel.VERBOSE) {
121144
console.log(`${tileId} tile is optimizing...`);
122145
}
@@ -187,11 +210,23 @@ class Optimizer {
187210
const newTileId = this.optimizedTiles.size + 1;
188211
this.optimizedTiles.set(unflippedTileId, newTileId);
189212
let newTileData = undefined;
190-
this.currentExtractedTiles.push(this.extractTile(oldTileset, unflippedTileId));
191213
if (!oldTileset.firstgid) {
192214
throw new Error(`firstgid property is undefined on ${oldTileset.name} tileset`);
193215
}
194-
const oldTileIdInTileset = unflippedTileId - oldTileset.firstgid;
216+
const oldFirstgid = oldTileset.firstgid;
217+
const oldTileIdInTileset = unflippedTileId - oldFirstgid;
218+
let tileData = undefined;
219+
if (oldTileset.tiles) {
220+
tileData = oldTileset.tiles.find((tile) => tile.id === oldTileIdInTileset);
221+
if (tileData && tileData.animation) {
222+
const animationTilesNotAnalyzeYet = tileData.animation.filter((animation) => !this.optimizedTiles.has(oldFirstgid + animation.tileid));
223+
if (animationTilesNotAnalyzeYet.length + this.currentExtractedTiles.length >=
224+
this.tilesetMaxTileCount) {
225+
await this.currentTilesetRendering();
226+
}
227+
}
228+
}
229+
this.currentExtractedTiles.push(this.extractTile(oldTileset, unflippedTileId));
195230
const newTileIdInTileset = this.currentExtractedTiles.length - 1;
196231
if (oldTileset.properties) {
197232
newTileData = {
@@ -203,7 +238,6 @@ class Optimizer {
203238
if (!oldTileset.tiles) {
204239
return newTileId + minBitId;
205240
}
206-
const tileData = oldTileset.tiles.find((tile) => tile.id === oldTileIdInTileset);
207241
if (!tileData) {
208242
return newTileId + minBitId;
209243
}
@@ -228,10 +262,7 @@ class Optimizer {
228262
});
229263
continue;
230264
}
231-
const newAnimationId = this.optimizeNewTile(oldTileset.firstgid + frame.tileid);
232-
if (!newAnimationId) {
233-
throw new Error("Oops! An anmiation was beetween 2 tilesets, please modify the tileset output sizes");
234-
}
265+
this.optimizeNewTile(oldFirstgid + frame.tileid);
235266
newTileData.animation.push({
236267
duration: frame.duration,
237268
tileid: this.currentExtractedTiles.length - 1,

0 commit comments

Comments
 (0)