diff --git a/arcade/tilemap/tilemap.py b/arcade/tilemap/tilemap.py index 0442bd2b49..8dd5e81ccc 100644 --- a/arcade/tilemap/tilemap.py +++ b/arcade/tilemap/tilemap.py @@ -15,7 +15,7 @@ from collections import OrderedDict from collections.abc import Sequence from pathlib import Path -from typing import TYPE_CHECKING, Any, Callable, cast +from typing import TYPE_CHECKING, Any, Callable, List, cast import pytiled_parser import pytiled_parser.tiled_object @@ -373,13 +373,12 @@ def get_tilemap_layer(self, layer_path: str) -> pytiled_parser.Layer | None: """ assert isinstance(layer_path, str) - def _get_tilemap_layer(my_path, layers): + def _get_tilemap_layer(my_path: List[str], layers): layer_name = my_path.pop(0) for my_layer in layers: if my_layer.name == layer_name: - if isinstance(my_layer, pytiled_parser.LayerGroup): - if len(my_path) != 0: - return _get_tilemap_layer(my_path, my_layer.layers) + if isinstance(my_layer, pytiled_parser.LayerGroup) and len(my_path) != 0: + return _get_tilemap_layer(my_path, my_layer.layers) else: return my_layer return None diff --git a/tests/unit/tilemap/test_tilemap.py b/tests/unit/tilemap/test_tilemap.py index af9924ab86..145b31b7f2 100644 --- a/tests/unit/tilemap/test_tilemap.py +++ b/tests/unit/tilemap/test_tilemap.py @@ -1,6 +1,12 @@ -import arcade +from pathlib import Path + +import pytiled_parser +from pytiled_parser import LayerGroup, OrderedPair, Size, TileLayer from pytiled_parser.common_types import Color +import arcade +from arcade import TileMap + def test_one(): tile_map = arcade.load_tilemap(":resources:/tiled_maps/test_map_1.json") @@ -102,3 +108,87 @@ def test_sprite_sheet(): assert first_sprite is not None assert first_sprite.height == 16 assert first_sprite.width == 16 + + +def test_find_layer_group(): + child_layer = TileLayer( + name="P1", + visible=True, + repeat_x=False, + repeat_y=False, + parallax_factor=OrderedPair(1, 1), + id=0, + size=Size(10, 5), + tint_color=None, + data=[], + ) + group = LayerGroup( + name="Platforms", + opacity=1, + repeat_x=False, + repeat_y=False, + tint_color=None, + layers=[child_layer], + ) + tilemap = TileMap( + tiled_map=pytiled_parser.TiledMap( + map_file=Path(), + infinite=False, + layers=[group], + map_size=Size(10, 5), + next_layer_id=None, + next_object_id=0, + orientation="orthogonal", + render_order="right-down", + tiled_version="1.5.0", + tile_size=Size(32, 32), + tilesets={}, + version="1.5", + background_color=Color(0, 160, 229, 255), + ) + ) + + layer_group = tilemap.get_tilemap_layer("Platforms") + assert layer_group is layer_group + + +def test_find_layer_group_child(): + child_layer = TileLayer( + name="P1", + visible=True, + repeat_x=False, + repeat_y=False, + parallax_factor=OrderedPair(1, 1), + id=0, + size=Size(10, 5), + tint_color=None, + data=[], + ) + group = LayerGroup( + name="Platforms", + opacity=1, + repeat_x=False, + repeat_y=False, + tint_color=None, + layers=[child_layer], + ) + tilemap = TileMap( + tiled_map=pytiled_parser.TiledMap( + map_file=Path(), + infinite=False, + layers=[group], + map_size=Size(10, 5), + next_layer_id=None, + next_object_id=0, + orientation="orthogonal", + render_order="right-down", + tiled_version="1.5.0", + tile_size=Size(32, 32), + tilesets={}, + version="1.5", + background_color=Color(0, 160, 229, 255), + ) + ) + + layer = tilemap.get_tilemap_layer("Platforms/P1") + assert layer is child_layer