fix geo crash & backflips
[carveJwlIkooP6JGAAIwe30JlM.git] / player_device_dead.h
index 9a0ed20940049aab2a269bd81eb53877455322d6..56055714d63bf6b24fab80af58f1e60646ee48ef 100644 (file)
@@ -5,97 +5,60 @@
 #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 */