cubik 0.1.0

OpenGL/glium-based multiplayer game engine
Documentation
use std::path::{Path, PathBuf};
use std::env::current_exe;

struct Prefix {
	path: &'static str,
	append_app_id: bool,
	relative_to_binary: bool
}

const PREFIXES: [Prefix; 6] = [
	Prefix { path: "examples", append_app_id: false, relative_to_binary: false },
	Prefix { path: "..", append_app_id: false, relative_to_binary: false },
	Prefix { path: "../..", append_app_id: false, relative_to_binary: false },
	Prefix { path: "../../..", append_app_id: false, relative_to_binary: false },
	Prefix { path: "/usr/lib", append_app_id: true, relative_to_binary: false },
	Prefix { path: "../Resources", append_app_id: false, relative_to_binary: true }
];

pub fn find_asset(path: &str, app_id: &str) -> PathBuf {
	let path = Path::new(path);

	if !path.exists() {
		for prefix in &PREFIXES {
			let mut new_path = if prefix.relative_to_binary {
				let mut p = current_exe().unwrap();
				p.pop();
				p.join(prefix.path)
			} else {
				Path::new(prefix.path).to_path_buf()
			};
			if prefix.append_app_id {
				new_path.push(app_id);
			}
			new_path.push(path);
			if new_path.exists() {
				return new_path;
			}
		}
	}

	path.to_path_buf()
}