summaryrefslogtreecommitdiff
path: root/src/gfx/media.rs
diff options
context:
space:
mode:
authorLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-28 18:14:06 +0100
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-28 18:14:06 +0100
commita87186860ec602c19f0d11528bef2d5123bc7e48 (patch)
tree1a5bfc0b554cd0ed195b61b1bc19f2dd250f8c8c /src/gfx/media.rs
parent146702340fbad28f9146d75e298234f63c0d5033 (diff)
downloadmt_client-a87186860ec602c19f0d11528bef2d5123bc7e48.tar.xz
Basic map rendering
Diffstat (limited to 'src/gfx/media.rs')
-rw-r--r--src/gfx/media.rs42
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)
+ }
+}