launch option to load world
[carveJwlIkooP6JGAAIwe30JlM.git] / player_dead.c
index 8f7170e281a78105207ec6ff99f766f1f7ae6da7..1f6087be079b30fe671ac9235b0d881ecfc0ad42 100644 (file)
@@ -2,6 +2,7 @@
 #define PLAYER_DEAD_C
 
 #include "player.h"
+#include "gui.h"
 
 static void player__dead_update(void){
    player_ragdoll_iter( &localplayer.ragdoll );
@@ -23,6 +24,21 @@ 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){
@@ -131,6 +147,20 @@ static void player__dead_transition(void){
    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 ){