All the mesh objects I have loaded by OGRE3D have the skeletal poses and animations built into them which simply means that using an Ogre::Entity gives me access to all that information. Assuming you're doing the same, an animation system would allow the following:
- Allow playing multiple animation with varying weights.
- Allow deactivating specific animations
- Play a new animation blending it in while fading existing animations out.
With this wrapped up into a subsystem, you can either choose to expose it to the rest of your game logic either through an interface or through some message queue paradigm.
Realize that certain animations may likely have a higher priority than others too. For example, you want movement animations and attack animations to have similiar priorities so that the player gets the illusion of realistic play with no input lag. Conversely, animations such as deflecting an attack, blood spatter from taking damage, or a dodge animation are great effects, but have a much lower priority.
For example, a player takes damage from an attack from a foe but immediately moves but just doesn't move fast enough. You certainly don't want your being hit animation to affect the realism of the player's movement, and so you may opt to ignore the take damage animation entirely and simply strafe as the player's input dictated. Naturally the sound system may still play the attacked sound clip, but doesn't mean animation must play it either.