@CheesyFX You can reach out on Discord, I have my own Discord (link in all of my plugins), feel free to ping me there. It's often easier to have quick discussions there. And.... yeah, Timeline is _complex_ but also started as a cool proof of concept. I tried to keep refactoring it, but I'm not keeping up lol. Still, there's a logic despite it being far from perfect. Ask away and I'll point out the way things are built, you don't have to figure it out yourself
- Unique: There's qualifiedAnimationName, qualifiedLayerName, etc. which are namespace (unique across all animations). There's also an index (animation.index) to quickly access them without having to do string comparisons.
- The idea of sharing animation names across layers is to have cross-layer animations, so the goal is to have them in sync, at least as much as possible. So updating the speed of Anim 1 will update it for all layers.
- Git: I strongly suggest you learn the basics of making PRs in GitHub, this way I can easily contribute, provide feedback, etc. It was created for this purpose, so it's worth learning, and GitHub really has great tutorials to help you with it.
- By the way, you can make "ugly proof of concepts" first, so we can play with the ideas, before trying to make it clean. If the idea is clear, I can also help by writing some of the code for you, or at least pieces of it to help you navigate my mess.
- About the IDs, yeah strings are expensive, so I'm computing a int representation of names so I can look them up efficiently (yeah Timeline's complicated in part because it is very performance-oriented). That makes things harder to follow. Normally you _always_ receive a string, and find it in maps using it's ID, but you should never have to find a name from an ID, if you do you can load the animation from the map.
The way I'd do it, is when an animation is created, removed or rename (there's an event for that), rebuild a list of all layers to create a storable for it, and when an animation starts, find the matching storable from a map (using the ID, not the name, for perf) and update it's value.
Feel free to continue the conversation here, on GitHub or on Discord