From f3d7d9b49f47360070b1b88dbf76363e078dee46 Mon Sep 17 00:00:00 2001 From: Quaternions <krakow20@gmail.com> Date: Mon, 3 Feb 2025 11:11:45 -0800 Subject: [PATCH] split bsp model loader into 2 stages --- lib/bsp_loader/src/loader.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/bsp_loader/src/loader.rs b/lib/bsp_loader/src/loader.rs index a9b5c23..bda2f29 100644 --- a/lib/bsp_loader/src/loader.rs +++ b/lib/bsp_loader/src/loader.rs @@ -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) }