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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// forEachTrack — every per-sequence animation track in a Model, once each.
//
// The lazy sequence loader needs to reach the same set of tracks the parser
// filled, without holding pointers into a model that may since have been moved
// or copied. Walking the model by name is what makes that safe: the only
// requirement is that this list stays in step with the structures, which is one
// grep away (`AnimationTrack<` in structures/base.h).
//
// The client has the same list, in the same place: M2Init(M2Data&) descends
// into exactly these structures when it fixes up a single sequence, and skips
// everything else.
//
// ParticleAnimationTrack is deliberately absent — those keys run over a
// particle's lifetime, not over a sequence, so they are never split per
// sequence and never live in a `.anim`.
namespace whiteout // namespace whiteout