j
[carveJwlIkooP6JGAAIwe30JlM.git] / player_device_dead.h
1 #ifndef PLAYER_DEVICE_DEAD_H
2 #define PLAYER_DEVICE_DEAD_H
3
4 #include "player_interface.h"
5 #include "skeleton.h"
6 #include "player_model.h"
7
8 VG_STATIC
9 struct player_device_dead
10 {
11 int _;
12 }
13 localplayer_device_dead;
14
15 VG_STATIC int player_dead_event( player_device *dev, player_interface *player,
16 enum player_device_event_type ev, void *data )
17 {
18 if( ev == k_player_device_event_update )
19 {
20 player_ragdoll_iter( &player->ragdoll );
21 }
22 else if( ev == k_player_device_event_custom_transition )
23 {
24 copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll,
25 player->rb.v );
26 }
27 else if( ev == k_player_device_event_animate )
28 {
29 v3_zero( dev->pose_root_co );
30 q_identity( dev->pose_root_q );
31
32 for( int i=0; i<vg_list_size( dev->pose ); i ++ )
33 {
34 v3_zero( dev->pose[i].co );
35 v3_fill( dev->pose[i].s, 1.0f );
36 q_identity( dev->pose[i].q );
37 }
38 }
39 else if( ev == k_player_device_event_post_animate )
40 {
41 struct player_avatar *av = player->playeravatar;
42
43 v3_zero( dev->cam_1st.pos );
44 v3_zero( dev->cam_1st.angles );
45 dev->cam_1st.fov = 90.0f;
46
47 /* FIXME: This overwrites pose blending, however, do we need to blend with
48 * this device, anyway? */
49 copy_ragdoll_pose_to_avatar( &player->ragdoll, player->playeravatar );
50 }
51 else
52 return 0;
53
54 return 1;
55 }
56
57 VG_STATIC player_device player_device_dead =
58 {
59 .name = "ragdoll/dead",
60 .event = player_dead_event,
61 .storage = &localplayer_device_dead
62 };
63
64 #endif /* PLAYER_DEVICE_DEAD_H */