X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=menu.h;h=44feffdf8cec1f2d5b219c61db681d149b591a9f;hb=4b8fc63f926737ca0593a4e471550f9f4995c538;hp=30c025d17f085c61ed3961a6ed28490dc7223d61;hpb=7fb47c3eb672f4468da8b5b452c09d44e1389d5f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/menu.h b/menu.h index 30c025d..44feffd 100644 --- a/menu.h +++ b/menu.h @@ -5,7 +5,6 @@ #include "model.h" #include "world_render.h" #include "player.h" -#include "conf.h" #include "shaders/model_menu.h" #include "audio.h" #include "input.h" @@ -14,16 +13,15 @@ #define MENU_STACK_SIZE 8 struct { - int active, credits_open; - f32 factive; + int credits_open; int disable_open; u32 page, /* current page index */ page_depth; enum menu_input_mode{ - k_menu_input_mode_mouse, - k_menu_input_mode_keys + k_menu_input_mode_keys, + k_menu_input_mode_mouse } input_mode; f32 mouse_track, mouse_dist; /* used for waking up mouse */ @@ -97,8 +95,14 @@ static void menu_link(void) } } -static void menu_init(void) -{ +static void menu_close(void){ + skaterift.activity = k_skaterift_default; + menu.page_depth = 0; + menu.page = 0xffffffff; + srinput.enabled = 0; +} + +static void menu_init(void){ void *alloc = vg_mem.rtmemory; mdl_open( &menu.model, "models/rs_menu.mdl", alloc ); @@ -136,8 +140,7 @@ static void menu_back_page(void) vg_info( "menu_back_page()\n" ); menu.page_depth --; if( menu.page_depth == 0 ){ - menu.active = 0; - menu.page = 0xffffffff; + menu_close(); } else{ menu.page = menu.page_stack[ menu.page_depth ].page; @@ -207,12 +210,16 @@ static void menu_trigger_item( ent_menuitem *item ) if( MDL_CONST_PSTREQ( &menu.model, q, "quit" ) ){ vg.window_should_close = 1; } - else if( MDL_CONST_PSTREQ( &menu.model, q, "reset" ) ){ + else if( MDL_CONST_PSTREQ( &menu.model, q, "reset_nearest" ) ){ localplayer_cmd_respawn( 0, NULL ); - - menu.page_depth = 0; - menu.active = 0; - menu.page = 0xffffffff; + menu_close(); + } + else if( MDL_CONST_PSTREQ( &menu.model, q, "reset_home" ) ){ + world_static.active_instance = 0; + world_static.active_trigger_volume_count = 0; + localplayer.viewable_world = world_current_instance(); + localplayer_cmd_respawn( 1, (const char *[]){"start"} ); + menu_close(); } else if( MDL_CONST_PSTREQ( &menu.model, q, "credits" ) ){ menu.credits_open = 1; @@ -251,8 +258,7 @@ static f32 menu_slider_snap( f32 value, f32 old, f32 notch ) /* * Run from vg_gui every frame */ -static void menu_update(void) -{ +static void menu_update(void){ if( workshop_form.page != k_workshop_form_hidden ){ return; } @@ -266,19 +272,15 @@ static void menu_update(void) } if( button_down( k_srbind_mopen ) ){ - if( !menu.active && !menu.disable_open ){ - menu.active = 1; + if( skaterift.activity == k_skaterift_default ){ + skaterift.activity = k_skaterift_menu; menu.page = 0xffffffff; menu_open_page( "Main Menu" ); return; } } - menu.factive = vg_lerpf( menu.factive, menu.active, - vg.time_frame_delta * 6.0f ); - - if( !menu.active ) return; - + if( skaterift.activity != k_skaterift_menu ) return; enum menu_input_mode prev_mode = menu.input_mode; /* get buttons inputs @@ -506,8 +508,7 @@ static void menu_update(void) /* * Run from vg_gui when active */ -VG_STATIC void menu_render(void) -{ +VG_STATIC void menu_render(void){ glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); @@ -521,7 +522,8 @@ VG_STATIC void menu_render(void) shader_blitcolour_uColour( colour ); render_fsquad(); - if( workshop_form.page != k_workshop_form_hidden ){ + if( (workshop_form.page != k_workshop_form_hidden) || + (vg_ui.focused_control_type != k_ui_control_none) ){ return; }