}
}
+static void lerp_player_pose( player_pose *pose0, player_pose *pose1, f32 t,
+ player_pose *posed ){
+ struct skeleton *sk = &localplayer.playeravatar->sk;
+
+ v3_lerp( pose0->root_co, pose1->root_co, t, posed->root_co );
+ q_nlerp( pose0->root_q, pose1->root_q, t, posed->root_q );
+ posed->type = pose0->type;
+ posed->board.lean = vg_lerpf( pose0->board.lean, pose1->board.lean, t );
+
+ if( pose0->type != pose1->type ){
+ /* it would be nice to apply IK pass in-keyframes. TOO BAD! */
+ skeleton_copy_pose( sk, pose0->keyframes, posed->keyframes );
+ }
+ else {
+ skeleton_lerp_pose( sk, pose0->keyframes, pose1->keyframes, t,
+ posed->keyframes );
+ }
+}
+
static void player__animate_from_replay( replay_buffer *replay ){
replay_frame *frame = replay->cursor_frame,
*next = NULL;
sys0->pose( a0, &pose0 );
sys1->pose( a1, &pose1 );
- v3_lerp( pose0.root_co, pose1.root_co, t, localplayer.pose.root_co );
- q_nlerp( pose0.root_q, pose1.root_q, t, localplayer.pose.root_q );
- localplayer.pose.type = pose0.type;
- localplayer.pose.board.lean = vg_lerpf( pose0.board.lean,
- pose1.board.lean, t );
-
- struct skeleton *sk = &localplayer.playeravatar->sk;
- if( pose0.type != pose1.type ){
- /* it would be nice to apply IK pass in-keyframes. TOO BAD! */
- skeleton_copy_pose( sk, pose0.keyframes,
- localplayer.pose.keyframes );
- }
- else {
- skeleton_lerp_pose( sk, pose0.keyframes, pose1.keyframes,
- t, localplayer.pose.keyframes );
- }
+ lerp_player_pose( &pose0, &pose1, t, &localplayer.pose );
}
else{
struct player_subsystem_interface