Granted, I'm not sure where this is better situated. It is more a feature request for an existing plugin.
Enough forewords, here it comes:
Playing around with SprCal3D I found it quite suitable for my character animation needs, but there is just one thing that is present in the Cal3D library which is passed on quite inadequately in the CrystalSpace SprCal3D plugin.
When using cal3dstate->SetAnimAction(action_name,blend_in,blend_out); where anim_name describes an animation with the "lock" state set (meaning the animation gets stopped at the last frame and won't be faded out) you can't get rid of the animation with any other means than calling sprcal3d->ClearAllAnims(); .
As a quick patch I did what is described in the following diff:
--- sprcal3d.cpp.orig 2005-10-05 12:14:32.000000000 +0200
+++ sprcal3d.cpp 2005-10-05 12:15:49.000000000 +0200
@@ -1756,6 +1756,14 @@
bool csSpriteCal3DMeshObject::SetAnimAction(int idx, float delayIn,
float delayOut)
{
+ if (idx == -1 && last_locked_anim != -1)
+ {
+ calModel.getMixer()->removeAction(last_locked_anim);
+ last_locked_anim = -1;
+ is_idling = false;
+ return true;
+ }
+
if (idx < 0 || (size_t)idx >=factory->anims.Length() )
return false;
To be short, it adds the option to do a cal3dsprite->SetAnimAction(-1,0.0,0.0); to remove the previosly set "locked" anim, though it is lacking any handling when there is more than one locked animation active (as it is with ClearAllAnims() as well).
Hope it helps.