@@ -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