Hello, I am currently writing a 2D skeletal animation framework and currently I am a bit stuck on a few things.
a. How should I manage overlaps? Currently the bones are represented in a tree structure, but I have to write my way through sprite overlaps. For example a man should have the torso and the two hands. Should I simply make a priority flag for each bone and on rendering push the bones in a min-heap based on that flag or is there a smarter way? I saw this feature on an application called Demina and it seems very easily done, at least from the GUI I see.
b. Could you please recommend me a file structure to save the bones and their position at certain keyframes? Also should I separate the standing position and specific animations or should all be in the same file? Please do not just say use XML or something like that. I was thinking about naming each bone and saving a pointer in another structure called node for each bone in a hash and for each child that I load from the file just to add it to it's father in constant time, but I think this is a little too complex and would generate much memory overhead.
Keeping bones in memory(file): 0. bone data consist of name/id and its parent bone id/name 1. save all bones to a simple array. 2. for each bone, save the parent bone index 3. sort the bone in the array by a topological sort (adjust the parent bone index accordingly) 4. this way you can process the bones in order and it is ensured, that when you process a bone, that the parent bone has already been processed
Bone/animation format 1. save the bind position, weights in the mesh file. This way you can use one animation/rig for several meshes 2. write one animation file, all keyframes are written in a sequence 3. save meta data like 'idle=frame 1-100, run=101-145,loop ' etc. 4. for each frame: 4.1 for each bone 4.1.1. save a timestamp, a rotation matrix/quaternion, a position relative to its parent bone