use std::{ env::args, fs::File, io::{BufReader, Read, Seek, SeekFrom}, }; use unity_tools::{object::read_value, 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)?; let e = file.endianness; for ob in file.objects { cab.seek(SeekFrom::Start(ob.data_offset))?; // 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") &file.types[ob.type_id as usize] }; // eprintln!("{typetree:#?}"); let value = read_value(typetree.type_tree.as_ref().unwrap(), e, &mut cab)?; // eprintln!("{value:#?}") } // eprintln!("{:#?}", file.types); } Ok(()) }