- {
- float fly = player.phys.in_air,
- rate;
-
- if( player.phys.in_air )
- rate = 2.4f;
- else
- rate = 9.0f;
-
- player.ffly = vg_lerpf( player.ffly, fly, rate*vg.time_delta );
- }
-
- struct player_phys *phys = &player.phys;
-
- mdl_keyframe apose[32], bpose[32];
- struct skeleton *sk = &player.mdl.sk;
-
- float walk_norm = (float)player.mdl.anim_walk->length/30.0f,
- run_norm = (float)player.mdl.anim_run->length/30.0f,
- t = player.walk_timer,
- l = vg_get_axis("grabl") * 0.5f + 0.5f;
-
- /* walk/run */
- skeleton_sample_anim( sk, player.mdl.anim_walk, t*walk_norm, apose );
- skeleton_sample_anim( sk, player.mdl.anim_run, t*run_norm, bpose );
-
- skeleton_lerp_pose( sk, apose, bpose, l, apose );
-
- /* idle */
- float idle_walk = vg_minf(l * 10.0f, 1.0f);
-
- skeleton_sample_anim( sk, player.mdl.anim_idle, vg.time*0.1f, bpose );
- skeleton_lerp_pose( sk, apose, bpose, 1.0f-idle_walk, apose );
-
- /* air */
- skeleton_sample_anim( sk, player.mdl.anim_jump, vg.time*0.6f, bpose );
- skeleton_lerp_pose( sk, apose, bpose, player.ffly, apose );
-
- skeleton_apply_pose( &player.mdl.sk, apose, k_anim_apply_defer_ik );
- skeleton_apply_ik_pass( &player.mdl.sk );
- skeleton_apply_pose( &player.mdl.sk, apose, k_anim_apply_deffered_only );
-
- v3_copy( player.mdl.sk.final_mtx[player.mdl.id_head-1][3],
- player.mdl.cam_pos );
-
- skeleton_apply_inverses( &player.mdl.sk );
-
- m4x3f mtx;
- v4f rot;
- q_axis_angle( rot, (v3f){0.0f,1.0f,0.0f}, -player.angles[0] - VG_PIf*0.5f );
- q_m3x3( rot, mtx );
- v3_copy( phys->rb.to_world[3], mtx[3] );
-
- skeleton_apply_transform( &player.mdl.sk, mtx );
- skeleton_debug( &player.mdl.sk );