diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-28 18:14:06 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-28 18:14:06 +0100 |
commit | a87186860ec602c19f0d11528bef2d5123bc7e48 (patch) | |
tree | 1a5bfc0b554cd0ed195b61b1bc19f2dd250f8c8c /src/gfx/media.rs | |
parent | 146702340fbad28f9146d75e298234f63c0d5033 (diff) | |
download | mt_client-a87186860ec602c19f0d11528bef2d5123bc7e48.tar.xz |
Basic map rendering
Diffstat (limited to 'src/gfx/media.rs')
-rw-r--r-- | src/gfx/media.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/gfx/media.rs b/src/gfx/media.rs new file mode 100644 index 0000000..ac5d158 --- /dev/null +++ b/src/gfx/media.rs @@ -0,0 +1,42 @@ +use std::collections::HashMap; + +#[derive(rust_embed::RustEmbed)] +#[folder = "assets/textures"] +pub struct BaseFolder; // copied from github.com/minetest/minetest + +pub struct MediaMgr { + packs: Vec<HashMap<String, Vec<u8>>>, + srv_idx: usize, +} + +impl MediaMgr { + pub fn new() -> Self { + Self { + packs: [ + BaseFolder::iter() + .map(|file| { + ( + file.to_string(), + BaseFolder::get(&file).unwrap().data.into_owned(), + ) + }) + .collect(), + HashMap::new(), + ] + .into(), + srv_idx: 1, + } + } + + pub fn add_server_media(&mut self, files: HashMap<String, Vec<u8>>) { + self.packs[self.srv_idx].extend(files.into_iter()); + } + + pub fn get(&self, file: &str) -> Option<&[u8]> { + self.packs + .iter() + .rev() + .find_map(|pack| pack.get(file)) + .map(Vec::as_slice) + } +} |