- q_axis_angle( dest->root_q, (v3f){0.0f,1.0f,0.0f},
- -w->state.angles[0]-VG_PIf*0.5f );
+
+ float walk_yaw = w->state.heading_angle + VG_PIf*0.5f;
+
+ if( w->state.outro_anim )
+ {
+ float outro_length = (float)w->state.outro_anim->length /
+ w->state.outro_anim->rate,
+ outro_time = vg.time - w->state.outro_start_time,
+ outro_t = outro_time / outro_length;
+
+ walk_yaw += -VG_PIf*0.5f*outro_t;
+
+ /* TODO: Compression */
+ v3_muladds( dest->root_co, player->rb.to_world[1],
+ -0.28f * outro_t, dest->root_co );
+
+ skeleton_sample_anim_clamped( sk, w->state.outro_anim,
+ outro_time, bpose );
+ skeleton_lerp_pose( sk, apose, bpose, outro_t * 10.0f, dest->pose );
+ }
+ else
+ {
+ skeleton_copy_pose( sk, apose, dest->pose );
+ }
+
+ q_axis_angle( dest->root_q, (v3f){0.0f,1.0f,0.0f}, walk_yaw );