-VG_STATIC void player__animate( player_instance *player ){
- if( _player_animate[ player->subsystem ] ){
- player_animation res;
- res.type = k_player_animation_type_fk;
-
- _player_animate[ player->subsystem ]( player, &res );
+static void apply_full_skeleton_pose( struct skeleton *sk, player_pose *pose,
+ m4x3f *final_mtx ){
+ m4x3f transform;
+ q_m3x3( pose->root_q, transform );
+ v3_copy( pose->root_co, transform[3] );
+
+ if( pose->type == k_player_pose_type_ik ){
+ skeleton_apply_pose( sk, pose->keyframes,
+ k_anim_apply_defer_ik, final_mtx );
+ skeleton_apply_ik_pass( sk, final_mtx );
+ skeleton_apply_pose( sk, pose->keyframes,
+ k_anim_apply_deffered_only, final_mtx );
+ skeleton_apply_inverses( sk, final_mtx );
+ skeleton_apply_transform( sk, transform, final_mtx );
+ }
+ else if( pose->type == k_player_pose_type_fk_2 ){
+ skeleton_apply_pose( sk, pose->keyframes,
+ k_anim_apply_always, final_mtx );
+ skeleton_apply_inverses( sk, final_mtx );
+ skeleton_apply_transform( sk, transform, final_mtx );
+ }
+}