diff --git a/strafe-client/src/file.rs b/strafe-client/src/file.rs index 81d4fd31b..fcc079622 100644 --- a/strafe-client/src/file.rs +++ b/strafe-client/src/file.rs @@ -1,5 +1,8 @@ use std::io::Read; +#[cfg(any(feature="roblox",feature="source"))] +use strafesnet_deferred_loader::deferred_loader::{LoadFailureMode,MeshDeferredLoader,RenderConfigDeferredLoader}; + #[allow(dead_code)] #[derive(Debug)] pub enum ReadError{ @@ -65,7 +68,10 @@ pub fn read<R:Read+std::io::Seek>(input:R)->Result<ReadFormat,ReadError>{ pub enum LoadError{ ReadError(ReadError), File(std::io::Error), - Io(std::io::Error), + #[cfg(feature="roblox")] + LoadRobloxMesh(strafesnet_rbx_loader::loader::MeshError), + #[cfg(feature="roblox")] + LoadRobloxTexture(strafesnet_rbx_loader::loader::TextureError), } impl std::fmt::Display for LoadError{ fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{ @@ -94,34 +100,24 @@ pub fn load<P:AsRef<std::path::Path>>(path:P)->Result<LoadFormat,LoadError>{ let mut place=model.into_place(); place.run_scripts(); - let mut loader=strafesnet_deferred_loader::roblox_legacy(); - - let (texture_loader,mesh_loader)=loader.get_inner_mut(); + let mut texture_deferred_loader=RenderConfigDeferredLoader::new(); + let mut mesh_deferred_loader=MeshDeferredLoader::new(); let map_step1=strafesnet_rbx_loader::convert( - &place, - |name|texture_loader.acquire_render_config_id(name), - |name|mesh_loader.acquire_mesh_id(name), + place.as_ref(), + &mut texture_deferred_loader, + &mut mesh_deferred_loader, ); - let meshpart_meshes=mesh_loader.load_meshes().map_err(LoadError::Io)?; + let mut mesh_loader=strafesnet_rbx_loader::loader::MeshLoader::new(); + let meshpart_meshes=mesh_deferred_loader.into_meshes(&mut mesh_loader,LoadFailureMode::DefaultToNone).map_err(LoadError::LoadRobloxMesh)?; - let map_step2=map_step1.add_meshpart_meshes_and_calculate_attributes( - meshpart_meshes.into_iter().map(|(mesh_id,loader_model)| - (mesh_id,strafesnet_rbx_loader::data::RobloxMeshBytes::new(loader_model.get())) - ) - ); + let map_step2=map_step1.add_meshpart_meshes_and_calculate_attributes(meshpart_meshes); - let (textures,render_configs)=loader.into_render_configs().map_err(LoadError::Io)?.consume(); + let mut texture_loader=strafesnet_rbx_loader::loader::TextureLoader::new(); + let render_configs=texture_deferred_loader.into_render_configs(&mut texture_loader,LoadFailureMode::DefaultToNone).map_err(LoadError::LoadRobloxTexture)?; - let map=map_step2.add_render_configs_and_textures( - render_configs.into_iter(), - textures.into_iter().map(|(texture_id,texture)| - (texture_id,match texture{ - strafesnet_deferred_loader::texture::Texture::ImageDDS(data)=>data, - }) - ) - ); + let map=map_step2.add_render_configs_and_textures(render_configs); Ok(LoadFormat::Map(map)) },