diff --git a/common/Cargo.toml b/common/Cargo.toml index 6ce742c38d..3fa8fd33a3 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -15,3 +15,5 @@ mio-extras = "2.0" serde = "1.0" serde_derive = "1.0" bincode = "1.0" +log = "0.4" +pretty_env_logger = "0.3" diff --git a/common/src/assets/mod.rs b/common/src/assets/mod.rs new file mode 100644 index 0000000000..141a9c6cf1 --- /dev/null +++ b/common/src/assets/mod.rs @@ -0,0 +1,47 @@ +use std::env; +use std::fs; +use std::io; +use std::io::prelude::*; +use std::fs::File; + +fn try_load(name: &str) -> Option { + let basepaths = [ + // if it's stupid and it works.., + "assets".to_string(), + "../../assets".to_string(), + "../assets".to_string(), /* optimizations */ + [env!("CARGO_MANIFEST_DIR"), "/assets"].concat(), + [env!("CARGO_MANIFEST_DIR"), "/../../assets"].concat(), + [env!("CARGO_MANIFEST_DIR"), "/../assets"].concat(), + "../../../assets".to_string(), + [env!("CARGO_MANIFEST_DIR"), "/../../../assets"].concat(), + ]; + for bp in &basepaths { + let filename = [bp, name].concat(); + match File::open(&filename) { + Ok(f) => { + debug!("loading {} succedeed", filename); + return Some(f); + }, + Err(e) => { + debug!("loading {} did not work with error: {}", filename, e); + } + }; + }; + return None; +} + +pub fn load(name: &str) -> Result,()> { + return match try_load(name) { + Some(mut f) => { + let mut content: Vec = vec!(); + f.read_to_end(&mut content); + info!("loaded asset successful: {}", name); + Ok(content) + }, + None => { + warn!("Loading asset failed, wanted to load {} but could not load it, check debug log!", name); + Err(()) + } + }; +} \ No newline at end of file diff --git a/common/src/lib.rs b/common/src/lib.rs index 0b22bd70d7..9fc68777e4 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -2,7 +2,10 @@ #[macro_use] extern crate serde_derive; +#[macro_use] +extern crate log; +pub mod assets; pub mod clock; pub mod comp; pub mod figure; diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 5110e6c9d7..3b4369019d 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -5,6 +5,7 @@ use crate::{ ui::{ScaleMode, ToggleButton, Ui}, window::{Event as WinEvent, Key, Window}, }; +use common::assets; use conrod_core::{ color, Color, image::Id as ImgId, @@ -245,10 +246,13 @@ pub(self) struct Imgs { impl Imgs { fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs { let mut load = |filename| { - let image = image::open( - &[env!("CARGO_MANIFEST_DIR"), "/../assets/voxygen/", filename].concat(), - ) - .unwrap(); + let fullpath: String = [ + "/voxygen/", + filename, + ].concat(); + let image = image::load_from_memory( + assets::load(fullpath.as_str()).expect("Error loading file").as_slice() + ).unwrap(); ui.new_image(renderer, &image).unwrap() }; Imgs { diff --git a/voxygen/src/menu/char_selection/ui.rs b/voxygen/src/menu/char_selection/ui.rs index 7341da88c7..ce89996f42 100644 --- a/voxygen/src/menu/char_selection/ui.rs +++ b/voxygen/src/menu/char_selection/ui.rs @@ -3,6 +3,7 @@ use crate::{ ui::{self, ScaleMode, Ui}, window::Window, }; +use common::assets; use conrod_core::{ color, color::TRANSPARENT, @@ -224,15 +225,13 @@ struct Imgs { impl Imgs { fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs { let mut load = |filename| { - let image = image::open( - &[ - env!("CARGO_MANIFEST_DIR"), - "/../assets/voxygen/", - filename, - ] - .concat(), - ) - .unwrap(); + let fullpath: String = [ + "/voxygen/", + filename, + ].concat(); + let image = image::load_from_memory( + assets::load(fullpath.as_str()).expect("Error loading file").as_slice() + ).unwrap(); ui.new_image(renderer, &image).unwrap() }; Imgs { diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index d1d6311b12..66126c6f0a 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -3,6 +3,7 @@ use crate::{ ui::{self, ScaleMode, Ui}, window::Window, }; +use common::assets; use conrod_core::{ color::TRANSPARENT, image::Id as ImgId, @@ -57,15 +58,13 @@ impl Imgs { fn new(ui: &mut Ui, renderer: &mut Renderer) -> Imgs { // TODO: update paths let mut load = |filename| { - let image = image::open( - &[ - env!("CARGO_MANIFEST_DIR"), - "/../assets/voxygen/", - filename, - ] - .concat(), - ) - .unwrap(); + let fullpath: String = [ + "/voxygen/", + filename, + ].concat(); + let image = image::load_from_memory( + assets::load(fullpath.as_str()).expect("Error loading file").as_slice() + ).unwrap(); ui.new_image(renderer, &image).unwrap() }; Imgs {