From a729af20cd8fb225d11a365d7f050292da0920fc Mon Sep 17 00:00:00 2001 From: David M <PieKing1215@users.noreply.github.com> Date: Wed, 29 Dec 2021 16:43:31 -0500 Subject: [PATCH] Add image layer id parsing and make image layer name optional Parity with tile/object layers --- src/layers.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/layers.rs b/src/layers.rs index 0834a83..4d65d75 100644 --- a/src/layers.rs +++ b/src/layers.rs @@ -127,6 +127,9 @@ pub struct ImageLayer { pub image: Option<Image>, pub properties: Properties, pub layer_index: u32, + /// The ID of the layer, as shown in the editor. + /// Layer ID stays the same even if layers are reordered or modified in the editor. + pub id: u32, } impl ImageLayer { @@ -135,18 +138,20 @@ impl ImageLayer { attrs: Vec<OwnedAttribute>, layer_index: u32, ) -> Result<ImageLayer, TiledError> { - let ((o, v, ox, oy), n) = get_attrs!( + let ((o, v, ox, oy, n, id), ()) = get_attrs!( attrs, optionals: [ ("opacity", opacity, |v:String| v.parse().ok()), ("visible", visible, |v:String| v.parse().ok().map(|x:i32| x == 1)), ("offsetx", offset_x, |v:String| v.parse().ok()), ("offsety", offset_y, |v:String| v.parse().ok()), - ], - required: [ ("name", name, |v| Some(v)), + ("id", id, |v:String| v.parse().ok()), ], - TiledError::MalformedAttributes("layer must have a name".to_string())); + required: [], + // this error should never happen since there are no required attrs + TiledError::MalformedAttributes("image layer parsing error".to_string()) + ); let mut properties = HashMap::new(); let mut image: Option<Image> = None; parse_tag!(parser, "imagelayer", { @@ -160,7 +165,7 @@ impl ImageLayer { }, }); Ok(ImageLayer { - name: n, + name: n.unwrap_or(String::new()), opacity: o.unwrap_or(1.0), visible: v.unwrap_or(true), offset_x: ox.unwrap_or(0.0), @@ -168,6 +173,7 @@ impl ImageLayer { image, properties, layer_index, + id: id.unwrap_or(0), }) } } -- GitLab