From 39ea155774da82304b0d039c16de15cb022bd175 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 23 Apr 2024 13:57:52 +0100 Subject: [PATCH] prem page, repeater, link filter. --- menu.c | 224 +++++++++++++++++++++++++++++++++++++++++----------- menu.h | 7 +- skaterift.c | 3 +- 3 files changed, 185 insertions(+), 49 deletions(-) diff --git a/menu.c b/menu.c index aea8e60..4e965d9 100644 --- a/menu.c +++ b/menu.c @@ -92,6 +92,8 @@ static bool menu_slider( ui_rect inout_panel, bool select, const char *label, menu_decor_select( rect ); state |= k_ui_button_hover; } + else + state = k_ui_button_none; } ui_rect line = { box[0], box[1], t * (f32)box[2], box[3] }; @@ -300,6 +302,15 @@ static void menu_try_find_cam( i32 id ) } } +static void menu_link_modal( const char *url ) +{ + menu.web_link = url; + + /* Only reset the choice of browser if 'No' was selected. */ + if( menu.web_choice == 2 ) + menu.web_choice = 0; +} + void menu_gui(void) { if( button_down( k_srbind_mopen ) ) @@ -319,14 +330,40 @@ void menu_gui(void) /* get buttons inputs * -------------------------------------------------------------------*/ - int ml = button_down( k_srbind_mleft ), - mr = button_down( k_srbind_mright ), - mu = button_down( k_srbind_mup ), - md = button_down( k_srbind_mdown ), + int ml = button_press( k_srbind_mleft ), + mr = button_press( k_srbind_mright ), + mu = button_press( k_srbind_mup ), + md = button_press( k_srbind_mdown ), mh = ml-mr, mv = mu-md, enter = button_down( k_srbind_maccept ); + /* TAB CONTROL */ + u8 lb_down = 0, rb_down = 0; + vg_exec_input_program( k_vg_input_type_button_u8, + (vg_input_op[]){ + vg_joy_button, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, vg_end + }, &rb_down ); + vg_exec_input_program( k_vg_input_type_button_u8, + (vg_input_op[]){ + vg_joy_button, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, vg_end + }, &lb_down ); + + int mtab = (i32)rb_down - (i32)lb_down; + + if( menu.repeater > 0.0f ) + { + menu.repeater -= vg_minf( vg.time_frame_delta, 0.5f ); + mv = 0; + mh = 0; + mtab = 0; + } + else + { + if( mv || mh || mtab ) + menu.repeater += 0.2f; + } + if( vg_input.display_input_method == k_input_method_kbm ) { vg_ui.wants_mouse = 1; @@ -334,6 +371,75 @@ void menu_gui(void) if( skaterift.activity != k_skaterift_menu ) return; + + if( menu.web_link ) + { + ui_rect panel = { 0,0, 800, 200 }, + screen = { 0,0, vg.window_x,vg.window_y }; + ui_rect_center( screen, panel ); + ui_fill( panel, GUI_COL_DARK ); + ui_outline( panel, 1, GUI_COL_NORM, 0 ); + ui_rect_pad( panel, (ui_px[]){8,8} ); + + ui_rect title; + ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); + ui_font_face( &vgf_default_title ); + ui_text( title, "Open Link?", 1, k_ui_align_middle_center, 0 ); + + ui_split( panel, k_ui_axis_h, 28, 0, title, panel ); + ui_font_face( &vgf_default_large ); + ui_text( title, menu.web_link, 1, k_ui_align_middle_center, 0 ); + + ui_rect end = { panel[0], panel[1] + panel[3] - 48, panel[2], 48 }; + + ui_rect a,b,c; + ui_split_ratio( end, k_ui_axis_v, 2.0/3.0, 2, a, c ); + ui_split_ratio( a, k_ui_axis_v, 1.0/2.0, 2, a, b ); + + i32 R = menu_nav( &menu.web_choice, mh, 2 ); + + if( menu_button( a, R==0, "Steam Overlay" ) ) + { + if( steam_ready ) + { + ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); + SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( hSteamFriends, + menu.web_link, + k_EActivateGameOverlayToWebPageMode_Default ); + menu.web_link = NULL; + } + } + + if( menu_button( b, R==1, "Web Browser" ) ) + { + char buf[512]; + vg_str str; + vg_strnull( &str, buf, sizeof(buf) ); +#ifdef _WIN32 + vg_strcat( &str, "start " ); +#else + vg_strcat( &str, "xdg-open " ); +#endif + vg_strcat( &str, menu.web_link ); + + if( vg_strgood(&str) ) + system( buf ); + + menu.web_link = NULL; + } + + if( menu_button( c, R==2, "No" ) || button_down( k_srbind_mback ) ) + { + audio_lock(); + audio_oneshot( &audio_ui[3], 1.0f, 0.0f ); + audio_unlock(); + menu.web_link = NULL; + } + + goto menu_draw; + } + + if( vg.settings_open ) { if( button_down( k_srbind_mback ) ) @@ -427,6 +533,46 @@ void menu_gui(void) menu_try_find_cam( 3 ); goto menu_draw; } + else if( menu.page == k_menu_page_premium ) + { + i32 R = menu_nav( &menu.prem_row, mh, 1 ); + ui_rect panel = { 0,0, 600, 400 }, + screen = { 0,0, vg.window_x,vg.window_y }; + ui_rect_center( screen, panel ); + ui_fill( panel, ui_opacity( GUI_COL_DARK, 0.35f ) ); + ui_outline( panel, 1, GUI_COL_NORM, 0 ); + ui_rect_pad( panel, (ui_px[]){8,8} ); + + ui_rect title; + ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); + ui_font_face( &vgf_default_title ); + ui_text( title, "Content is in the full game.", + 1, k_ui_align_middle_center, 0 ); + + ui_split( panel, k_ui_axis_h, 28, 0, title, panel ); + ui_font_face( &vgf_default_large ); + + ui_rect end = { panel[0], panel[1] + panel[3] - 48, panel[2], 48 }, a,b; + ui_split_ratio( end, k_ui_axis_v, 0.5f, 2, a, b ); + + if( menu_button( a, R == 0, "Store Page" ) ) + { + if( steam_ready ) + SteamAPI_ISteamFriends_ActivateGameOverlayToStore( + SteamAPI_SteamFriends(), 2103940, k_EOverlayToStoreFlag_None); + } + + if( menu_button( b, R == 1, "Nah" ) || button_down( k_srbind_mback ) ) + { + audio_lock(); + audio_oneshot( &audio_ui[3], 1.0f, 0.0f ); + audio_unlock(); + skaterift.activity = k_skaterift_default; + return; + } + + goto menu_draw; + } /* TOP BAR * -------------------------------------------------------------------*/ @@ -442,39 +588,19 @@ void menu_gui(void) [k_menu_main_guide ] = "Guides" }; - /* TAB CONTROL */ - u8 lb_down = 0, rb_down = 0; - vg_exec_input_program( k_vg_input_type_button_u8, - (vg_input_op[]){ - vg_joy_button, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, vg_end - }, &rb_down ); - vg_exec_input_program( k_vg_input_type_button_u8, - (vg_input_op[]){ - vg_joy_button, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, vg_end - }, &lb_down ); - - if( menu.repeater > 0.0f ) - { - menu.repeater -= vg_minf( vg.time_frame_delta, 0.5f ); - } - else + if( mtab ) { - if( lb_down != rb_down ) - { - menu.main_index += rb_down; - menu.main_index -= lb_down; - menu.repeater += 0.2f; + menu.main_index += mtab; - if( menu.main_index == -1 ) - menu.main_index ++; + if( menu.main_index == -1 ) + menu.main_index ++; - if( menu.main_index == vg_list_size(opts) ) - menu.main_index --; + if( menu.main_index == vg_list_size(opts) ) + menu.main_index --; - audio_lock(); - audio_oneshot( &audio_ui[3], 1.0f, 0.0f ); - audio_unlock(); - } + audio_lock(); + audio_oneshot( &audio_ui[3], 1.0f, 0.0f ); + audio_unlock(); } ui_px x = 0, spacer = 8; @@ -827,42 +953,46 @@ void menu_gui(void) ui_font_face( &vgf_default_large ); list[1] -= 8; menu_heading( list, "Info", 0 ); - if( R == 0 ) menu_try_find_cam( 1 ); - if( menu_button( list, R == 0, "Where to go" ) ) - { - } + if( menu_button( list, R == 0, "Where to go" ) ) menu.guide_sel = 1; + if( menu.guide_sel == 1 ) menu_try_find_cam( 1 ); - if( R == 1 ) menu_try_find_cam( 0 ); - if( menu_button( list, R == 1, "Finding worlds" ) ) - { - } + if( menu_button( list, R == 1, "Finding worlds" ) ) menu.guide_sel = 2; + if( menu.guide_sel == 2 ) menu_try_find_cam( 0 ); - if( R == 2 ) menu_try_find_cam( 2 ); - if( menu_button( list, R == 2, "Playing Online" ) ) - { - } + if( menu_button( list, R == 2, "Playing Online" ) ) menu.guide_sel = 3; + if( menu.guide_sel == 3 ) menu_try_find_cam( 2 ); menu_heading( list, "Controls", 0 ); - if( R >= 3 ) menu_try_find_cam( 3 ); if( menu_button( list, R == 3, "Skating \xb2" ) ) { + menu_link_modal( + "https://skaterift.com/index.php?page=skating" ); } + if( menu.guide_sel == 0 || menu.guide_sel > 3 ) menu_try_find_cam( 3 ); + if( menu_button( list, R == 4, "Tricks \xb2" ) ) { + menu_link_modal( + "https://skaterift.com/index.php?page=tricks" ); } menu_heading( list, "Workshop", 0 ); if( menu_button( list, R == 5, "Create a Board \xb2" ) ) { + menu_link_modal( + "https://skaterift.com/index.php?page=workshop_board" ); } if( menu_button( list, R == 6, "Create a World \xb2" ) ) { + menu_link_modal( + "https://skaterift.com/index.php?page=workshop_world" ); } if( menu_button( list, R == 7, "Create a Playermodel \xb2" ) ) { + menu_link_modal( + "https://skaterift.com/index.php?page=workshop_player" ); } } - } menu_draw: diff --git a/menu.h b/menu.h index b7b8f68..9086b83 100644 --- a/menu.h +++ b/menu.h @@ -32,13 +32,18 @@ struct global_menu main_row, settings_row, guides_row, - intro_row; + intro_row, + guide_sel, + prem_row; f32 mouse_dist; /* used for waking up mouse */ f32 repeater; bool bg_blur; ent_camera *bg_cam; + + const char *web_link; /* if set; modal */ + i32 web_choice; } extern menu; diff --git a/skaterift.c b/skaterift.c index 89ee898..e88f7e3 100644 --- a/skaterift.c +++ b/skaterift.c @@ -456,7 +456,8 @@ static void present_view_with_post_processing(void){ static void render_player_transparent(void) { - if( (menu.page == k_menu_page_main) && + if( (skaterift.activity == k_skaterift_menu) && + (menu.page == k_menu_page_main) && (menu.main_index == k_menu_main_guide) ) { return; -- 2.25.1