Skip to content

Commit 4b843e1

Browse files
authored
fix get_tilemap_layer not returning LayerGroup (#2424)
1 parent 75429c0 commit 4b843e1

File tree

2 files changed

+95
-6
lines changed

2 files changed

+95
-6
lines changed

arcade/tilemap/tilemap.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from collections import OrderedDict
1616
from collections.abc import Sequence
1717
from pathlib import Path
18-
from typing import TYPE_CHECKING, Any, Callable, cast
18+
from typing import TYPE_CHECKING, Any, Callable, List, cast
1919

2020
import pytiled_parser
2121
import pytiled_parser.tiled_object
@@ -373,13 +373,12 @@ def get_tilemap_layer(self, layer_path: str) -> pytiled_parser.Layer | None:
373373
"""
374374
assert isinstance(layer_path, str)
375375

376-
def _get_tilemap_layer(my_path, layers):
376+
def _get_tilemap_layer(my_path: List[str], layers):
377377
layer_name = my_path.pop(0)
378378
for my_layer in layers:
379379
if my_layer.name == layer_name:
380-
if isinstance(my_layer, pytiled_parser.LayerGroup):
381-
if len(my_path) != 0:
382-
return _get_tilemap_layer(my_path, my_layer.layers)
380+
if isinstance(my_layer, pytiled_parser.LayerGroup) and len(my_path) != 0:
381+
return _get_tilemap_layer(my_path, my_layer.layers)
383382
else:
384383
return my_layer
385384
return None

tests/unit/tilemap/test_tilemap.py

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
import arcade
1+
from pathlib import Path
2+
3+
import pytiled_parser
4+
from pytiled_parser import LayerGroup, OrderedPair, Size, TileLayer
25
from pytiled_parser.common_types import Color
36

7+
import arcade
8+
from arcade import TileMap
9+
410

511
def test_one():
612
tile_map = arcade.load_tilemap(":resources:/tiled_maps/test_map_1.json")
@@ -102,3 +108,87 @@ def test_sprite_sheet():
102108
assert first_sprite is not None
103109
assert first_sprite.height == 16
104110
assert first_sprite.width == 16
111+
112+
113+
def test_find_layer_group():
114+
child_layer = TileLayer(
115+
name="P1",
116+
visible=True,
117+
repeat_x=False,
118+
repeat_y=False,
119+
parallax_factor=OrderedPair(1, 1),
120+
id=0,
121+
size=Size(10, 5),
122+
tint_color=None,
123+
data=[],
124+
)
125+
group = LayerGroup(
126+
name="Platforms",
127+
opacity=1,
128+
repeat_x=False,
129+
repeat_y=False,
130+
tint_color=None,
131+
layers=[child_layer],
132+
)
133+
tilemap = TileMap(
134+
tiled_map=pytiled_parser.TiledMap(
135+
map_file=Path(),
136+
infinite=False,
137+
layers=[group],
138+
map_size=Size(10, 5),
139+
next_layer_id=None,
140+
next_object_id=0,
141+
orientation="orthogonal",
142+
render_order="right-down",
143+
tiled_version="1.5.0",
144+
tile_size=Size(32, 32),
145+
tilesets={},
146+
version="1.5",
147+
background_color=Color(0, 160, 229, 255),
148+
)
149+
)
150+
151+
layer_group = tilemap.get_tilemap_layer("Platforms")
152+
assert layer_group is layer_group
153+
154+
155+
def test_find_layer_group_child():
156+
child_layer = TileLayer(
157+
name="P1",
158+
visible=True,
159+
repeat_x=False,
160+
repeat_y=False,
161+
parallax_factor=OrderedPair(1, 1),
162+
id=0,
163+
size=Size(10, 5),
164+
tint_color=None,
165+
data=[],
166+
)
167+
group = LayerGroup(
168+
name="Platforms",
169+
opacity=1,
170+
repeat_x=False,
171+
repeat_y=False,
172+
tint_color=None,
173+
layers=[child_layer],
174+
)
175+
tilemap = TileMap(
176+
tiled_map=pytiled_parser.TiledMap(
177+
map_file=Path(),
178+
infinite=False,
179+
layers=[group],
180+
map_size=Size(10, 5),
181+
next_layer_id=None,
182+
next_object_id=0,
183+
orientation="orthogonal",
184+
render_order="right-down",
185+
tiled_version="1.5.0",
186+
tile_size=Size(32, 32),
187+
tilesets={},
188+
version="1.5",
189+
background_color=Color(0, 160, 229, 255),
190+
)
191+
)
192+
193+
layer = tilemap.get_tilemap_layer("Platforms/P1")
194+
assert layer is child_layer

0 commit comments

Comments
 (0)