add bsp_contents and use --path instead of --vpk

This commit is contained in:
Quaternions 2024-01-10 16:47:11 -08:00
parent 48d3fca895
commit 8c0f46007f

View File

@ -7,7 +7,7 @@ use anyhow::Result as AResult;
#[command(propagate_version = true)] #[command(propagate_version = true)]
struct Cli { struct Cli {
#[arg(long)] #[arg(long)]
vpk:Option<std::path::PathBuf>, path:Option<std::path::PathBuf>,
#[command(subcommand)] #[command(subcommand)]
command: Commands, command: Commands,
} }
@ -19,6 +19,7 @@ enum Commands {
ExtractTextures(PathBufList), ExtractTextures(PathBufList),
ConvertTextures, ConvertTextures,
VPKContents, VPKContents,
BSPContents,
DownloadMeshes(PathBufList), DownloadMeshes(PathBufList),
Extract(PathBufList), Extract(PathBufList),
WriteAttributes, WriteAttributes,
@ -44,8 +45,9 @@ fn main() -> AResult<()> {
match cli.command { match cli.command {
Commands::Download(map_list)=>download(map_list.maps), Commands::Download(map_list)=>download(map_list.maps),
Commands::DownloadTextures(pathlist)=>download_textures(pathlist.paths), Commands::DownloadTextures(pathlist)=>download_textures(pathlist.paths),
Commands::ExtractTextures(pathlist)=>extract_textures(pathlist.paths,cli.vpk.unwrap()), Commands::ExtractTextures(pathlist)=>extract_textures(pathlist.paths,cli.path.unwrap()),
Commands::VPKContents=>vpk_contents(cli.vpk.unwrap()), Commands::VPKContents=>vpk_contents(cli.path.unwrap()),
Commands::BSPContents=>bsp_contents(cli.path.unwrap()),
Commands::ConvertTextures=>convert_textures(), Commands::ConvertTextures=>convert_textures(),
Commands::DownloadMeshes(pathlist)=>download_meshes(pathlist.paths), Commands::DownloadMeshes(pathlist)=>download_meshes(pathlist.paths),
Commands::Extract(pathlist)=>extract(pathlist.paths), Commands::Extract(pathlist)=>extract(pathlist.paths),
@ -1250,4 +1252,12 @@ fn vpk_contents(vpk_path:std::path::PathBuf)->AResult<()>{
println!("vpk label={} entry={:?}",label,entry); println!("vpk label={} entry={:?}",label,entry);
} }
Ok(()) Ok(())
}
fn bsp_contents(path:std::path::PathBuf)->AResult<()>{
let bsp=vbsp::Bsp::read(std::fs::read(path)?.as_ref())?;
for file_name in bsp.pack.into_zip().into_inner().unwrap().file_names(){
println!("file_name={:?}",file_name);
}
Ok(())
} }