diff --git a/pytiled_parser/properties.py b/pytiled_parser/properties.py index 4507f75..9e198af 100644 --- a/pytiled_parser/properties.py +++ b/pytiled_parser/properties.py @@ -3,11 +3,23 @@ from typing import Dict, List, NamedTuple, Optional, Union from .common_types import Color - Property = Union[int, float, Path, str, bool, Color] - +class RawProperties = List[Dict[str, Property]] Properties = Dict[str, Property] + + +def cast(raw: RawProperties) -> Dict[str, Property]: + final: Properties = {} + for prop in raw: + value = prop["value"] + if prop["type"] == "file": + value = Path(str(value)) + elif prop["type"] == "color": + value = Color(str(value)) + final[str(prop["name"])] = value + + return final diff --git a/pytiled_parser/tiled_object.py b/pytiled_parser/tiled_object.py index a3c1e4e..5b8f530 100644 --- a/pytiled_parser/tiled_object.py +++ b/pytiled_parser/tiled_object.py @@ -5,7 +5,7 @@ from typing import Callable, Dict, List, Mapping, Optional, Union import attr from typing_extensions import TypedDict -from . import properties +from . import properties as properties_ from .common_types import Color, OrderedPair, Size from .template import Template @@ -43,7 +43,7 @@ class TiledObject: name: Optional[str] = None type: Optional[str] = None - properties: properties.Properties = {} + properties: properties_.Properties = {} template: Optional[Template] = None @@ -163,7 +163,7 @@ class RawTiledObject(TypedDict): visible: bool name: str type: str - properties: properties.RawProperties + properties: properties_.RawProperties template: Template ellipse: bool point: bool @@ -224,10 +224,7 @@ def _get_common_attributes(raw_tiled_object: RawTiledObject) -> TiledObject: common_attributes.type = raw_tiled_object["type"] if raw_tiled_object.get("properties"): - for prop in raw_tiled_object["properties"]: - name = str(prop["name"]) - value = prop["value"] - common_attributes.properties[name] = prop["value"] + common_attributes.properties = properties_.cast(raw_tiled_object["properties"]) if raw_tiled_object.get("template"): raise NotImplementedError