|
14 | 14 | if TYPE_CHECKING: |
15 | 15 | from ..files.SerializedFile import SerializedFile |
16 | 16 |
|
| 17 | + |
| 18 | +try: |
| 19 | + from ..UnityPyBoost import read_typetree as read_typetree_boost |
| 20 | +except ImportError: |
| 21 | + read_typetree_boost = None |
| 22 | + |
17 | 23 | kAlignBytes = 0x4000 |
18 | 24 |
|
19 | 25 | FUNCTION_MAP = { |
@@ -85,6 +91,12 @@ def read_typetree( |
85 | 91 | dict | objects.Object |
86 | 92 | The parsed typtree |
87 | 93 | """ |
| 94 | + if expected_read and read_typetree_boost: |
| 95 | + data = reader.read_bytes(expected_read) |
| 96 | + return read_typetree_boost( |
| 97 | + data, root_node, reader.endian, as_dict, assetsfile, classes, clean_name |
| 98 | + ) |
| 99 | + |
88 | 100 | pos = reader.Position |
89 | 101 | obj = read_value(root_node, reader, as_dict, assetsfile) |
90 | 102 |
|
@@ -136,7 +148,7 @@ def read_value( |
136 | 148 | value = None |
137 | 149 | # raise NotImplementedError(f"Reference type {node.m_Type} not implemented") |
138 | 150 | # Vector |
139 | | - elif node.m_Children[0].m_Type == "Array": |
| 151 | + elif node.m_Children and node.m_Children[0].m_Type == "Array": |
140 | 152 | if metaflag_is_aligned(node.m_Children[0].m_MetaFlag): |
141 | 153 | align = True |
142 | 154 |
|
@@ -220,7 +232,7 @@ def read_value_array( |
220 | 232 | value = None |
221 | 233 | # raise NotImplementedError(f"Reference type {node.m_Type} not implemented") |
222 | 234 | # Vector |
223 | | - elif node.m_Children[0].m_Type == "Array": |
| 235 | + elif node.m_Children and node.m_Children[0].m_Type == "Array": |
224 | 236 | if metaflag_is_aligned(node.m_Children[0].m_MetaFlag): |
225 | 237 | align = True |
226 | 238 | subtype = node.m_Children[0].m_Children[1] |
@@ -359,11 +371,8 @@ def write_value( |
359 | 371 | write_value(value[0], node.m_Children[0], writer) |
360 | 372 | write_value(value[1], node.m_Children[1], writer) |
361 | 373 | case _: |
362 | | - if not node.m_Children: |
363 | | - value = None |
364 | | - # raise NotImplementedError(f"Reference type {node.m_Type} not implemented") |
365 | 374 | # Vector |
366 | | - elif node.m_Children and node.m_Children[0].m_Type == "Array": |
| 375 | + if node.m_Children and node.m_Children[0].m_Type == "Array": |
367 | 376 | if metaflag_is_aligned(node.m_Children[0].m_MetaFlag): |
368 | 377 | align = True |
369 | 378 |
|
|
0 commit comments