diff --git a/src/roblox.rs b/src/roblox.rs index a39a9d1..3d6a7a5 100644 --- a/src/roblox.rs +++ b/src/roblox.rs @@ -4,7 +4,8 @@ use std::collections::HashSet; use clap::{Args,Subcommand}; use anyhow::Result as AResult; use rbx_dom_weak::Instance; -use strafesnet_deferred_loader::rbxassetid::RobloxAssetId; +use strafesnet_deferred_loader::deferred_loader::{LoadFailureMode,MeshDeferredLoader,RenderConfigDeferredLoader}; +use rbxassetid::RobloxAssetId; use tokio::io::AsyncReadExt; const DOWNLOAD_LIMIT:usize=16; @@ -350,34 +351,24 @@ fn roblox_to_snf(pathlist:Vec<std::path::PathBuf>,output_folder:PathBuf)->AResul 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(ConvertError::IO)?; + let mut mesh_loader=strafesnet_rbx_loader::loader::MeshLoader::new(); + let meshpart_meshes=mesh_deferred_loader.into_meshes(&mut mesh_loader,LoadFailureMode::DefaultToNone).unwrap(); - 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(ConvertError::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).unwrap(); - 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); let mut dest=output_folder.clone(); dest.push(path.file_stem().unwrap()); diff --git a/src/source.rs b/src/source.rs index 1d0f803..ffc337a 100644 --- a/src/source.rs +++ b/src/source.rs @@ -1,6 +1,7 @@ use std::path::PathBuf; use clap::{Args,Subcommand}; use anyhow::Result as AResult; +use strafesnet_deferred_loader::deferred_loader::{LoadFailureMode,MeshDeferredLoader,RenderConfigDeferredLoader}; #[derive(Subcommand)] pub enum Commands{ @@ -311,40 +312,25 @@ fn source_to_snf(pathlist:Vec<std::path::PathBuf>,output_folder:PathBuf)->AResul std::fs::File::open(path.as_path()) .map_err(ConvertError::IO)? ).map_err(ConvertError::BspLoader)?; - let mut loader=strafesnet_deferred_loader::source_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_bsp_loader::convert( - &bsp, - |name|texture_loader.acquire_render_config_id(name), - |name|mesh_loader.acquire_mesh_id(name), - ); + let map_step1=strafesnet_bsp_loader::convert( + &bsp, + &mut texture_deferred_loader, + &mut mesh_deferred_loader, + ); - let prop_meshes=mesh_loader.load_meshes(&bsp.as_ref()); + let mut mesh_loader=strafesnet_bsp_loader::loader::MeshLoader::new(&bsp,&mut texture_deferred_loader); + let prop_meshes=mesh_deferred_loader.into_meshes(&mut mesh_loader,LoadFailureMode::DefaultToNone).unwrap(); - let map_step2=map_step1.add_prop_meshes( - //the type conflagulator 9000 - prop_meshes.into_iter().map(|(mesh_id,loader_model)| - (mesh_id,strafesnet_bsp_loader::data::ModelData{ - mdl:strafesnet_bsp_loader::data::MdlData::new(loader_model.mdl.get()), - vtx:strafesnet_bsp_loader::data::VtxData::new(loader_model.vtx.get()), - vvd:strafesnet_bsp_loader::data::VvdData::new(loader_model.vvd.get()), - }) - ), - |name|texture_loader.acquire_render_config_id(name), - ); + let map_step2=map_step1.add_prop_meshes(prop_meshes); - let (textures,render_configs)=loader.into_render_configs().map_err(ConvertError::IO)?.consume(); + let mut texture_loader=strafesnet_bsp_loader::loader::TextureLoader::new(); + let render_configs=texture_deferred_loader.into_render_configs(&mut texture_loader,LoadFailureMode::DefaultToNone).unwrap(); - 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); let mut dest=output_folder.clone(); dest.push(path.file_stem().unwrap());