X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_dead.c;h=1f6087be079b30fe671ac9235b0d881ecfc0ad42;hb=e311bbe2fa903a7e2a922f202f389b799193195d;hp=8c558eeb33f1e77e12f00018f480c98aeaf50c60;hpb=ce0205fd929e5fb1446f8c52fcab344884d82569;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_dead.c b/player_dead.c index 8c558ee..1f6087b 100644 --- a/player_dead.c +++ b/player_dead.c @@ -2,14 +2,15 @@ #define PLAYER_DEAD_C #include "player.h" +#include "gui.h" static void player__dead_update(void){ player_ragdoll_iter( &localplayer.ragdoll ); } static void player__dead_post_update(void){ - struct player_avatar *av = localplayer.playeravatar; - struct ragdoll_part *part = &localplayer.ragdoll.parts[ av->id_hip-1 ]; + struct ragdoll_part *part = + &localplayer.ragdoll.parts[ localplayer.id_hip-1 ]; struct player_dead *d = &player_dead; v3f ext_co; @@ -23,14 +24,28 @@ static void player__dead_post_update(void){ v3_copy( d->co_lpf, localplayer.rb.co ); v3_zero( localplayer.rb.v ); v3_zero( localplayer.rb.w ); + + if( (skaterift.activity == k_skaterift_default) && + button_down(k_srbind_dead_respawn) ){ + ent_spawn *spawn = world_find_closest_spawn( + world_current_instance(), localplayer.rb.co ); + + if( spawn ){ + v3_copy( spawn->transform.co, localplayer.rb.co ); + player__reset(); + srinput.state = k_input_state_resume; + } + else { + vg_error( "No spawns!\n" ); + } + } } static void player__dead_animate(void){ struct player_dead *d = &player_dead; struct player_dead_animator *animator = &d->animator; struct player_ragdoll *rd = &localplayer.ragdoll; - struct player_avatar *av = localplayer.playeravatar; - struct skeleton *sk = &av->sk; + struct skeleton *sk = &localplayer.skeleton; m4x3f transforms[ 32 ]; @@ -101,8 +116,7 @@ static void player__dead_animate(void){ static void player__dead_pose( void *_animator, player_pose *pose ){ struct player_dead_animator *animator = _animator; struct player_ragdoll *rd = &localplayer.ragdoll; - struct player_avatar *av = localplayer.playeravatar; - struct skeleton *sk = &av->sk; + struct skeleton *sk = &localplayer.skeleton; pose->type = k_player_pose_type_fk_2; pose->board.lean = 0.0f; @@ -126,20 +140,33 @@ static void player__dead_im_gui(void){ static void player__dead_transition(void){ localplayer.subsystem = k_player_subsystem_dead; - copy_avatar_pose_to_ragdoll( localplayer.playeravatar, &localplayer.ragdoll, - localplayer.rb.v ); + copy_localplayer_to_ragdoll( &localplayer.ragdoll, localplayer.rb.v ); - struct player_avatar *av = localplayer.playeravatar; - struct ragdoll_part *part = &localplayer.ragdoll.parts[ av->id_hip-1 ]; + struct ragdoll_part *part = + &localplayer.ragdoll.parts[ localplayer.id_hip-1 ]; v3_copy( part->obj.rb.co, player_dead.co_lpf ); v3_copy( part->obj.rb.v, player_dead.v_lpf ); v3_copy( part->obj.rb.w, player_dead.w_lpf ); + + gui_helper_clear(); + vg_str str; + + struct gui_helper *h; + if( (h = gui_new_helper(input_button_list[k_srbind_reset], &str) )){ + vg_strcat( &str, "rewind" ); + + if( world_static.active_instance == k_world_purpose_hub ) + h->greyed = 1; + } + + if( gui_new_helper(input_button_list[k_srbind_dead_respawn], &str )) + vg_strcat( &str, "spawn" ); } static void player__dead_animator_exchange( bitpack_ctx *ctx, void *data ){ struct player_dead_animator *animator = data; - for( u32 i=0; isk.bone_count; i ++ ){ + for( u32 i=0; itransforms[i].co ); bitpack_qquat( ctx, animator->transforms[i].q ); }