-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathheader.py
31 lines (27 loc) · 1.04 KB
/
header.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from dataclasses import dataclass
from SourceIO.library.utils import Buffer
@dataclass(slots=True)
class Header:
version: int
checksum: int
lod_count: int
lod_vertex_count: tuple[int, int, int, int, int, int, int, int]
fixup_count: int
fixup_table_offset: int
vertex_data_offset: int
tangent_data_offset: int
@classmethod
def from_buffer(cls, buffer: Buffer):
ident = buffer.read_fourcc()
if ident != 'IDSV':
raise NotImplementedError('Invalid VVD magic {}!'.format(ident))
version = buffer.read_uint32()
checksum = buffer.read_uint32()
lod_count = buffer.read_uint32()
lod_vertex_count = buffer.read_fmt("8I")
fixup_count = buffer.read_uint32()
fixup_table_offset = buffer.read_uint32()
vertex_data_offset = buffer.read_uint32()
tangent_data_offset = buffer.read_uint32()
return cls(version, checksum, lod_count, lod_vertex_count, fixup_count, fixup_table_offset,
vertex_data_offset, tangent_data_offset)