aboutsummaryrefslogtreecommitdiff
path: root/src/assetbundle.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/assetbundle.rs')
-rw-r--r--src/assetbundle.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/assetbundle.rs b/src/assetbundle.rs
index e10a8f3..db7ad97 100644
--- a/src/assetbundle.rs
+++ b/src/assetbundle.rs
@@ -4,6 +4,7 @@ use crate::{
unityfs::{NodeReader, UnityFS, block_reader::BlockReader, multi_reader::MultiReader},
};
use anyhow::{Context, Result, anyhow};
+use log::debug;
use std::{
io::{Read, Seek},
marker::PhantomData,
@@ -22,8 +23,10 @@ impl<T: Read + Seek> AssetBundle<T> {
let main_ni = fs
.find_main_file()
.ok_or(anyhow!("AssetBundle seems to lack main file"))?;
+ debug!("detected {:?} as main file", main_ni.name);
let main = SerializedFile::read(fs.read(main_ni)?)?;
let shared_assets = if let Some(n) = main.find_fs_shared_assets(&fs) {
+ debug!("detect {:?} as shared assets", n.name);
Some(SerializedFile::read(fs.read(&n)?)?)
} else {
None
@@ -35,6 +38,26 @@ impl<T: Read + Seek> AssetBundle<T> {
})
}
+ pub fn all_toplevel(&self) -> impl Iterator<Item = PPtr> {
+ self.main
+ .objects
+ .iter()
+ .map(|o| (0, o))
+ .chain(
+ self.shared_assets
+ .as_ref()
+ .map(|e| e.objects.iter().map(|o| (1, o)))
+ .into_iter()
+ .flatten(),
+ )
+ .map(|(fi, o)| PPtr {
+ class: "".to_string(),
+ file_id: fi,
+ path_id: o.path_id,
+ _class: PhantomData,
+ })
+ }
+
pub fn all_toplevel_of_class(&self, class_name: &str) -> impl Iterator<Item = PPtr> {
self.main
.all_objects_of_class(class_name)