Accessorylist
List<ClipAccessoryData> Named blocks of extra data on the clip, see ClipAccessoryData. The clip does not use them when it plays. Other systems read them from the clip that plays on a track.
One clip of an animation graph: an entry of
mClipDataMap that the game, or another clip, plays by name.
There are two groups of clips. Pose clips produce a pose and play on a track. Logic clips produce no pose of their own. They start other clips of the same graph, and those clips can be of any kind, so logic clips nest.
| Kind | Group | What it plays |
|---|---|---|
| AtomicClipData | Pose | One .anm file |
| ParametricClipData | Pose | A blend of two neighbouring children, chosen by a run-time value |
| SequencerClipData | Logic | Its children one after the other |
| ParallelClipData | Logic | Its children at the same time |
| SelectorClipData | Logic | One child, picked at random |
| ConditionBoolClipData | Logic | One of two children, from a true or false value |
| ConditionFloatClipData | Logic | One child, from the range a number falls in |
| SwitchIntClipData | Logic | One child, from an integer |
| EventControlledSelectorClipData | Logic | One child, from a state event |
| StateAnimClipData | Logic | One child, until a transition to another clip passes |
When the graph loads, the client replaces every child name with the clip it names. A
child name that is not a key of mClipDataMap is dropped from a sequencer or parallel
list and counts as "no clip" in most other kinds.
List<ClipAccessoryData> Named blocks of extra data on the clip, see ClipAccessoryData. The clip does not use them when it plays. Other systems read them from the clip that plays on a track.
List<Hash> The interruption groups of the clip: a list of free names. Two clips that share a name do not play at the same time on different tracks.
When a clip becomes the current clip of a track, the client looks at the current clip of every other track. Each of those clips that shares at least one group name with the new clip is stopped: its track's queue is cleared and the clip fades out.
Clips on the same track are not affected, because a track holds one clip at a time already. A clip with an empty list never interrupts another clip and is never interrupted this way.
U32 A bit field of playback flags.
| Bit | Name | Read on | Effect |
|---|---|---|---|
0x1 |
kMain |
A direct child of a ParallelClipData | This child decides when the parallel ends. |
0x2 |
kLoop |
Every clip | The clip loops. An atomic clip wraps its time and fires its events again. A sequencer goes back to its first child. A parallel starts again when its main child ends. A selector picks again when its child ends. |
0x4 |
kContinue |
A direct child of a parallel, and the child of a bool or float condition clip | In a parallel: the child is not stopped when the main child ends, and it keeps playing when the parallel starts again. In a condition clip: see ConditionBoolClipData.mChangeAnimationMidPlay. |
0x8 |
kPlayOnce |
A direct child of a parallel or a SequencerClipData | The child plays only on the first pass. Later loops of the parent skip it. In a parallel it is not stopped when the main child ends. It cancels kLoop and kContinue on the same child, except on the main child. |
Only kLoop has an effect on a clip by itself. The other three have an effect only
where the table says. On any other clip they do nothing.
"First pass" and "starts again" count within one run of the parent. A parent that is
played again is a new run, and it starts every child again, kPlayOnce and
kContinue children included.
A clip also loops when its parent asks it to. A logic clip passes that request to a
child only if the child sets kLoop itself.
SequencerClipData with kLoop, whose first child sets kPlayOnce and whose second child sets kLoop.Map<Hash, ClipBaseData>