1 #ifndef PLAYER_DEVICE_DEAD_H
2 #define PLAYER_DEVICE_DEAD_H
4 #include "player_interface.h"
6 #include "player_model.h"
9 struct player_device_dead
13 localplayer_device_dead
;
15 VG_STATIC
int player_dead_event( player_device
*dev
, player_interface
*player
,
16 enum player_device_event_type ev
, void *data
)
18 if( ev
== k_player_device_event_update
)
20 player_ragdoll_iter( &player
->ragdoll
);
22 else if( ev
== k_player_device_event_custom_transition
)
24 copy_avatar_pose_to_ragdoll( player
->playeravatar
, &player
->ragdoll
,
27 else if( ev
== k_player_device_event_animate
)
29 v3_zero( dev
->pose_root_co
);
30 q_identity( dev
->pose_root_q
);
32 for( int i
=0; i
<vg_list_size( dev
->pose
); i
++ )
34 v3_zero( dev
->pose
[i
].co
);
35 v3_fill( dev
->pose
[i
].s
, 1.0f
);
36 q_identity( dev
->pose
[i
].q
);
39 else if( ev
== k_player_device_event_post_animate
)
41 struct player_avatar
*av
= player
->playeravatar
;
43 v3_zero( dev
->cam_1st
.pos
);
44 v3_zero( dev
->cam_1st
.angles
);
45 dev
->cam_1st
.fov
= 90.0f
;
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
);
57 VG_STATIC player_device player_device_dead
=
59 .name
= "ragdoll/dead",
60 .event
= player_dead_event
,
61 .storage
= &localplayer_device_dead
64 #endif /* PLAYER_DEVICE_DEAD_H */