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<()> { env_logger::init_from_env("LOG"); let file = BufReader::new(File::open(args().nth(1).unwrap())?); let mut fs = UnityFS::open(file)?; for node in fs.nodes().to_vec() { if node.name.ends_with(".resource") || node.name.ends_with(".resS") { continue; } 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(&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(()) }