refactor network packets
[carveJwlIkooP6JGAAIwe30JlM.git] / player_render.c
index 22938b5f76468ba53ff052af4d6a4baa132d34f2..3f72657b1d8ed87c89bfce9504f88a0100d90774 100644 (file)
@@ -202,6 +202,25 @@ static void player_copy_frame_animator( replay_frame *frame ){
    }
 }
 
+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;
@@ -223,22 +242,7 @@ static void player__animate_from_replay( replay_buffer *replay ){
          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