simple_game_utils/tiles/
tileset.rs1use std::collections::HashMap;
2use std::fmt::Debug;
3use std::rc::Rc;
4
5#[derive(Debug, Clone)]
7pub struct Tileset<Image: Debug + Clone> {
8 images: Vec<Rc<Image>>,
10 names: Vec<String>,
12 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}