diff --git a/map-tool/src/source.rs b/map-tool/src/source.rs index 5fcecea..4f1e3de 100644 --- a/map-tool/src/source.rs +++ b/map-tool/src/source.rs @@ -168,17 +168,38 @@ fn load_texture<'bsp,'vpk,'a>(finder:BspFinder<'bsp,'vpk>,texture_name:&str)->Re let texture_file_name_lowercase=texture_name.to_lowercase(); texture_file_name.push(texture_file_name_lowercase.clone()); //remove stem and search for both vtf and vmt files - let stem=PathBuf::from(texture_file_name.file_stem().unwrap()); + let stem=texture_file_name.file_stem().unwrap().to_owned(); texture_file_name.pop(); texture_file_name.push(stem); if let Some(stuff)=finder.find(texture_file_name.to_str().unwrap())?{ - return Ok(Some(stuff)) + return Ok(Some(stuff)); } - //somehow search for both files + + // search for both vmt,vtf let mut texture_file_name_vmt=texture_file_name.clone(); - texture_file_name.set_extension("vtf"); texture_file_name_vmt.set_extension("vmt"); - recursive_vmt_loader(finder,get_vmt(finder,texture_file_name_vmt.to_str().unwrap())?) + let vmt_result=recursive_vmt_loader(finder,get_vmt(finder,texture_file_name_vmt.to_str().unwrap())?); + match vmt_result{ + Ok(Some(stuff))=>return Ok(Some(stuff)), + Ok(None) + |Err(LoadVMTError::NotFound)=>(), + |Err(LoadVMTError::GetVMT(GetVMTError::NotFound))=>(), + Err(e)=>return Err(e), + } + + // try looking for vtf + let mut texture_file_name_vtf=texture_file_name.clone(); + texture_file_name_vtf.set_extension("vtf"); + let vtf_result=recursive_vmt_loader(finder,get_vmt(finder,texture_file_name_vtf.to_str().unwrap())?); + match vtf_result{ + Ok(Some(stuff))=>return Ok(Some(stuff)), + Ok(None) + |Err(LoadVMTError::NotFound)=>(), + |Err(LoadVMTError::GetVMT(GetVMTError::NotFound))=>(), + Err(e)=>return Err(e), + } + + Ok(None) } #[derive(Debug,thiserror::Error)] enum ExtractTextureError{