From a34dd0d81297f67ae7791904b34da980d0df4788 Mon Sep 17 00:00:00 2001 From: hgn Date: Wed, 17 Apr 2024 18:29:03 +0100 Subject: [PATCH] add rest of original settings --- menu.c | 267 ++++++++++++++++++++++++++++++++++++++++++++++++----- menu.h | 10 +- workshop.c | 3 +- 3 files changed, 251 insertions(+), 29 deletions(-) diff --git a/menu.c b/menu.c index b043dd6..b8695bb 100644 --- a/menu.c +++ b/menu.c @@ -9,6 +9,8 @@ #include "audio.h" #include "workshop.h" #include "gui.h" +#include "control_overlay.h" +#include "network.h" #include "shaders/model_menu.h" struct global_menu menu = { .skip_starter = 0 }; @@ -57,11 +59,11 @@ static void menu_decor_select( ui_rect rect ) static void menu_standard_widget( ui_rect inout_panel, ui_rect rect, ui_px s ) { ui_split( inout_panel, k_ui_axis_h, vg_ui.font->sy*s*2, - 2, rect, inout_panel ); + 8, rect, inout_panel ); } static bool menu_slider( ui_rect inout_panel, bool select, const char *label, - const f32 min, const f32 max, f32 *value, + const f32 disp_min, const f32 disp_max, f32 *value, const char *format ) { ui_rect rect, box; @@ -69,7 +71,7 @@ static bool menu_slider( ui_rect inout_panel, bool select, const char *label, ui_label( rect, label, 1, 8, box ); f32 t; - enum ui_button_state state = ui_slider_base( box, min, max, value, &t ), + enum ui_button_state state = ui_slider_base( box, 0, 1, value, &t ), mask_using = k_ui_button_holding_inside | k_ui_button_holding_outside | @@ -83,8 +85,8 @@ static bool menu_slider( ui_rect inout_panel, bool select, const char *label, f32 m = axis_state( k_sraxis_mbrowse_h ); if( fabsf(m) > 0.5f ) { - *value += m * vg.time_frame_delta * ((max-min) / 2.0f); - *value = vg_clampf( *value, min, max ); + *value += m * vg.time_frame_delta * (1.0f/2.0f); + *value = vg_clampf( *value, 0, 1 ); } menu_decor_select( rect ); @@ -98,13 +100,12 @@ static bool menu_slider( ui_rect inout_panel, bool select, const char *label, GUI_COL_DARK ); ui_outline( box, 1, state? GUI_COL_HI: GUI_COL_ACTIVE, 0 ); - ui_slider_text( box, NULL, *value ); + ui_slider_text( box, format, disp_min + (*value)*( disp_max-disp_min ) ); return (state & mask_using) && 1; } -static enum ui_button_state menu_button( ui_rect inout_panel, bool select, - const char *text ) +static bool menu_button( ui_rect inout_panel, bool select, const char *text ) { ui_rect rect; menu_standard_widget( inout_panel, rect, 1 ); @@ -146,10 +147,100 @@ static enum ui_button_state menu_button( ui_rect inout_panel, bool select, ui_outline( rect, 1, GUI_COL_CLICK, 0 ); } else + { ui_fill( rect, select? GUI_COL_ACTIVE: GUI_COL_NORM ); + if( select ) + ui_outline(rect, 1, GUI_COL_HI, 0 ); + } ui_text( rect, text, 1, k_ui_align_middle_center, 0 ); - return state; + return state == k_ui_button_click; +} + +static bool menu_checkbox( ui_rect inout_panel, bool select, + const char *str_label, i32 *data ) +{ + ui_rect rect, label, box; + menu_standard_widget( inout_panel, rect, 1 ); + + ui_split( rect, k_ui_axis_v, -rect[3], 0, label, box ); + ui_text( label, str_label, k_ui_scale, k_ui_align_middle_left, 0 ); + + enum ui_button_state state = k_ui_button_none; + + if( menu.input_mode == k_menu_input_mode_keys ) + { + if( select ) + { + menu_decor_select( rect ); + + if( button_down( k_srbind_maccept ) ) + { + *data = (*data) ^ 0x1; + state = k_ui_button_click; + } + } + } + else + { + state = ui_checkbox_base( box, data ); + select = 0; + } + + if( state == k_ui_button_holding_inside ) + { + ui_fill( box, GUI_COL_ACTIVE ); + ui_outline( box, 1, GUI_COL_CLICK, 0 ); + } + else if( state == k_ui_button_holding_outside ) + { + ui_fill( box, GUI_COL_DARK ); + ui_outline( box, 1, GUI_COL_CLICK, 0 ); + } + else if( state == k_ui_button_hover ) + { + ui_fill( box, GUI_COL_ACTIVE ); + ui_outline( box, 1, GUI_COL_HI, 0 ); + } + else + { + ui_fill( box, select? GUI_COL_ACTIVE: GUI_COL_DARK ); + ui_outline( box, 1, select? GUI_COL_HI: GUI_COL_NORM, 0 ); + } + + bool changed = (state == k_ui_button_click); + + if( *data ) + { + ui_rect_pad( box, (ui_px[2]){8,8} ); + ui_fill( box, GUI_COL_HI ); + } + + return changed; +} + +static void menu_heading( ui_rect inout_panel, const char *label ) +{ + ui_rect rect; + menu_standard_widget( inout_panel, rect, 1 ); + + rect[0] -= 8; + rect[2] += 16; + + u32 c0 = ui_opacity( GUI_COL_DARK, 0.36f ), + c1 = ui_opacity( GUI_COL_DARK, 0.5f ); + + struct ui_vert *vs = ui_fill( rect, c0 ); + + vs[0].colour = c1; + vs[1].colour = c1; + + rect[1] += 4; + ui_text( rect, label, 1, k_ui_align_middle_center, 1 ); + rect[0] += 1; + rect[1] -= 1; + ui_text( rect, label, 1, k_ui_align_middle_center, + ui_colour(k_ui_blue+k_ui_brighter) ); } void menu_gui(void) @@ -205,6 +296,59 @@ void menu_gui(void) if( skaterift.activity != k_skaterift_menu ) return; + if( vg.settings_open ) + { + if( button_down( k_srbind_mback ) ) + { + vg_settings_close(); + srinput.state = k_input_state_resume; + } + + return; + } + + if( menu.page == k_menu_page_credits ) + { + ui_rect panel = { 0,0, 600, 400 }, + 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, "Skate Rift - Credits", 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, "Mt.Zero Software", 1, k_ui_align_middle_center, 0 ); + + ui_split( panel, k_ui_axis_h, 8, 0, title, panel ); + ui_split( panel, k_ui_axis_h, 28*2, 0, title, panel ); + ui_font_face( &vgf_default_title ); + ui_text( title, "Free Software", 1, k_ui_align_middle_center, 0 ); + + ui_split( panel, k_ui_axis_h, 8, 0, title, panel ); + ui_font_face( &vgf_default_large ); + ui_text( panel, + "Sam Lantinga - SDL2 - libsdl.org\n" + "Hunter WB - Anyascii\n" + "David Herberth - GLAD\n" + "Dominic Szablewski - QOI - qoiformat.org\n" + "Sean Barrett - stb_image, stb_vorbis,\n" + " stb_include\n" + "Khronos Group - OpenGL\n" + , 1, k_ui_align_left, 0 ); + + if( button_down( k_srbind_mback ) ) + { + menu.page = k_menu_page_main; + } + + goto menu_draw; + } /* TOP BAR * -------------------------------------------------------------------*/ @@ -216,7 +360,8 @@ void menu_gui(void) const char *opts[] = { [k_menu_main_main] = "Menu", [k_menu_main_map] = "Map", - [k_menu_main_settings ] = "Settings" + [k_menu_main_settings ] = "Settings", + [k_menu_main_guide ] = "Guides" }; /* TAB CONTROL */ @@ -400,43 +545,115 @@ void menu_gui(void) return; } - ui_rect list = { vg.window_x/2 - 512/2, height+64, - 512, vg.window_y-height-128 }; + ui_rect list0 = { vg.window_x/2 - 512/2, height+32, + 512, vg.window_y-height-64 }, list; + rect_copy( list0, list ); + ui_rect_pad( list, (ui_px[2]){8,8} ); - if( (mv < 0) && (menu.main_row<2) ) menu.main_row ++; - if( (mv > 0) && (menu.main_row>0) ) menu.main_row --; + i32 *row = (i32 *[]) + { + [k_menu_main_main] = &menu.main_row, + [k_menu_main_settings] = &menu.settings_row, + [k_menu_main_guide] = &menu.guides_row + } + [ menu.main_index ]; + + if( mv < 0 ) *row = (*row) +1; + if( mv > 0 ) *row = vg_max( 0, (*row) -1 ); /* MAIN / MAIN * -------------------------------------------------------------------*/ if( menu.main_index == k_menu_main_main ) { - if( menu_button( list, menu.main_row == 0, "Thing 1" ) == - k_ui_button_click ) + *row = vg_min( 2, *row ); + + if( menu_button( list, *row == 0, "Resume" ) ) { - vg_info( "A\n" ); + skaterift.activity = k_skaterift_default; + return; } - if( menu_button( list, menu.main_row == 1, "Thing 2" ) == - k_ui_button_click ) + if( menu_button( list, *row == 1, "Credits" ) ) { - vg_info( "B\n" ); + menu.page = k_menu_page_credits; } - if( menu_button( list, menu.main_row == 2, "Quit Game" ) == - k_ui_button_click ) + ui_rect end = { list[0], list[1]+list[3]-64, list[2], 72 }; + if( menu_button( end, *row == 2, "Quit Game" ) ) { - vg_info( "C\n" ); + vg.window_should_close = 1; } } else if( menu.main_index == k_menu_main_settings ) { + ui_fill( list0, ui_opacity( GUI_COL_DARK, 0.36f ) ); + ui_outline( list0, 1, GUI_COL_NORM, 0 ); + *row = vg_min( 8, *row ); + + ui_font_face( &vgf_default_large ); + list[1] -= 8; + menu_heading( list, "Game" ); + menu_checkbox( list, *row == 0, "Show controls overlay", + &control_overlay.enabled ); + menu_checkbox( list, *row == 1, "Auto connect to global server", + &network_client.auto_connect ); + + menu_heading( list, "Audio/Video" ); + menu_slider( list, *row == 2, "Volume", 0, 100, + &vg_audio.external_global_volume, "%.f%%" ); + menu_slider( list, *row == 3, "Resolution", 0, 100, + &k_render_scale, "%.f%%" ); + menu_checkbox( list, *row == 4, "Motion Blur", &k_blur_effect ); + + menu_heading( list, "Camera" ); + menu_slider( list, *row == 5, "Fov", 97, 135, + &k_fov, "%.1f\xb0" ); + menu_slider( list, *row == 6, "Cam Height", -0.4f, +1.4f, + &k_cam_height, vg_lerpf(-0.4f,1.4f,k_cam_height)>=0.0f? + "+%.2fm": "%.2fm" ); + menu_checkbox( list, *row == 7, "Invert Y Axis", &k_invert_y ); + + + ui_rect end = { list[0], list[1]+list[3]-64, list[2], 72 }; + ui_font_face( &vgf_default_small ); + menu_heading( end, "Advanced" ); + if( menu_button( end, *row == 8, "Open Engine Settings" ) ) + { + vg_settings_open(); + } + } + else if( menu.main_index == k_menu_main_guide ) + { + ui_fill( list0, ui_opacity( GUI_COL_DARK, 0.36f ) ); + ui_outline( list0, 1, GUI_COL_NORM, 0 ); + *row = vg_min( 4, *row ); + ui_font_face( &vgf_default_large ); - static f32 tester; - menu_slider( list, menu.main_row==0, "Yo", 0, 20, &tester, NULL ); + list[1] -= 8; + menu_heading( list, "Controls" ); + if( menu_button( list, *row == 0, "Skating \xb2" ) ) + { + } + if( menu_button( list, *row == 1, "Tricks \xb2" ) ) + { + } + + menu_heading( list, "Workshop" ); + if( menu_button( list, *row == 2, "Create a Board \xb2" ) ) + { + } + if( menu_button( list, *row == 3, "Create a World \xb2" ) ) + { + } + if( menu_button( list, *row == 4, "Create a Playermodel \xb2" ) ) + { + } } } +menu_draw: + vg_ui.frosting = 0.015f; ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y ); vg_ui.frosting = 0.0f; diff --git a/menu.h b/menu.h index e9a27e1..6d9b880 100644 --- a/menu.h +++ b/menu.h @@ -10,14 +10,16 @@ enum menu_page k_menu_page_any, k_menu_page_starter, k_menu_page_premium, - k_menu_page_main + k_menu_page_main, + k_menu_page_credits }; enum menu_main_subpage { k_menu_main_main = 0, k_menu_main_map = 1, - k_menu_main_settings = 2 + k_menu_main_settings = 2, + k_menu_main_guide = 3 }; struct global_menu @@ -26,7 +28,9 @@ struct global_menu i32 skip_starter; enum menu_page page; i32 main_index, - main_row; + main_row, + settings_row, + guides_row; enum menu_input_mode { diff --git a/workshop.c b/workshop.c index 10c4829..3bd2f16 100644 --- a/workshop.c +++ b/workshop.c @@ -1274,7 +1274,8 @@ static void workshop_form_gui_edit_page( ui_rect content ){ ui_split( inner, k_ui_axis_v, inner[2]-btn_width, 0, label, btn_right); ui_rect_pad( btn_right, (ui_px[2]){2,2} ); - if( ui_button_text( btn_right, "\xbf", 2 ) == 1 ){ + if( ui_button_text( btn_right, "\xb2", 2 ) == 1 ) + { ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( hSteamFriends, "https://steamcommunity.com/sharedfiles/workshoplegalagreement", -- 2.25.1