# Sequencing Animations in Animation Nodes

I'm working on a complex animation with many sequential elements. Animations nodes I've found animation nodes excellent for creating animations, but that it doesn't really have a way to organize the timing of these animations. Below I describe the issue in more detail.

Some approaches that I have taken:

1. Creating a "Master Delay" Custom Object property: This master delay value is added to existing delay nodes. However, I find this to be a pretty inefficient and cumbersome method because it means adding an Attribute Input and Float Math node for each existing delay node. Also, it becomes difficult to keep track of which animations I want to be affected by the master delay. Say I wanted multiple master delay properties for several "groups" of sequential animations. Then if I wanted to offset multiple master delays, I would have to add in yet more nodes to delay the master delays.

2. Using Ojbect Transform Inputs with Parented structure: Blender certainly has a means of nesting values via constraints and parenting. We could potentially create a parented delay value system by parenting several empties to a master empty. However, I find this method also means adding lots of nodes to my trees, and means we have to come up with a system for visualizing the values of those empties' locations.

3. Bake Animations: While this lets us move keyframes in the dopesheet/graph editor, we lose control over our node network parameters. Not interested.

I'm wondering if anyone has a different approach to this issue. Animation nodes is a very powerful tool, but without the ability to structure the timing of nodes tree, it's extremely arduous for use in longer projects where the order of the animation is important.

But what about the frame at which the animation starts, how do we define that? Well, Animation Nodes always starts the animation at frame zero. However, the frame/time is exposed as an input in the Animate node, so what we can do is edit this input frame/time such that it becomes zero at the frame we want the animation to start at. This is easily done by subtracting the target starting frame $$f_t$$ from the scene or master frame $$f_m$$, because when the master frame becomes equal to the target frame our equation returns zero $$f_m-f_t = 0$$. This is what the Delay node does, it simply subtracts the input, nothing more, nothing less.
Now, the Animate node provides a Time output. This output is the input time minus the duration. Think about that for a second. It means that if the output time of an Animate node $$A$$ is used as the input time of another Animate node $$B$$, the $$B$$ animation will start as soon as the $$A$$ animation ends. Now, if I delay (by subtracting) the output time of the node $$A$$ by 5 frames and use it as the input time of the node $$B$$, then the $$B$$ animation will start after the $$A$$ animation ends by 5 frames. And so on.