X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_device_dead.h;h=56055714d63bf6b24fab80af58f1e60646ee48ef;hb=5430d708f058626a6c8fed7dd2aa8ba5f0a06c84;hp=848e8ecff3bf4bd833f5c52bafbd669c5677607c;hpb=f82c365a9144c3e5e57df88cb57ef273e9e9d47b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_device_dead.h b/player_device_dead.h index 848e8ec..5605571 100644 --- a/player_device_dead.h +++ b/player_device_dead.h @@ -5,84 +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 ) -{ - copy_ragdoll_pose_to_avatar( &player->ragdoll, player->playeravatar ); + int _; } +localplayer_device_dead; -VG_STATIC void player_dead_ui( player_interface *player, - player_attachment *at ) -{ -} - -VG_STATIC void player_dead_bind( player_interface *player, - player_attachment *at ) -{ - copy_avatar_pose_to_ragdoll( player->playeravatar, &player->ragdoll, - player->rb.v ); -} - -VG_STATIC void player_dead_pose( player_interface *player, - player_attachment *at, - player_pose pose, m4x3f transform ) -{ -} - -/* FIXME: player_device_common */ -VG_STATIC void player_skate_get_camera( player_interface *player, - player_attachment *at, camera *cam ); -VG_STATIC void skate_camera_vector_look( camera *cam, v3f v, float C, float k ); - -VG_STATIC void player_dead_get_camera( player_interface *player, - player_attachment *at, camera *cam ) -{ - struct player_avatar *av = player->playeravatar; - - 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 ); -} - -VG_STATIC void player_dead_transport( player_interface *player, - player_attachment *at, - teleport_gate *gate ) +VG_STATIC int player_dead_event( player_device *dev, player_interface *player, + enum player_device_event_type ev, void *data ) { + if( ev == k_player_device_event_update ) + { + player_ragdoll_iter( &player->ragdoll ); + } + 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; ipose ); 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; + + 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, - .get_camera = player_dead_get_camera, - .debug_ui = player_dead_ui, - .bind = player_dead_bind, -#if 0 - .pose = player_dead_pose, -#endif - .gate_transport= player_dead_transport + .name = "ragdoll/dead", + .event = player_dead_event, + .storage = &localplayer_device_dead }; + #endif /* PLAYER_DEVICE_DEAD_H */