- {
- 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 );
- player.frun = vg_lerpf( player.frun,
- vg_get_axis("walk/push")*0.5f+0.5f,
- 2.0f*vg.time_delta );
- }
-
- struct player_phys *phys = &player.phys;
-
- mdl_keyframe apose[32], bpose[32];
- struct skeleton *sk = &player.mdl.sk;
-
-
- if( player.walk > 0.025f )
- {
- /* TODO move */
- float walk_norm = 30.0f/(float)player.mdl.anim_walk->length,
- run_norm = 30.0f/(float)player.mdl.anim_run->length,
- walk_adv = vg_lerpf( walk_norm, run_norm, player.walk );
-
- player.walk_timer += walk_adv * vg.time_delta;
- }
- else
- {
- player.walk_timer = 0.0f;
- }
-
- 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_clampf( player.frun*15.0f, 0.0f, 1.0f ),
- idle_walk = vg_clampf( (player.frun-0.1f)/(1.0f-0.1f), 0.0f, 1.0f );
-
- /* 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 */
- 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( player.visual_transform[3], mtx[3] );
-
- skeleton_apply_transform( &player.mdl.sk, mtx );
- skeleton_debug( &player.mdl.sk );