seperate gamestate and animator memory (BREAKS: SMOOTHED UPPER YAW)
[carveJwlIkooP6JGAAIwe30JlM.git] / player_dead.c
1 #ifndef PLAYER_DEAD_C
2 #define PLAYER_DEAD_C
3
4 #include "player.h"
5
6 VG_STATIC void player__dead_update ( player_instance *player )
7 {
8 player_ragdoll_iter( &player->ragdoll );
9 }
10
11 VG_STATIC void player__dead_animate ( player_instance *player ){
12 /* nothing here */
13 }
14
15 VG_STATIC void player__dead_pose ( player_instance *player ){
16 player_pose *pose = &player->pose;
17 v3_zero( pose->root_co );
18 q_identity( pose->root_q );
19
20 for( int i=0; i<vg_list_size(pose->keyframes); i ++ ){
21 /* FUUUUTUUREEEE: squangle the rigidbodies back into OK keyframes */
22 v3_zero( pose->keyframes[i].co );
23 v3_fill( pose->keyframes[i].s, 1.0f );
24 q_identity( pose->keyframes[i].q );
25 }
26 }
27
28 VG_STATIC void player__dead_post_animate( player_instance *player ){
29 struct player_avatar *av = player->playeravatar;
30 struct player_dead *d = &player->_dead;
31
32 copy_ragdoll_pose_to_avatar( &player->ragdoll, player->playeravatar );
33 player->cam_velocity_influence = 1.0f;
34
35 struct ragdoll_part *part = &player->ragdoll.parts[ av->id_hip-1 ];
36
37 v3f ext_co;
38 v4f ext_q;
39 rb_extrapolate( &part->obj.rb, ext_co, ext_q );
40
41 v3_lerp( d->co_lpf, ext_co, vg.time_frame_delta*4.0f, d->co_lpf );
42 v3_lerp( d->v_lpf, part->obj.rb.v, vg.time_frame_delta*4.0f, d->v_lpf );
43 v3_lerp( d->w_lpf, part->obj.rb.w, vg.time_frame_delta*4.0f, d->w_lpf );
44
45 v3_copy( d->co_lpf, player->rb.co );
46 v3_zero( player->rb.v );
47 v3_zero( player->rb.w );
48 }
49
50 VG_STATIC void player__dead_im_gui ( player_instance *player ){
51
52 }
53
54 VG_STATIC void player__dead_transition ( player_instance *player ){
55 player->subsystem = k_player_subsystem_dead;
56 copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll,
57 player->rb.v );
58
59 struct player_avatar *av = player->playeravatar;
60 struct ragdoll_part *part = &player->ragdoll.parts[ av->id_hip-1 ];
61 struct player_dead *d = &player->_dead;
62 v3_copy( part->obj.rb.co, d->co_lpf );
63 v3_copy( part->obj.rb.v, d->v_lpf );
64 v3_copy( part->obj.rb.w, d->w_lpf );
65 }
66
67 #endif /* PLAYER_DEAD_C */