return i;
}
+ vg_error( "skeleton_bone_id( *, \"%s\" );\n", name );
+ vg_fatal_exit_loop( "Bone does not exist\n" );
+
return 0;
}
-VG_STATIC void keyframe_copy_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, int num )
+VG_STATIC void keyframe_copy_pose( mdl_keyframe *kfa, mdl_keyframe *kfb,
+ int num )
{
for( int i=0; i<num; i++ )
kfb[i] = kfa[i];
/*
* Lerp between two sets of keyframes and store in dest. Rotations use Nlerp.
*/
-VG_STATIC void keyframe_lerp_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, float t,
- mdl_keyframe *kfd, int count )
+VG_STATIC void keyframe_lerp_pose( mdl_keyframe *kfa, mdl_keyframe *kfb,
+ float t, mdl_keyframe *kfd, int count )
{
if( t <= 0.01f )
{
keyframe_lerp_pose( kfa, kfb, t, kfd, skele->bone_count-1 );
}
+VG_STATIC void skeleton_copy_pose( struct skeleton *skele,
+ mdl_keyframe *kfa, mdl_keyframe *kfd )
+{
+ keyframe_copy_pose( kfa, kfd, skele->bone_count-1 );
+}
+
/*
* Sample animation between 2 closest frames using time value. Output is a
* keyframe buffer that is allocated with an appropriate size
* Get an animation by name
*/
VG_STATIC struct skeleton_anim *skeleton_get_anim( struct skeleton *skele,
- const char *name )
+ const char *name )
{
for( int i=0; i<skele->anim_count; i++ )
{
return anim;
}
+ vg_error( "skeleton_get_anim( *, \"%s\" )\n", name );
+ vg_fatal_exit_loop( "Invalid animation name\n" );
+
return NULL;
}