Automatically create sub-directories when downloading assets; move dds files into the textures folder

the latter change is because roblox-to-snf expects the files in textures, not textures/dds
This commit is contained in:
9382 2024-09-25 23:48:59 +01:00
parent b6a5324ae7
commit a56c114d08
Signed by: aidan9382
GPG Key ID: 9BF9CD918201F681

View File

@ -246,6 +246,7 @@ fn download_textures(paths:Vec<PathBuf>)->AResult<()>{
} }
let texture_list_string=texture_list.into_iter().map(|id|id.to_string()).collect::<Vec<String>>(); let texture_list_string=texture_list.into_iter().map(|id|id.to_string()).collect::<Vec<String>>();
println!("Texture list:{:?}",texture_list_string.join(" ")); println!("Texture list:{:?}",texture_list_string.join(" "));
std::fs::create_dir_all("textures/unprocessed")?;
let output=std::process::Command::new("asset-tool") let output=std::process::Command::new("asset-tool")
.args(["download","--cookie-literal","","--output-folder","textures/unprocessed/"]) .args(["download","--cookie-literal","","--output-folder","textures/unprocessed/"])
.args(texture_list_string) .args(texture_list_string)
@ -281,6 +282,7 @@ fn download_meshes(paths:Vec<PathBuf>)->AResult<()>{
} }
let mesh_list_string=mesh_list.into_iter().map(|id|id.to_string()).collect::<Vec<String>>(); let mesh_list_string=mesh_list.into_iter().map(|id|id.to_string()).collect::<Vec<String>>();
println!("Mesh list:{:?}",mesh_list_string.join(" ")); println!("Mesh list:{:?}",mesh_list_string.join(" "));
std::fs::create_dir_all("meshes/")?;
let output=std::process::Command::new("asset-tool") let output=std::process::Command::new("asset-tool")
.args(["download","--cookie-literal","","--output-folder","meshes/"]) .args(["download","--cookie-literal","","--output-folder","meshes/"])
.args(mesh_list_string) .args(mesh_list_string)
@ -333,7 +335,7 @@ fn convert(file_thing:std::fs::DirEntry) -> AResult<()>{
)?; )?;
//write dds //write dds
let mut dest=PathBuf::from("textures/dds"); let mut dest=PathBuf::from("textures");
dest.push(file_thing.file_name()); dest.push(file_thing.file_name());
dest.set_extension("dds"); dest.set_extension("dds");
let mut writer = std::io::BufWriter::new(std::fs::File::create(dest)?); let mut writer = std::io::BufWriter::new(std::fs::File::create(dest)?);
@ -355,6 +357,8 @@ fn convert(file_thing:std::fs::DirEntry) -> AResult<()>{
Ok(()) Ok(())
} }
fn convert_textures() -> AResult<()>{ fn convert_textures() -> AResult<()>{
std::fs::create_dir_all("textures/unprocessed")?;
std::fs::create_dir_all("textures/processed")?;
let start = std::time::Instant::now(); let start = std::time::Instant::now();
let mut threads=Vec::new(); let mut threads=Vec::new();
for entry in std::fs::read_dir("textures/unprocessed")? { for entry in std::fs::read_dir("textures/unprocessed")? {
@ -501,6 +505,7 @@ fn recursive_vmt_loader<F:Fn(String)->AResult<Option<Vec<u8>>>>(find_stuff:&F,ma
} }
fn extract_textures(paths:Vec<PathBuf>,vpk_paths:Vec<PathBuf>)->AResult<()>{ fn extract_textures(paths:Vec<PathBuf>,vpk_paths:Vec<PathBuf>)->AResult<()>{
std::fs::create_dir_all("textures")?;
let vpk_list:Vec<vpk::VPK>=vpk_paths.into_iter().map(|vpk_path|vpk::VPK::read(&vpk_path).expect("vpk file does not exist")).collect(); let vpk_list:Vec<vpk::VPK>=vpk_paths.into_iter().map(|vpk_path|vpk::VPK::read(&vpk_path).expect("vpk file does not exist")).collect();
for path in paths{ for path in paths{
let mut deduplicate=std::collections::HashSet::new(); let mut deduplicate=std::collections::HashSet::new();
@ -569,7 +574,7 @@ fn extract_textures(paths:Vec<PathBuf>,vpk_paths:Vec<PathBuf>)->AResult<()>{
)?; )?;
//write dds //write dds
let mut dest=PathBuf::from("textures/dds"); let mut dest=PathBuf::from("textures");
dest.push(write_file_name); dest.push(write_file_name);
dest.set_extension("dds"); dest.set_extension("dds");
std::fs::create_dir_all(dest.parent().unwrap())?; std::fs::create_dir_all(dest.parent().unwrap())?;