From 289c2ac5ff2b1448ae79f483ed8a90d0a22a6abc Mon Sep 17 00:00:00 2001 From: Maic Siemering Date: Sat, 19 Oct 2024 20:39:49 +0200 Subject: [PATCH 1/3] fix get_tilemap_layer not returning LayerGroup --- arcade/tilemap/tilemap.py | 11 ++-- tests/unit/tilemap/test_tilemap.py | 92 +++++++++++++++++++++++++++++- 2 files changed, 96 insertions(+), 7 deletions(-) diff --git a/arcade/tilemap/tilemap.py b/arcade/tilemap/tilemap.py index 0442bd2b49..7c8a625af0 100644 --- a/arcade/tilemap/tilemap.py +++ b/arcade/tilemap/tilemap.py @@ -15,11 +15,11 @@ from collections import OrderedDict from collections.abc import Sequence from pathlib import Path -from typing import TYPE_CHECKING, Any, Callable, cast +from typing import List, TYPE_CHECKING, Any, Callable, cast import pytiled_parser import pytiled_parser.tiled_object -from pytiled_parser import Color +from pytiled_parser import Color, Layer import arcade from arcade import ( @@ -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: List[Layer]): 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 From 39e514523d662020c1a5dd72816abae588d9b122 Mon Sep 17 00:00:00 2001 From: Maic Siemering Date: Sat, 19 Oct 2024 20:42:09 +0200 Subject: [PATCH 2/3] fix formating --- arcade/tilemap/tilemap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arcade/tilemap/tilemap.py b/arcade/tilemap/tilemap.py index 7c8a625af0..5f9de65dcd 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 List, TYPE_CHECKING, Any, Callable, cast +from typing import TYPE_CHECKING, Any, Callable, List, cast import pytiled_parser import pytiled_parser.tiled_object From 8ec2f6cba81b07ac3215aaa286d6a391e33a32b2 Mon Sep 17 00:00:00 2001 From: Maic Siemering Date: Sat, 19 Oct 2024 20:44:15 +0200 Subject: [PATCH 3/3] fix typing --- arcade/tilemap/tilemap.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arcade/tilemap/tilemap.py b/arcade/tilemap/tilemap.py index 5f9de65dcd..8dd5e81ccc 100644 --- a/arcade/tilemap/tilemap.py +++ b/arcade/tilemap/tilemap.py @@ -19,7 +19,7 @@ import pytiled_parser import pytiled_parser.tiled_object -from pytiled_parser import Color, Layer +from pytiled_parser import Color import arcade from arcade import ( @@ -373,7 +373,7 @@ def get_tilemap_layer(self, layer_path: str) -> pytiled_parser.Layer | None: """ assert isinstance(layer_path, str) - def _get_tilemap_layer(my_path: List[str], layers: List[Layer]): + 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: