static void miniworld_helper_default(void){
gui_helper_clear();
vg_str text;
- if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text ))
- vg_strcat( &text, "Enter World" );
if( gui_new_helper( input_button_list[k_srbind_miniworld_teleport],&text))
vg_strcat( &text, "Teleport" );
+
+ if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text ))
+ vg_strcat( &text, "Enter World" );
}
static void miniworld_helper_tele(void){
mdl_transform_m4x3( &miniworld->transform, global_miniworld.mmdl );
global_miniworld.active = miniworld;
+ global_miniworld.mode = 0;
+ global_miniworld.dest_spawn = NULL;
miniworld_helper_default();
}
else if( call->function == 1 ){
global_miniworld.active = NULL;
+ global_miniworld.mode = 0;
+ global_miniworld.dest_spawn = NULL;
gui_helper_clear();
if( miniworld->proxy ){
miniworld_icon( cam, icon, challenge->transform.co, 1.0f );
}
-#if 0
- for( u32 i=0; i<mdl_arrcount(&dest_world->ent_skateshop); i++ ){
- ent_skateshop *shop = mdl_arritm( &dest_world->ent_skateshop, i );
- if( shop->type == k_skateshop_type_boardshop ){
- miniworld_icon( cam, k_gui_icon_board, shop->transform.co, 1.0f );
- }
- else if( shop->type == k_skateshop_type_worldshop ){
- miniworld_icon( cam, k_gui_icon_world, shop->transform.co, 1.0f );
- }
- }
-#endif
-
for( u32 i=0; i<mdl_arrcount(&dest_world->ent_route); i++ ){
ent_route *route = mdl_arritm( &dest_world->ent_route, i );
if( global_miniworld.mode ){
global_miniworld.mode = 0;
+ global_miniworld.dest_spawn = 0;
menu.disable_open = 0;
srinput.state = k_input_state_resume;
gui_helper_clear();
v3_zero( mmdl[3] );
float pad = dy*0x1p-4f*0.125f;
- mmdl[3][0] = pad*2.0f;
mmdl[3][1] = pad;
for( u32 i=0; i<gui.helper_count; i++ ){
vg_strnull( &str, buf, sizeof(buf) );
vg_input_string( &str, helper->binding, 1 );
+ f32 bs = (f32)vg.window_x / (f32)(gui.helper_count+1),
+ x = ((f32)i + 1.0f) * bs;
+ mmdl[3][0] = x - font3d_string_width( 2, buf )*0.5f*scale;
+
font3d_setcolour( (v4f){1.0f,1.0f,1.0f, helper->greyed? 0.5f: 1.0f} );
font3d_simple_draw( 2, buf, &ortho, mmdl );
font3d_draw( helper->text );
float w = gui_font3d.offset[0]+1.0f;
- mmdl[3][0] += w*scale;
}
}
k_srbind_sit,
k_srbind_use,
k_srbind_reset,
+ k_srbind_dead_respawn,
k_srbind_camera,
k_srbind_mleft,
k_srbind_mright,
},
[k_srbind_use] = INPUT_BASIC( SDLK_e, SDL_CONTROLLER_BUTTON_Y ),
[k_srbind_reset] = INPUT_BASIC( SDLK_r, SDL_CONTROLLER_BUTTON_LEFTSHOULDER ),
+[k_srbind_dead_respawn] =
+ INPUT_BASIC( SDLK_q, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ),
[k_srbind_camera]= INPUT_BASIC( SDLK_c, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ),
[k_srbind_mleft] = INPUT_BASIC( SDLK_LEFT, SDL_CONTROLLER_BUTTON_DPAD_LEFT ),
[k_srbind_mright]= INPUT_BASIC( SDLK_RIGHT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT ),
vg_gui_visible, 1,
vg_joy_button, SDL_CONTROLLER_BUTTON_X, vg_end
},
-[k_srbind_miniworld_teleport]= INPUT_BASIC( SDLK_r, SDL_CONTROLLER_BUTTON_X ),
+[k_srbind_miniworld_teleport]= INPUT_BASIC( SDLK_q,
+ SDL_CONTROLLER_BUTTON_LEFTSHOULDER ),
[k_srbind_max]=NULL
};
}
else if( MDL_CONST_PSTREQ( &menu.model, q, "reset" ) ){
+ srinput.state = k_input_state_resume;
menu_close();
ent_miniworld_goback();
}
#include "network_common.h"
#include "world_routes.h"
#include "ent_miniworld.h"
+#include "gui.h"
static int localplayer_cmd_respawn( int argc, const char *argv[] ){
ent_spawn *rp = NULL, *r;
*/
static void player__pre_update(void){
- if( button_down( k_srbind_camera ) && !localplayer.immobile ){
+ if( button_down( k_srbind_camera ) && !localplayer.immobile &&
+ (localplayer.subsystem != k_player_subsystem_dead) ){
if( localplayer.cam_control.camera_mode == k_cam_firstperson )
localplayer.cam_control.camera_mode = k_cam_thirdperson;
else
static void player__reset(void){
replay_clear( &skaterift.replay );
+ gui_helper_clear();
v3_zero( localplayer.rb.v );
v3_zero( localplayer.rb.w );
#define PLAYER_DEAD_C
#include "player.h"
+#include "gui.h"
static void player__dead_update(void){
player_ragdoll_iter( &localplayer.ragdoll );
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){
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 ){