From d0bfbfb84a19bb3f1fccca615d4e6f102062f706 Mon Sep 17 00:00:00 2001 From: Doug Reeves <guodman@gmail.com> Date: Tue, 13 Jun 2017 22:35:05 -0500 Subject: [PATCH] Load in properties from the tiles --- src/lib.rs | 20 +++++++++++++------- tests/lib.rs | 13 ++++++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index eee8bff..efd8191 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -307,7 +307,7 @@ impl FromStr for Orientation { } /// A tileset, usually the tilesheet image. -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq)] pub struct Tileset { /// The GID of the first tile stored pub first_gid: u32, @@ -420,10 +420,11 @@ impl Tileset { } } -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq)] pub struct Tile { pub id: u32, - pub images: Vec<Image> + pub images: Vec<Image>, + pub properties: Properties, } impl Tile { @@ -435,12 +436,17 @@ impl Tile { TiledError::MalformedAttributes("tile must have an id with the correct type".to_string())); let mut images = Vec::new(); + let mut properties = HashMap::new(); parse_tag!(parser, "tile", "image" => |attrs| { - images.push(try!(Image::new(parser, attrs))); - Ok(()) - }); - Ok(Tile {id: i, images: images}) + images.push(Image::new(parser, attrs)?); + Ok(()) + }, + "properties" => |_| { + properties = parse_properties(parser)?; + Ok(()) + }); + Ok(Tile {id: i, images: images, properties: properties}) } } diff --git a/tests/lib.rs b/tests/lib.rs index 6ac8a99..7da63c8 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -2,7 +2,7 @@ extern crate tiled; use std::path::Path; use std::fs::File; -use tiled::{Map, TiledError, parse, parse_file, parse_tileset}; +use tiled::{Map, TiledError, PropertyValue, parse, parse_file, parse_tileset}; fn read_from_file(p: &Path) -> Result<Map, TiledError> { let file = File::open(p).unwrap(); @@ -37,3 +37,14 @@ fn test_just_tileset() { let t = parse_tileset(File::open(Path::new("assets/tilesheet.tsx")).unwrap(), 1).unwrap(); assert_eq!(r.tilesets[0], t); } + +#[test] +fn test_tile_property() { + let r = read_from_file(&Path::new("assets/tiled_base64.tmx")).unwrap(); + let prop_value: String = if let Some(&PropertyValue::StringValue(ref v)) = r.tilesets[0].tiles[0].properties.get("a tile property") { + v.clone() + } else { + String::new() + }; + assert_eq!("123", prop_value); +} -- GitLab