]> git.lizzy.rs Git - mt_client.git/blob - src/gfx/media.rs
Basic map rendering
[mt_client.git] / src / gfx / media.rs
1 use std::collections::HashMap;
2
3 #[derive(rust_embed::RustEmbed)]
4 #[folder = "assets/textures"]
5 pub struct BaseFolder; // copied from github.com/minetest/minetest
6
7 pub struct MediaMgr {
8     packs: Vec<HashMap<String, Vec<u8>>>,
9     srv_idx: usize,
10 }
11
12 impl MediaMgr {
13     pub fn new() -> Self {
14         Self {
15             packs: [
16                 BaseFolder::iter()
17                     .map(|file| {
18                         (
19                             file.to_string(),
20                             BaseFolder::get(&file).unwrap().data.into_owned(),
21                         )
22                     })
23                     .collect(),
24                 HashMap::new(),
25             ]
26             .into(),
27             srv_idx: 1,
28         }
29     }
30
31     pub fn add_server_media(&mut self, files: HashMap<String, Vec<u8>>) {
32         self.packs[self.srv_idx].extend(files.into_iter());
33     }
34
35     pub fn get(&self, file: &str) -> Option<&[u8]> {
36         self.packs
37             .iter()
38             .rev()
39             .find_map(|pack| pack.get(file))
40             .map(Vec::as_slice)
41     }
42 }