- if( !player->immobile )
- rb_extrapolate( &player->rb, animator->root_co, animator->root_q );
- else{
- v3_copy( player->rb.co, animator->root_co );
- v4_copy( player->rb.q, animator->root_q );
- }
-
- f32 walk_yaw = player_get_heading_yaw( player );
- if( w->state.outro_type ){
- struct player_avatar *av = player->playeravatar;
- struct skeleton_anim *anim =
- player_walk_outro_anim( player, w->state.outro_type );
- f32 outro_length = (f32)anim->length / anim->rate,
- outro_time = vg.time - w->state.outro_start_time;
- animator->outro_t = outro_time / outro_length;
-
- if( w->state.outro_type == k_walk_outro_drop_in ){
- float inv_rate = 1.0f / anim->rate,
- anim_frames = anim->length * inv_rate,
- step_frames = 12.0f * inv_rate,
- commit_frames = 6.0f * inv_rate,
- drop_frames = anim_frames - step_frames,
- step_t = vg_minf( 1.0f, outro_time / step_frames ),
- remaind_time = vg_maxf( 0.0f, outro_time - step_frames ),
- dop_t = vg_minf( 1.0f, remaind_time / drop_frames );
- animator->commit_t = vg_minf( 1.0f, remaind_time / commit_frames );
-
- walk_yaw = vg_alerpf( w->state.drop_in_start_angle,
- w->state.drop_in_angle, step_t );
-
- v3_lerp( w->state.drop_in_start, w->state.drop_in_target,
- step_t, player->rb.co );
- q_axis_angle( animator->root_q, (v3f){0.0f,1.0f,0.0f},
- walk_yaw + VG_PIf );
-
- v3_copy( w->state.drop_in_foot_anchor, animator->foot_anchor );
-
- /* the drop in bit */
- if( step_t >= 1.0f ){
- v4f final_q;
- player_walk_drop_in_overhang_transform( player, dop_t,
- player->rb.co, final_q );
- q_mul( final_q, animator->root_q, animator->root_q );
-
- v4_copy( animator->root_q, player->rb.q );
- v3_muladds( animator->root_co, player->rb.to_world[1],
- -0.1f*dop_t, animator->root_co );
- }
- return;
- }
- else{
- v3_muladds( animator->root_co, player->rb.to_world[1],
- -0.1f*animator->outro_t, animator->root_co );
- }
+ player_walk_animate_generic();
+ if( w->state.activity == k_walk_activity_odrop_in ){
+ player_walk_animate_drop_in();
+ }
+
+ if( (w->state.activity == k_walk_activity_odrop_in) ||
+ (w->state.activity == k_walk_activity_oregular) ||
+ (w->state.activity == k_walk_activity_oair) ){
+ localplayer.cam_velocity_influence = w->animator.transition_t;
+ }
+ else if( w->state.activity == k_walk_activity_ipopoff ){
+ localplayer.cam_velocity_influence = 1.0f-w->animator.transition_t;