split bsp model loader into 2 stages

This commit is contained in:
Quaternions 2025-02-03 11:11:45 -08:00
parent 6df5ee1af3
commit f3d7d9b49f

@ -87,10 +87,10 @@ impl MeshLoader<'_,'_>{
}
}
}
impl<'a> Loader<Mesh> for MeshLoader<'a,'_>{
impl<'a> Loader<vmdl::Model> for MeshLoader<'a,'_>{
type Error=MeshError;
type Index=&'a str;
fn load(&mut self,index:Self::Index)->Result<Mesh,Self::Error>{
fn load(&mut self,index:Self::Index)->Result<vmdl::Model,Self::Error>{
let mdl_path_lower=index.to_lowercase();
//.mdl, .vvd, .dx90.vtx
let path=std::path::PathBuf::from(mdl_path_lower.as_str());
@ -103,11 +103,19 @@ impl<'a> Loader<Mesh> for MeshLoader<'a,'_>{
let mdl=bsp.pack.get(mdl_path_lower.as_str())?.ok_or(MeshError::MissingMdl)?;
let vtx=bsp.pack.get(vtx_path.as_os_str().to_str().unwrap())?.ok_or(MeshError::MissingVtx)?;
let vvd=bsp.pack.get(vvd_path.as_os_str().to_str().unwrap())?.ok_or(MeshError::MissingVvd)?;
let model=vmdl::Model::from_parts(
Ok(vmdl::Model::from_parts(
vmdl::mdl::Mdl::read(mdl.as_ref())?,
vmdl::vtx::Vtx::read(vtx.as_ref())?,
vmdl::vvd::Vvd::read(vvd.as_ref())?,
);
))
}
}
impl<'a> Loader<Mesh> for MeshLoader<'a,'_>{
type Error=MeshError;
type Index=&'a str;
fn load(&mut self,index:Self::Index)->Result<Mesh,Self::Error>{
let model=self.load(index)?;
let mesh=crate::mesh::convert_mesh(model,&mut self.deferred_loader);
Ok(mesh)
}