diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ae8f0d215f61d0d3fe0bbd5ecc76e2eebf6f201..d3b9a6498a2e8a271527f30647b11b77fcb13f6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Support for 'object'-type properties. + ## [0.9.2] - 2020-Apr-25 ### Added diff --git a/assets/tiled_object_property.tmx b/assets/tiled_object_property.tmx new file mode 100644 index 0000000000000000000000000000000000000000..36f387eb52b5fa2e3885eb763807943df4f81e28 --- /dev/null +++ b/assets/tiled_object_property.tmx @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="2" height="2" tilewidth="32" tileheight="32" infinite="0" nextlayerid="3" nextobjectid="4"> + <layer id="1" name="Tile Layer 1" width="2" height="2"> + <data encoding="csv"> +0,0, +0,0 +</data> + </layer> + <objectgroup id="2" name="Object Layer 1"> + <object id="2" x="0" y="0" width="32" height="32"> + <properties> + <property name="object property" type="object" value="3"/> + </properties> + </object> + <object id="3" x="32" y="32" width="32" height="32"> + <properties> + <property name="object property" type="object" value="0"/> + </properties> + </object> + </objectgroup> +</map> diff --git a/src/properties.rs b/src/properties.rs index dfc2976d81ef399ea14ea4ce768f186234341042..68afa62bfee52abea5f3552dc2deba26ed34453d 100644 --- a/src/properties.rs +++ b/src/properties.rs @@ -45,6 +45,8 @@ pub enum PropertyValue { StringValue(String), /// Holds the path relative to the map or tileset FileValue(String), + /// Holds the id of a referenced object, or 0 if unset + ObjectValue(u32), } impl PropertyValue { @@ -70,6 +72,10 @@ impl PropertyValue { ))), }, "string" => Ok(PropertyValue::StringValue(value)), + "object" => match value.parse() { + Ok(val) => Ok(PropertyValue::ObjectValue(val)), + Err(err) => Err(TiledError::Other(err.to_string())), + }, "file" => Ok(PropertyValue::FileValue(value)), _ => Err(TiledError::Other(format!( "Unknown property type \"{}\"", diff --git a/tests/lib.rs b/tests/lib.rs index e816ad6a6036f1a91aec40473099dd6c1f90c2b9..c46a54e904eb5e9d15592fc458b3242ff0f66791 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -190,3 +190,16 @@ fn test_ldk_export() { assert!(false, "It is wrongly recognised as an infinite map"); } } + +#[test] +fn test_object_property() { + let r = read_from_file(&Path::new("assets/tiled_object_property.tmx")).unwrap(); + let prop_value = if let Some(PropertyValue::ObjectValue(v)) = + r.object_groups[0].objects[0].properties.get("object property") + { + *v + } else { + 0 + }; + assert_eq!(3, prop_value); +}