12
12
from pytiled_parser .parsers .json .properties import serialize as serialize_properties
13
13
from pytiled_parser .parsers .json .wang_set import RawWangSet
14
14
from pytiled_parser .parsers .json .wang_set import parse as parse_wangset
15
+ from pytiled_parser .parsers .json .wang_set import serialize as serialize_wangset
15
16
from pytiled_parser .tileset import Frame , Grid , Tile , Tileset , Transformations
16
- from pytiled_parser .util import parse_color
17
+ from pytiled_parser .util import parse_color , serialize_color
17
18
18
19
RawFrame = TypedDict ("RawFrame" , {"duration" : int , "tileid" : int })
19
20
RawFrame .__doc__ = """
@@ -402,3 +403,75 @@ def parse(
402
403
tileset .fill_mode = raw_tileset ["fillmode" ]
403
404
404
405
return tileset
406
+
407
+
408
+ def serialize (tileset : Tileset ) -> RawTileSet :
409
+ raw_tileset : RawTileSet = {
410
+ "name" : tileset .name ,
411
+ "tilecount" : tileset .tile_count ,
412
+ "tilewidth" : tileset .tile_width ,
413
+ "tileheight" : tileset .tile_height ,
414
+ "spacing" : tileset .spacing ,
415
+ "margin" : tileset .margin ,
416
+ "columns" : tileset .columns
417
+ }
418
+
419
+ if tileset .version is not None :
420
+ raw_tileset ["version" ] = tileset .version
421
+
422
+ if tileset .tiled_version is not None :
423
+ raw_tileset ["tiledversion" ] = tileset .tiled_version
424
+
425
+ if tileset .image is not None :
426
+ # TODO: This is an absolute path, need to handle relative paths for serialization
427
+ raw_tileset ["image" ] = str (tileset .image )
428
+
429
+ if tileset .image_width is not None :
430
+ raw_tileset ["imagewidth" ] = tileset .image_width
431
+
432
+ if tileset .image_height is not None :
433
+ raw_tileset ["imageheight" ] = tileset .image_height
434
+
435
+ if tileset .alignment is not None :
436
+ raw_tileset ["objectalignment" ] = tileset .alignment
437
+
438
+ if tileset .background_color is not None :
439
+ raw_tileset ["backgroundcolor" ] = serialize_color (tileset .background_color )
440
+
441
+ if tileset .tile_offset is not None :
442
+ raw_tileset ["tileoffset" ] = _serialize_tile_offset (tileset .tile_offset )
443
+
444
+ if tileset .transparent_color is not None :
445
+ raw_tileset ["transparentcolor" ] = serialize_color (tileset .transparent_color )
446
+
447
+ if tileset .grid is not None :
448
+ raw_tileset ["grid" ] = _serialize_grid (tileset .grid )
449
+
450
+ if tileset .properties is not None :
451
+ raw_tileset ["properties" ] = serialize_properties (tileset .properties )
452
+
453
+ if tileset .tiles is not None :
454
+ tiles = []
455
+ f
8000
or tile_id , tile in tileset .tiles .items ():
456
+ tiles .append (_serialize_tile (tile ))
457
+ raw_tileset ["tiles" ] = tiles
458
+
459
+ if tileset .transformations is not None :
460
+ raw_tileset ["transformations" ] = _serialize_transformations (tileset .transformations )
461
+
462
+ if tileset .class_ is not None :
463
+ raw_tileset ["class" ] = tileset .class_
464
+
465
+ if tileset .tile_render_size != "tile" :
466
+ raw_tileset ["tilerendersize" ] = tileset .tile_render_size
467
+
468
+ if tileset .fill_mode != "stretch" :
469
+ raw_tileset ["fillmode" ] = tileset .fill_mode
470
+
471
+ if tileset .wang_sets is not None :
472
+ raw_wang_sets = []
473
+ for wang_set in tileset .wang_sets :
474
+ raw_wang_sets .append (serialize_wangset (wang_set ))
475
+ raw_tileset ["wangsets" ] = raw_wang_sets
476
+
477
+ return raw_tileset
0 commit comments