From d836e24357b81496c61f3cc9195ba36758523578 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 15 Mar 2025 15:18:40 +0100 Subject: more abstraction around unityfs to read multiple files from a single reader --- src/classes/pptr.rs | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'src/classes/pptr.rs') diff --git a/src/classes/pptr.rs b/src/classes/pptr.rs index 30f37ad..9b54cbb 100644 --- a/src/classes/pptr.rs +++ b/src/classes/pptr.rs @@ -54,17 +54,36 @@ impl PPtr { pub fn is_null(&self) -> bool { self.path_id == 0 && self.file_id == 0 } - pub fn load(&self, file: &mut SerializedFile) -> Result { + pub fn load( + &self, + file: &mut SerializedFile, + shared_assets: Option<&mut SerializedFile>, + ) -> Result { debug!( "loading PPtr<{}> file_id={} path_id={}", self.class, self.file_id, self.path_id ); - let ob = file - .objects - .iter() - .find(|o| o.path_id == self.path_id) - .ok_or(anyhow!("object with path id {} not found", self.path_id))? - .to_owned(); - file.read_object(ob)?.parse() + match self.file_id { + 0 => { + let ob = file + .objects + .iter() + .find(|o| o.path_id == self.path_id) + .ok_or(anyhow!("object with path id {} not found", self.path_id))? + .to_owned(); + file.read_object(ob)?.parse() + } + 1 => { + let file = shared_assets.unwrap(); + let ob = file + .objects + .iter() + .find(|o| o.path_id == self.path_id) + .ok_or(anyhow!("object with path id {} not found", self.path_id))? + .to_owned(); + file.read_object(ob)?.parse() + } + _ => unimplemented!(), + } } } -- cgit v1.2.3-70-g09d2