aboutsummaryrefslogtreecommitdiff
path: root/src/serialized_file.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-02-14 20:10:00 +0100
committermetamuffin <metamuffin@disroot.org>2025-02-14 20:10:00 +0100
commitd116a1df8fe14edc8de157bf8088244261fca30f (patch)
tree6e6b0c2eb62f035a38bc4a14df2c9fa76b92aec9 /src/serialized_file.rs
parentb3ae58d1ab1f3b35b4a86234e424b3675af323e5 (diff)
downloadunity-tools-d116a1df8fe14edc8de157bf8088244261fca30f.tar
unity-tools-d116a1df8fe14edc8de157bf8088244261fca30f.tar.bz2
unity-tools-d116a1df8fe14edc8de157bf8088244261fca30f.tar.zst
trying to read objects
Diffstat (limited to 'src/serialized_file.rs')
-rw-r--r--src/serialized_file.rs22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/serialized_file.rs b/src/serialized_file.rs
index f32b3a3..4b348e0 100644
--- a/src/serialized_file.rs
+++ b/src/serialized_file.rs
@@ -17,6 +17,8 @@ pub struct TypeTreeNode {
pub index: i32,
pub flags: i32,
pub ref_type_hash: u64,
+
+ pub children: Vec<TypeTreeNode>,
}
#[derive(Debug)]
@@ -26,7 +28,7 @@ pub struct SeralizedType {
pub script_type_index: i16,
pub script_id: u128,
- pub type_tree: Vec<TypeTreeNode>,
+ pub type_tree: Option<TypeTreeNode>,
pub type_deps: Vec<u32>,
}
@@ -115,7 +117,7 @@ pub fn read_serialized_file(mut file: impl Read + Seek) -> Result<SerializedFile
trace!("script_id={script_id}");
let mut type_deps = Vec::new();
- let mut type_tree = Vec::new();
+ let mut type_tree = None;
if has_type_trees {
let num_nodes = file.read_u32(e)?;
let size = file.read_u32(e)?;
@@ -143,8 +145,9 @@ pub fn read_serialized_file(mut file: impl Read + Seek) -> Result<SerializedFile
)
};
+ let mut parents: Vec<TypeTreeNode> = vec![];
for _ in 0..num_nodes {
- type_tree.push(TypeTreeNode {
+ let node = TypeTreeNode {
version: node_data.read_u16(e)?,
level: node_data.read_u8()?,
type_flags: node_data.read_u8()?,
@@ -154,8 +157,19 @@ pub fn read_serialized_file(mut file: impl Read + Seek) -> Result<SerializedFile
index: node_data.read_i32(e)?,
flags: node_data.read_i32(e)?,
ref_type_hash: node_data.read_u64(e)?,
- });
+ children: vec![],
+ };
+ while parents.len() > node.level as usize {
+ let n = parents.pop().unwrap();
+ parents.last_mut().unwrap().children.push(n)
+ }
+ parents.push(node);
+ }
+ while parents.len() > 1 {
+ let n = parents.pop().unwrap();
+ parents.last_mut().unwrap().children.push(n)
}
+ type_tree = parents.pop();
if format >= 21 {
let num_deps = file.read_u32(e)?;