#include "skeleton.h"
#include "player_model.h"
+VG_STATIC
struct player_device_dead
{
-};
-
-VG_STATIC void player_dead_pre_update( player_interface *player,
- player_attachment *at )
-{
-}
-
-VG_STATIC void player_dead_update( player_interface *player,
- player_attachment *at )
-{
- player_ragdoll_iter( &player->ragdoll );
-}
-
-VG_STATIC void player_dead_post_update( player_interface *player,
- player_attachment *at )
-{
-}
-
-VG_STATIC void player_dead_ui( player_interface *player,
- player_attachment *at )
-{
+ int _;
}
+localplayer_device_dead;
-VG_STATIC void player_dead_bind( player_interface *player,
- player_attachment *at )
+VG_STATIC int player_dead_event( player_device *dev, player_interface *player,
+ enum player_device_event_type ev, void *data )
{
- copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll,
- player->rb.v );
-}
-
-/* FIXME: This should be an optional function */
-VG_STATIC void player_dead_animate( player_interface *player,
- player_attachment *at )
-{
- v3_zero( at->pose_root_co );
- q_identity( at->pose_root_q );
-
- for( int i=0; i<vg_list_size( at->pose ); i ++ )
+ if( ev == k_player_device_event_update )
{
- v3_zero( at->pose[i].co );
- v3_fill( at->pose[i].s, 1.0f );
- q_identity( at->pose[i].q );
+ player_ragdoll_iter( &player->ragdoll );
}
-}
-
-VG_STATIC void player_dead_post_animate( player_interface *player,
- player_attachment *at )
-{
- struct player_avatar *av = player->playeravatar;
-
- v3_zero( at->cam_1st.pos );
- v3_zero( at->cam_1st.angles );
- at->cam_1st.fov = 90.0f;
-
- /* FIXME: This overwrites pose blending, however, do we need to blend with
- * this device, anyway? */
- copy_ragdoll_pose_to_avatar( &player->ragdoll, player->playeravatar );
-
-#if 0
- v3f vp = {-0.1f,1.8f,0.0f},
- vd = {-1.0f,0.0f,0.0f};
-
- m4x3_mulv( av->sk.final_mtx[ av->id_head-1 ], vp, cam->pos );
- m3x3_mulv( av->sk.final_mtx[ av->id_head-1 ], vd, vd );
-
- v3_zero( cam->angles );
- cam->fov = 119.0f;
-
- skate_camera_vector_look( cam, vd, 1.0f, 0.0f );
-#endif
-}
+ else if( ev == k_player_device_event_custom_transition )
+ {
+ copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll,
+ player->rb.v );
+ }
+ else if( ev == k_player_device_event_animate )
+ {
+ v3_zero( dev->pose_root_co );
+ q_identity( dev->pose_root_q );
+
+ for( int i=0; i<vg_list_size( dev->pose ); i ++ )
+ {
+ v3_zero( dev->pose[i].co );
+ v3_fill( dev->pose[i].s, 1.0f );
+ q_identity( dev->pose[i].q );
+ }
+ }
+ else if( ev == k_player_device_event_post_animate )
+ {
+ struct player_avatar *av = player->playeravatar;
+
+ v3_zero( dev->cam_1st.pos );
+ v3_zero( dev->cam_1st.angles );
+ dev->cam_1st.fov = 90.0f;
+
+ /* FIXME: This overwrites pose blending, however, do we need to blend with
+ * this device, anyway? */
+ copy_ragdoll_pose_to_avatar( &player->ragdoll, player->playeravatar );
+ }
+ else
+ return 0;
-VG_STATIC void player_dead_transport( player_interface *player,
- player_attachment *at,
- teleport_gate *gate )
-{
+ return 1;
}
VG_STATIC player_device player_device_dead =
{
- .pre_update = player_dead_pre_update,
- .update = player_dead_update,
- .post_update = player_dead_post_update,
- .animate = player_dead_animate,
- .post_animate = player_dead_post_animate,
- .debug_ui = player_dead_ui,
- .bind = player_dead_bind,
-#if 0
- .pose = player_dead_pose,
-#endif
+ .name = "ragdoll/dead",
+ .event = player_dead_event,
+ .storage = &localplayer_device_dead
};
+
#endif /* PLAYER_DEVICE_DEAD_H */