diff --git a/src/load_roblox.rs b/src/load_roblox.rs index 4fba760..880f1c2 100644 --- a/src/load_roblox.rs +++ b/src/load_roblox.rs @@ -1,5 +1,3 @@ -use crate::model::{IndexedModelInstances,ModelInstance}; - use crate::primitives; fn class_is_a(class: &str, superclass: &str) -> bool { @@ -111,7 +109,7 @@ enum RobloxBasePartDescription{ Wedge(RobloxWedgeDescription), CornerWedge(RobloxCornerWedgeDescription), } -pub fn generate_indexed_models_roblox(dom:rbx_dom_weak::WeakDom) -> Result<(IndexedModelInstances,glam::Vec3), Box>{ +pub fn generate_indexed_models(dom:rbx_dom_weak::WeakDom) -> crate::model::IndexedModelInstances{ //IndexedModelInstances includes textures let mut spawn_point=glam::Vec3::ZERO; @@ -335,15 +333,16 @@ pub fn generate_indexed_models_roblox(dom:rbx_dom_weak::WeakDom) -> Result<(Inde }); model_id }; - indexed_models[model_id].instances.push(ModelInstance { + indexed_models[model_id].instances.push(crate::model::ModelInstance { transform:model_transform, color:glam::vec4(color3.r as f32/255f32, color3.g as f32/255f32, color3.b as f32/255f32, 1.0-*transparency), }); } } } - Ok((IndexedModelInstances{ + crate::model::IndexedModelInstances{ textures:asset_id_from_texture_id.iter().map(|t|t.to_string()).collect(), models:indexed_models, - },spawn_point)) + spawn_point, + } } diff --git a/src/main.rs b/src/main.rs index 5508939..b780f80 100644 --- a/src/main.rs +++ b/src/main.rs @@ -769,6 +769,7 @@ impl framework::Example for GraphicsData { let indexed_model_instances=model::IndexedModelInstances{ textures:Vec::new(), models:indexed_models, + spawn_point:glam::Vec3::Y*50.0, }; graphics.generate_model_physics(&indexed_model_instances); graphics.generate_model_graphics(&device,&queue,indexed_model_instances); @@ -795,7 +796,7 @@ impl framework::Example for GraphicsData { //.snf = "SNBF" if let (Ok(()),Ok(()))=(std::io::Read::read_exact(&mut input, &mut first_8),std::io::Seek::rewind(&mut input)){ // - if let Some(Ok((indexed_model_instances,spawn_point)))={ + if let Some(indexed_model_instances)={ match &first_8[0..4]{ b"{ match match &first_8[4..8]{ @@ -803,19 +804,23 @@ impl framework::Example for GraphicsData { b"lox "=>rbx_xml::from_reader(input,rbx_xml::DecodeOptions::default()).map_err(|e|format!("{:?}",e)), other=>Err(format!("Unknown Roblox file type {:?}",other)), }{ - Ok(dom)=>Some(load_roblox::generate_indexed_models_roblox(dom)), + Ok(dom)=>Some(load_roblox::generate_indexed_models(dom)), Err(e)=>{ println!("Error loading roblox file:{:?}",e); None }, } }, - //b"VBSP"=>load_valve::generate_indexed_models_valve(input), - //b"SNFM"=>sniffer::generate_indexed_models(input), - //b"SNFB"=>sniffer::load_bot(input), - _=>None, + //b"VBSP"=>Some(load_bsp::generate_indexed_models(input)), + //b"SNFM"=>Some(sniffer::generate_indexed_models(input)), + //b"SNFB"=>Some(sniffer::load_bot(input)), + other=>{ + println!("loser file {:?}",other); + None + }, } }{ + let spawn_point=indexed_model_instances.spawn_point; //if generate_indexed_models succeeds, clear the previous ones self.models.clear(); self.physics.models.clear(); diff --git a/src/model.rs b/src/model.rs index 79bd70e..8dea948 100644 --- a/src/model.rs +++ b/src/model.rs @@ -63,6 +63,7 @@ pub struct IndexedModelInstances{ pub textures:Vec,//RenderPattern pub models:Vec, //object_index for spawns, triggers etc? + pub spawn_point:glam::Vec3, } pub fn generate_indexed_model_list_from_obj(data:obj::ObjData,color:[f32;4]) -> Vec{