pub mod builds;
pub mod cas;
#[cfg(feature = "constants")]
pub mod constants;
pub mod dump;
pub mod manifest;
pub mod registry;
use std::path::PathBuf;
use wowsunpack::game_data;
use wowsunpack::vfs::VfsPath;
pub fn game_data_dir() -> Option<PathBuf> {
if let Ok(dir) = std::env::var("WOWS_GAME_DATA") {
let path = PathBuf::from(dir);
if path.exists() {
return Some(path);
}
}
let mut dir = std::env::current_dir().ok()?;
loop {
if dir.join("game_versions.toml").exists() {
let data_dir = dir.join("game_data");
return Some(data_dir);
}
if !dir.pop() {
return None;
}
}
}
pub fn available_builds() -> Vec<u32> {
let Some(data_dir) = game_data_dir() else {
return Vec::new();
};
let reg = registry::load_registry(&data_dir.join("versions.toml"));
reg.available_builds()
}
pub fn game_dir_for_build(build: u32) -> Option<PathBuf> {
let data_dir = game_data_dir()?;
let reg = registry::load_registry(&data_dir.join("versions.toml"));
reg.game_dir_for_build(build, &data_dir)
}
pub fn vfs_for_build(build: u32) -> Option<VfsPath> {
let game_dir = game_dir_for_build(build)?;
game_data::build_game_vfs(&game_dir).ok()
}
pub fn latest_build() -> Option<(u32, VfsPath)> {
let builds = available_builds();
let build = *builds.last()?;
let vfs = vfs_for_build(build)?;
Some((build, vfs))
}