/
file.go
69 lines (56 loc) · 1.41 KB
/
file.go
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package rexfile
const (
// NotSpecified is used if no material or no texture image is set
NotSpecified = 0x7fffffffffffffff
)
// File represents a complete valid REX file which can
// either be stored locally or sent to an arbirary writer with
// the Encoder.
type File struct {
LineSets []LineSet
Texts []Text
PointLists []PointList
Meshes []Mesh
Materials []Material
Images []Image
SceneNodes []SceneNode
Tracks []Track
UnknownBlocks uint
}
// Header generates a proper header for the File datastructure
func (f *File) Header() *Header {
header := CreateHeader()
for _, b := range f.LineSets {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.Texts {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.PointLists {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.Meshes {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.Materials {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.Images {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.SceneNodes {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
for _, b := range f.Tracks {
header.NrBlocks++
header.SizeBytes += (uint64)(b.GetSize())
}
return header
}