diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-15 15:18:40 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-15 15:18:40 +0100 |
commit | d836e24357b81496c61f3cc9195ba36758523578 (patch) | |
tree | 0028aee5a453cc761dd39e92430a35c55147537f /src/classes/pptr.rs | |
parent | 07fc3656274117c211ca0d6a54926d390a4d9b68 (diff) | |
download | unity-tools-d836e24357b81496c61f3cc9195ba36758523578.tar unity-tools-d836e24357b81496c61f3cc9195ba36758523578.tar.bz2 unity-tools-d836e24357b81496c61f3cc9195ba36758523578.tar.zst |
more abstraction around unityfs to read multiple files from a single reader
Diffstat (limited to 'src/classes/pptr.rs')
-rw-r--r-- | src/classes/pptr.rs | 35 |
1 files changed, 27 insertions, 8 deletions
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<T: FromValue> PPtr<T> { pub fn is_null(&self) -> bool { self.path_id == 0 && self.file_id == 0 } - pub fn load(&self, file: &mut SerializedFile<impl Read + Seek>) -> Result<T> { + pub fn load( + &self, + file: &mut SerializedFile<impl Read + Seek>, + shared_assets: Option<&mut SerializedFile<impl Read + Seek>>, + ) -> Result<T> { 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!(), + } } } |