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)
 	}