simple_game_utils/tiles/
tileset.rs

1use std::collections::HashMap;
2use std::fmt::Debug;
3use std::rc::Rc;
4
5///collection of named tiles
6#[derive(Debug, Clone)]
7pub struct Tileset<Image: Debug + Clone> {
8    ///images
9    images: Vec<Rc<Image>>,
10    ///names
11    names: Vec<String>,
12    ///size of tiles in px
13    size: (u32, u32),
14}
15
16impl<Image: Debug + Clone> Tileset<Image> {
17    pub fn new(images: Vec<Rc<Image>>, names: Vec<String>, size: (u32, u32)) -> Self {
18        Self {
19            images,
20            names,
21            size,
22        }
23    }
24}
25
26impl<Image: Debug + Clone> Tileset<Image> {
27    pub fn as_hashmap(&self) -> HashMap<String, Rc<Image>> {
28        let mut map = HashMap::new();
29        for (i, name) in self.names.iter().enumerate() {
30            map.insert(name.clone(), self.images[i].clone());
31        }
32        map
33    }
34
35    pub fn find_by_name(&self, name: &str) -> Option<&Image> {
36        if let Some(i) = self.names.iter().position(|value| value == name) {
37            return Some(&self.images[i]);
38        }
39        None
40    }
41
42    #[inline]
43    pub fn names(&self) -> &[String] {
44        &self.names
45    }
46
47    #[inline]
48    pub fn images(&self) -> &Vec<Rc<Image>> {
49        &self.images
50    }
51
52    #[inline]
53    pub fn tilesize(&self) -> (u32, u32) {
54        self.size
55    }
56}