seperate gamestate and animator memory (BREAKS: SMOOTHED UPPER YAW)
[carveJwlIkooP6JGAAIwe30JlM.git] / player_dead.c
index da23487d2546d4b5dcd086a8dc20870f1ff189e0..b6312cb5273835dfbbdfc204c8157125e85a0cee 100644 (file)
@@ -8,21 +8,24 @@ VG_STATIC void player__dead_update      ( player_instance *player )
    player_ragdoll_iter( &player->ragdoll );
 }
 
-VG_STATIC void player__dead_animate     ( player_instance *player, 
-                                          player_animation *anim )
-{
-   v3_zero( anim->root_co );
-   q_identity( anim->root_q );
+VG_STATIC void player__dead_animate    ( player_instance *player ){
+   /* nothing here */
+}
+
+VG_STATIC void player__dead_pose        ( player_instance *player ){
+   player_pose *pose = &player->pose;
+   v3_zero( pose->root_co );
+   q_identity( pose->root_q );
    
-   for( int i=0; i<vg_list_size( anim->pose ); i ++ ){
-      v3_zero( anim->pose[i].co );
-      v3_fill( anim->pose[i].s, 1.0f );
-      q_identity( anim->pose[i].q );
+   for( int i=0; i<vg_list_size(pose->keyframes); i ++ ){
+      /* FUUUUTUUREEEE: squangle the rigidbodies back into OK keyframes */
+      v3_zero( pose->keyframes[i].co );
+      v3_fill( pose->keyframes[i].s, 1.0f );
+      q_identity( pose->keyframes[i].q );
    }
 }
 
-VG_STATIC void player__dead_post_animate( player_instance *player )
-{
+VG_STATIC void player__dead_post_animate( player_instance *player ){
    struct player_avatar *av = player->playeravatar;
    struct player_dead   *d  = &player->_dead;
 
@@ -31,22 +34,24 @@ VG_STATIC void player__dead_post_animate( player_instance *player )
 
    struct ragdoll_part *part = &player->ragdoll.parts[ av->id_hip-1 ];
 
-   v3_lerp( d->co_lpf, part->rb.co, vg.frame_delta*4.0f, d->co_lpf );
-   v3_lerp( d->v_lpf,  part->rb.v,  vg.frame_delta*4.0f, d->v_lpf );
-   v3_lerp( d->w_lpf,  part->rb.w,  vg.frame_delta*4.0f, d->w_lpf );
+   v3f ext_co;
+   v4f ext_q;
+   rb_extrapolate( &part->obj.rb, ext_co, ext_q );
+
+   v3_lerp( d->co_lpf, ext_co, vg.time_frame_delta*4.0f, d->co_lpf );
+   v3_lerp( d->v_lpf,  part->obj.rb.v,  vg.time_frame_delta*4.0f, d->v_lpf );
+   v3_lerp( d->w_lpf,  part->obj.rb.w,  vg.time_frame_delta*4.0f, d->w_lpf );
    
    v3_copy( d->co_lpf, player->rb.co );
-   v3_copy( d->v_lpf, player->rb.v );
-   v3_copy( d->w_lpf, player->rb.w );
+   v3_zero( player->rb.v );
+   v3_zero( player->rb.w );
 }
 
-VG_STATIC void player__dead_im_gui      ( player_instance *player )
-{
+VG_STATIC void player__dead_im_gui      ( player_instance *player ){
 
 }
 
-VG_STATIC void player__dead_transition  ( player_instance *player )
-{
+VG_STATIC void player__dead_transition  ( player_instance *player ){
    player->subsystem = k_player_subsystem_dead;
    copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll, 
                                 player->rb.v );
@@ -54,9 +59,9 @@ VG_STATIC void player__dead_transition  ( player_instance *player )
    struct player_avatar *av = player->playeravatar;
    struct ragdoll_part *part = &player->ragdoll.parts[ av->id_hip-1 ];
    struct player_dead   *d  = &player->_dead;
-   v3_copy( part->rb.co, d->co_lpf );
-   v3_copy( part->rb.v,  d->v_lpf );
-   v3_copy( part->rb.w,  d->w_lpf );
+   v3_copy( part->obj.rb.co, d->co_lpf );
+   v3_copy( part->obj.rb.v,  d->v_lpf );
+   v3_copy( part->obj.rb.w,  d->w_lpf );
 }
 
 #endif /* PLAYER_DEAD_C */