diff options
| author | tom barrett <spalf0@gmail.com> | 2019-06-26 05:50:34 -0500 | 
|---|---|---|
| committer | tom barrett <spalf0@gmail.com> | 2019-06-26 05:50:34 -0500 | 
| commit | 53b4ccdcc6cdac3b02480a97a2ec30439114ff6c (patch) | |
| tree | e7925bfd55c15c68b13301301bd12a6d092e43c4 /src/tileset.rs | |
| parent | 15b4ade5a357a791cf3ffa86cfe78b5f7ae270c9 (diff) | |
now can parse tile properties
Diffstat (limited to 'src/tileset.rs')
| -rw-r--r-- | src/tileset.rs | 38 | 
1 files changed, 31 insertions, 7 deletions
diff --git a/src/tileset.rs b/src/tileset.rs index ae65097..a5c00af 100644 --- a/src/tileset.rs +++ b/src/tileset.rs @@ -1,37 +1,61 @@  use ggez::filesystem::File;  use ggez::graphics::Rect; +use std::collections::HashMap;  use crate::constants; -use crate::xmlelements::XMLElements; +use crate::xmlelements::{XMLElements, Property};  pub struct Tileset { -    pub tiles: Vec<Rect>, +    tiles: HashMap<usize, Rect>, +    properties: HashMap<usize, Property>,  }  impl Tileset {      pub fn new(file: File) -> Tileset {          let elements = XMLElements::new(file); -        let height = elements.get_element_attribute("image", "height").unwrap(); +        let height = elements +            .get_element_attribute("image", "height") +            .unwrap() +            .parse::<usize>() +            .unwrap();          let columns = elements              .get_element_attribute("tileset", "columns") +            .unwrap() +            .parse::<usize>()              .unwrap();          let rows = height / (constants::TILE_HEIGHT as usize); -        let mut tiles = Vec::new(); -        tiles.push(Rect::zero()); +        let mut tiles = HashMap::new(); +        tiles.insert(0, Rect::zero());          let w = 1.0 / columns as f32;          let h = 1.0 / rows as f32; +        let mut key = 1;          for r in 0..rows {              for c in 0..columns {                  let x = c as f32 / columns as f32;                  let y = r as f32 / rows as f32; -                tiles.push(Rect::new(x, y, w, h)); +                tiles.insert(key, Rect::new(x, y, w, h)); +                key += 1;              }          } -        Tileset { tiles } +        let mut properties = HashMap::new(); + +        for tile_element in elements.get_elements("tile") { +            let tile_id = XMLElements::get_attribute(&tile_element, "id").unwrap().parse().unwrap(); + +            let property_elements = elements.get_children(&tile_element, "property"); + +            properties.insert(tile_id, Property::new(property_elements)); +        } + +        Tileset { tiles, properties } +    } + +    pub fn get(&self, id: usize) -> Rect { +        *self.tiles.get(&id).unwrap()      }  }  | 
