diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs index beab8a1..450f4a7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,8 @@ -use std::{env::args, fs::File, io::BufReader}; +use std::{ + env::args, + fs::File, + io::{BufReader, Read, Seek, SeekFrom}, +}; use unity_tools::{serialized_file::read_serialized_file, unityfs::UnityFS}; fn main() -> anyhow::Result<()> { @@ -10,12 +14,28 @@ fn main() -> anyhow::Result<()> { if node.name.ends_with(".resource") || node.name.ends_with(".resS") { continue; } - let cab = fs.read(&node)?; + let mut cab = fs.read(&node)?; // let mut writer = File::create(format!("/tmp/{}", node.name))?; // std::io::copy(&mut cab, &mut writer)?; // continue; - let file = read_serialized_file(cab)?; + let file = read_serialized_file(&mut cab)?; + + for ob in file.objects { + cab.seek(SeekFrom::Start(ob.data_offset))?; + let ob_data = cab.by_ref().take(ob.data_size as u64); + + eprintln!("{:#?}", ob); + let typetree = if ob.type_id < 0 { + unimplemented!() + } else { + file.types + .iter() + .find(|t| t.class_id == ob.type_id) + .expect("unknown type") + }; + } + // eprintln!("{:#?}", file.types); } Ok(()) |