diff --git a/pytiled_parser/objects.py b/pytiled_parser/objects.py index b9fab0f..0e7667e 100644 --- a/pytiled_parser/objects.py +++ b/pytiled_parser/objects.py @@ -420,6 +420,21 @@ class LayerGroup(Layer): layers: Optional[List[Union["LayerGroup", Layer, ObjectLayer]]] +@attr.s(auto_attribs=True, kw_only=True) +class ImageLayer(Layer): + """Image Layer. + + An image layer displays a single image. + + See: https://doc.mapeditor.org/en/stable/reference/tmx-map-format/#imagelayer + + Attributes: + image: the image to display for this layer. + """ + + image: Image + + @attr.s(auto_attribs=True) class TileSet: """Object for storing a TSX with all associated collision data. diff --git a/pytiled_parser/xml_parser.py b/pytiled_parser/xml_parser.py index ae7296a..d03fed7 100644 --- a/pytiled_parser/xml_parser.py +++ b/pytiled_parser/xml_parser.py @@ -403,6 +403,29 @@ def _parse_object_layer(element: etree.Element,) -> objects.ObjectLayer: ) +def _parse_image_layer(element: etree.Element,) -> objects.ImageLayer: + """Parse the imagelayer element given. + + Args: + element: Element to be parsed. + + Returns: + ImageLayer: The image layer object. + """ + id_, name, offset, opacity, properties = _parse_layer(element) + + image = _parse_image_element(element.find("./image")) + + return objects.ImageLayer( + id_=id_, + name=name, + offset=offset, + opacity=opacity, + properties=properties, + image=image, + ) + + def _parse_layer_group(element: etree.Element,) -> objects.LayerGroup: """Parse the objectgroup element given. @@ -447,6 +470,8 @@ def _get_layer_parser( return _parse_object_layer if layer_tag == "group": return _parse_layer_group + if layer_tag == "imagelayer": + return _parse_image_layer return None