diff --git a/pytiled_parser/tileset.py b/pytiled_parser/tileset.py index bce92a6..d2bf9a4 100644 --- a/pytiled_parser/tileset.py +++ b/pytiled_parser/tileset.py @@ -39,7 +39,7 @@ class Terrain(NamedTuple): name: str tile: int - properties: properties_.Properties = {} + properties: Optional[properties_.Properties] = None @attr.s(auto_attribs=True) @@ -139,6 +139,7 @@ class TileSet: """ name: str + type: str tile_width: int tile_height: int @@ -155,7 +156,6 @@ class TileSet: image_width: Optional[int] = None image_height: Optional[int] = None - type: Optional[str] = None firstgid: Optional[int] = None background_color: Optional[Color] = None tile_offset: Optional[OrderedPair] = None @@ -372,6 +372,7 @@ def cast(raw_tileset: RawTileSet) -> TileSet: margin=raw_tileset["margin"], version=raw_tileset["version"], tiled_version=raw_tileset["tiledversion"], + type=raw_tileset["type"], ) if raw_tileset.get("image") is not None: @@ -395,9 +396,6 @@ def cast(raw_tileset: RawTileSet) -> TileSet: if raw_tileset.get("transparentcolor") is not None: tileset.transparent_color = raw_tileset["transparentcolor"] - if raw_tileset.get("type") is not None: - tileset.type = raw_tileset["type"] - if raw_tileset.get("grid") is not None: tileset.grid = _cast_grid(raw_tileset["grid"]) diff --git a/tests/test_data/tilesets/individual_images/expected.py b/tests/test_data/tilesets/individual_images/expected.py index 48487cb..54625d2 100644 --- a/tests/test_data/tilesets/individual_images/expected.py +++ b/tests/test_data/tilesets/individual_images/expected.py @@ -13,6 +13,7 @@ EXPECTED = tileset.TileSet( tile_width=32, version=1.2, type="tileset", + grid=tileset.Grid(orientation="orthogonal", width=1, height=1), tiles=[ tileset.Tile( animation=[ @@ -79,7 +80,6 @@ EXPECTED = tileset.TileSet( image=Path("../../images/tile_04.png"), image_height=32, image_width=32, - properties={"color property": common_types.Color("#ff5500ff")}, type="tile", ), ], diff --git a/tests/test_data/tilesets/individual_images/tileset.json b/tests/test_data/tilesets/individual_images/tileset.json index 7e27721..a22186e 100644 --- a/tests/test_data/tilesets/individual_images/tileset.json +++ b/tests/test_data/tilesets/individual_images/tileset.json @@ -115,15 +115,9 @@ "image":"..\/..\/images\/tile_04.png", "imageheight":32, "imagewidth":32, - "properties":[ - { - "name":"color property", - "type":"color", - "value":"#ff5500ff" - }], "type":"tile" }], "tilewidth":32, "type":"tileset", "version":1.2 -} \ No newline at end of file +} diff --git a/tests/test_data/tilesets/terrain/expected.py b/tests/test_data/tilesets/terrain/expected.py new file mode 100644 index 0000000..89051ae --- /dev/null +++ b/tests/test_data/tilesets/terrain/expected.py @@ -0,0 +1,271 @@ +from pathlib import Path + +from pytiled_parser import common_types, layer, tileset + +EXPECTED = tileset.TileSet( + columns=8, + margin=1, + spacing=1, + name="tileset", + image=Path("../../images/tmw_desert_spacing.png"), + image_height=199, + image_width=265, + tile_count=48, + tiled_version="1.3.5", + tile_height=32, + tile_width=32, + version=1.2, + type="tileset", + terrain_types=[ + tileset.Terrain( + name="Sand", + tile=29, + properties={"terrain property": "test terrain property"}, + ), + tileset.Terrain(name="Cobblestone", tile=29), + tileset.Terrain(name="Pavement", tile=29), + tileset.Terrain(name="Dirt", tile=29), + ], + tiles=[ + tileset.Tile( + id=0, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=0, bottom_right=1 + ), + ), + tileset.Tile( + id=1, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=1, bottom_right=1 + ), + ), + tileset.Tile( + id=2, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=1, bottom_right=0 + ), + ), + tileset.Tile( + id=3, + terrain=tileset.TileTerrain( + top_left=3, top_right=3, bottom_left=3, bottom_right=0 + ), + ), + tileset.Tile( + id=4, + terrain=tileset.TileTerrain( + top_left=3, top_right=3, bottom_left=0, bottom_right=3 + ), + ), + tileset.Tile( + id=5, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=0, bottom_right=3 + ), + ), + tileset.Tile( + id=6, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=3, bottom_right=3 + ), + ), + tileset.Tile( + id=7, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=3, bottom_right=0 + ), + ), + tileset.Tile( + id=8, + terrain=tileset.TileTerrain( + top_left=0, top_right=1, bottom_left=0, bottom_right=1 + ), + ), + tileset.Tile( + id=9, + terrain=tileset.TileTerrain( + top_left=1, top_right=1, bottom_left=1, bottom_right=1 + ), + ), + tileset.Tile( + id=10, + terrain=tileset.TileTerrain( + top_left=1, top_right=0, bottom_left=1, bottom_right=0 + ), + ), + tileset.Tile( + id=11, + terrain=tileset.TileTerrain( + top_left=3, top_right=0, bottom_left=3, bottom_right=3 + ), + ), + tileset.Tile( + id=12, + terrain=tileset.TileTerrain( + top_left=0, top_right=3, bottom_left=3, bottom_right=3 + ), + ), + tileset.Tile( + id=13, + terrain=tileset.TileTerrain( + top_left=0, top_right=3, bottom_left=0, bottom_right=3 + ), + ), + tileset.Tile( + id=14, + terrain=tileset.TileTerrain( + top_left=3, top_right=3, bottom_left=3, bottom_right=3 + ), + ), + tileset.Tile( + id=15, + terrain=tileset.TileTerrain( + top_left=3, top_right=0, bottom_left=3, bottom_right=0 + ), + ), + tileset.Tile( + id=16, + terrain=tileset.TileTerrain( + top_left=0, top_right=1, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=17, + terrain=tileset.TileTerrain( + top_left=1, top_right=1, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=18, + terrain=tileset.TileTerrain( + top_left=1, top_right=0, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=19, + terrain=tileset.TileTerrain( + top_left=1, top_right=1, bottom_left=1, bottom_right=0 + ), + ), + tileset.Tile( + id=20, + terrain=tileset.TileTerrain( + top_left=1, top_right=1, bottom_left=0, bottom_right=1 + ), + ), + tileset.Tile( + id=21, + terrain=tileset.TileTerrain( + top_left=0, top_right=3, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=22, + terrain=tileset.TileTerrain( + top_left=3, top_right=3, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=23, + terrain=tileset.TileTerrain( + top_left=3, top_right=0, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=24, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=0, bottom_right=2 + ), + ), + tileset.Tile( + id=25, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=2, bottom_right=2 + ), + ), + tileset.Tile( + id=26, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=2, bottom_right=0 + ), + ), + tileset.Tile( + id=27, + terrain=tileset.TileTerrain( + top_left=1, top_right=0, bottom_left=1, bottom_right=1 + ), + ), + tileset.Tile( + id=28, + terrain=tileset.TileTerrain( + top_left=0, top_right=1, bottom_left=1, bottom_right=1 + ), + ), + tileset.Tile( + id=29, + terrain=tileset.TileTerrain( + top_left=0, top_right=0, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=32, + terrain=tileset.TileTerrain( + top_left=0, top_right=2, bottom_left=0, bottom_right=2 + ), + ), + tileset.Tile( + id=33, + terrain=tileset.TileTerrain( + top_left=2, top_right=2, bottom_left=2, bottom_right=2 + ), + ), + tileset.Tile( + id=34, + terrain=tileset.TileTerrain( + top_left=2, top_right=0, bottom_left=2, bottom_right=0 + ), + ), + tileset.Tile( + id=35, + terrain=tileset.TileTerrain( + top_left=2, top_right=2, bottom_left=2, bottom_right=0 + ), + ), + tileset.Tile( + id=36, + terrain=tileset.TileTerrain( + top_left=2, top_right=2, bottom_left=0, bottom_right=2 + ), + ), + tileset.Tile( + id=40, + terrain=tileset.TileTerrain( + top_left=0, top_right=2, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=41, + terrain=tileset.TileTerrain( + top_left=2, top_right=2, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=42, + terrain=tileset.TileTerrain( + top_left=2, top_right=0, bottom_left=0, bottom_right=0 + ), + ), + tileset.Tile( + id=43, + terrain=tileset.TileTerrain( + top_left=2, top_right=0, bottom_left=2, bottom_right=2 + ), + ), + tileset.Tile( + id=44, + terrain=tileset.TileTerrain( + top_left=0, top_right=2, bottom_left=2, bottom_right=2 + ), + ), + ], +) diff --git a/tests/test_data/tilesets/terrain/tileset.json b/tests/test_data/tilesets/terrain/tileset.json new file mode 100644 index 0000000..4bd9d32 --- /dev/null +++ b/tests/test_data/tilesets/terrain/tileset.json @@ -0,0 +1,206 @@ +{ "columns":8, + "editorsettings": + { + "export": + { + "format":"", + "target":"." + } + }, + "image":"..\/..\/images\/tmw_desert_spacing.png", + "imageheight":199, + "imagewidth":265, + "margin":1, + "name":"tileset", + "spacing":1, + "terrains":[ + { + "name":"Sand", + "properties":[ + { + "name":"terrain property", + "type":"string", + "value":"test terrain property" + }], + "tile":29 + }, + { + "name":"Cobblestone", + "tile":29 + }, + { + "name":"Pavement", + "tile":29 + }, + { + "name":"Dirt", + "tile":29 + }], + "tilecount":48, + "tiledversion":"1.3.5", + "tileheight":32, + "tiles":[ + { + "id":0, + "terrain":[0, 0, 0, 1] + }, + { + "id":1, + "terrain":[0, 0, 1, 1] + }, + { + "id":2, + "terrain":[0, 0, 1, 0] + }, + { + "id":3, + "terrain":[3, 3, 3, 0] + }, + { + "id":4, + "terrain":[3, 3, 0, 3] + }, + { + "id":5, + "terrain":[0, 0, 0, 3] + }, + { + "id":6, + "terrain":[0, 0, 3, 3] + }, + { + "id":7, + "terrain":[0, 0, 3, 0] + }, + { + "id":8, + "terrain":[0, 1, 0, 1] + }, + { + "id":9, + "terrain":[1, 1, 1, 1] + }, + { + "id":10, + "terrain":[1, 0, 1, 0] + }, + { + "id":11, + "terrain":[3, 0, 3, 3] + }, + { + "id":12, + "terrain":[0, 3, 3, 3] + }, + { + "id":13, + "terrain":[0, 3, 0, 3] + }, + { + "id":14, + "terrain":[3, 3, 3, 3] + }, + { + "id":15, + "terrain":[3, 0, 3, 0] + }, + { + "id":16, + "terrain":[0, 1, 0, 0] + }, + { + "id":17, + "terrain":[1, 1, 0, 0] + }, + { + "id":18, + "terrain":[1, 0, 0, 0] + }, + { + "id":19, + "terrain":[1, 1, 1, 0] + }, + { + "id":20, + "terrain":[1, 1, 0, 1] + }, + { + "id":21, + "terrain":[0, 3, 0, 0] + }, + { + "id":22, + "terrain":[3, 3, 0, 0] + }, + { + "id":23, + "terrain":[3, 0, 0, 0] + }, + { + "id":24, + "terrain":[0, 0, 0, 2] + }, + { + "id":25, + "terrain":[0, 0, 2, 2] + }, + { + "id":26, + "terrain":[0, 0, 2, 0] + }, + { + "id":27, + "terrain":[1, 0, 1, 1] + }, + { + "id":28, + "terrain":[0, 1, 1, 1] + }, + { + "id":29, + "terrain":[0, 0, 0, 0] + }, + { + "id":32, + "terrain":[0, 2, 0, 2] + }, + { + "id":33, + "terrain":[2, 2, 2, 2] + }, + { + "id":34, + "terrain":[2, 0, 2, 0] + }, + { + "id":35, + "terrain":[2, 2, 2, 0] + }, + { + "id":36, + "terrain":[2, 2, 0, 2] + }, + { + "id":40, + "terrain":[0, 2, 0, 0] + }, + { + "id":41, + "terrain":[2, 2, 0, 0] + }, + { + "id":42, + "terrain":[2, 0, 0, 0] + }, + { + "id":43, + "terrain":[2, 0, 2, 2] + }, + { + "id":44, + "terrain":[0, 2, 2, 2] + }], + "tilewidth":32, + "type":"tileset", + "version":1.2 +} \ No newline at end of file diff --git a/tests/test_tileset.py b/tests/test_tileset.py index 2d72dc1..f8a83a1 100644 --- a/tests/test_tileset.py +++ b/tests/test_tileset.py @@ -20,6 +20,8 @@ ALL_TILESET_DIRS = [ TILE_SETS / "image_properties", TILE_SETS / "image_transparent_color", TILE_SETS / "image_tile_offset", + TILE_SETS / "individual_images", + TILE_SETS / "terrain", ]