From: hgn Date: Wed, 13 Sep 2023 05:20:45 +0000 (+0100) Subject: small updates and api changes X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=f252ecb6f870260e0e944579ef732b94d1ed0ebe;p=carveJwlIkooP6JGAAIwe30JlM.git small updates and api changes --- diff --git a/blender_export.py b/blender_export.py index 50f46c3..2e202ad 100644 --- a/blender_export.py +++ b/blender_export.py @@ -397,6 +397,10 @@ class ent_swspreview(Structure): # Menu # ----------------------------------------------------------------- +class ent_menuitem_visual(Structure): +#{ + _fields_ = [("pstr_name",c_uint32)] +#} class ent_menuitem_slider(Structure): #{ _fields_ = [("id_min",c_uint32), @@ -425,7 +429,8 @@ class ent_menuitem_anon_union(Union): _fields_ = [("slider",ent_menuitem_slider), ("button",ent_menuitem_button), ("checkmark",ent_menuitem_checkmark), - ("page",ent_menuitem_page)] + ("page",ent_menuitem_page), + ("visual",ent_menuitem_visual)] #} class ent_menuitem(Structure): #{ @@ -1320,6 +1325,10 @@ def sr_compile_menus( collection ): item_button = item._anonymous_union.button item_button.pstr = sr_compile_string( obj_data.string ) #} + elif item.type == 0:#{ + item_visual = item._anonymous_union.visual + item_visual.pstr_name = sr_compile_string( obj_data.string ) + #} elif item.type == 3:#{ item_checkmark = item._anonymous_union.checkmark item_checkmark.pstr_data = sr_compile_string( obj_data.string ) @@ -3155,6 +3164,7 @@ class SR_OBJECT_ENT_MENU_ITEM(bpy.types.PropertyGroup): box.prop( data, 'tipo' ) if data.tipo == '0':#{ + box.prop( data, 'string', text='Name' ) return #} elif data.tipo == '1':#{ diff --git a/entity.h b/entity.h index 5ac85d8..ce9424a 100644 --- a/entity.h +++ b/entity.h @@ -298,7 +298,8 @@ enum ent_menuitem_type{ k_ent_menuitem_type_page_button = 2, k_ent_menuitem_type_toggle = 3, k_ent_menuitem_type_slider = 4, - k_ent_menuitem_type_page = 5 + k_ent_menuitem_type_page = 5, + k_ent_menuitem_type_disabled = 90 }; typedef struct ent_menuitem ent_menuitem; @@ -317,6 +318,11 @@ struct ent_menuitem{ }; union{ + struct{ + u32 pstr_name; + } + visual; + struct{ u32 id_min, /* ent_marker */ id_max, /* . */ diff --git a/maps_src/mp_spawn/main.mdl b/maps_src/mp_spawn/main.mdl index ca1d3aa..b07b85f 100644 Binary files a/maps_src/mp_spawn/main.mdl and b/maps_src/mp_spawn/main.mdl differ diff --git a/menu.h b/menu.h index 71b3570..2071440 100644 --- a/menu.h +++ b/menu.h @@ -18,7 +18,14 @@ struct { int disable_open; u32 page, /* current page index */ - page_depth; + page_depth, + controls_page_id; + + ent_menuitem *ctr_kbm, + *ctr_deck, + *ctr_ps, + *ctr_steam, + *ctr_xbox; enum menu_input_mode{ k_menu_input_mode_keys, @@ -50,8 +57,7 @@ static menu; /* * Attaches memory locations to the various items in the menu */ -static void menu_link(void) -{ +static void menu_link(void){ /* link data locations */ for( u32 i=0; ipvoid = NULL; } } + + /* link controllers */ + menu.ctr_deck = NULL; + menu.ctr_kbm = NULL; + menu.ctr_ps = NULL; + menu.ctr_steam = NULL; + menu.ctr_xbox = NULL; + + for( u32 i=0; ivisual.pstr_name, "deck" ) ) + menu.ctr_deck = item; + if( MDL_CONST_PSTREQ( &menu.model, item->visual.pstr_name, "kbm" ) ) + menu.ctr_kbm = item; + if( MDL_CONST_PSTREQ( &menu.model, item->visual.pstr_name, "ps" ) ) + menu.ctr_ps = item; + if( MDL_CONST_PSTREQ( &menu.model, item->visual.pstr_name, "steam" ) ) + menu.ctr_steam = item; + if( MDL_CONST_PSTREQ( &menu.model, item->visual.pstr_name, "xbox" ) ) + menu.ctr_xbox = item; + } } static void menu_close(void){ @@ -136,8 +164,7 @@ static void menu_init(void){ /* * Drop back a page until we're at the bottom which then we jus quit */ -static void menu_back_page(void) -{ +static void menu_back_page(void){ vg_info( "menu_back_page()\n" ); menu.page_depth --; if( menu.page_depth == 0 ){ @@ -156,8 +183,7 @@ static void menu_back_page(void) /* * Open page to the string identifier */ -static void menu_open_page( const char *name ) -{ +static void menu_open_page( const char *name ){ if( menu.page_depth >= MENU_STACK_SIZE ) vg_fatal_error( "Stack overflow\n" ); @@ -203,8 +229,7 @@ static void menu_open_page( const char *name ) /* * activate a pressable type */ -static void menu_trigger_item( ent_menuitem *item ) -{ +static void menu_trigger_item( ent_menuitem *item ){ if ( item->type == k_ent_menuitem_type_event_button ){ u32 q = item->button.pstr; @@ -247,8 +272,7 @@ static void menu_trigger_item( ent_menuitem *item ) } } -static f32 menu_slider_snap( f32 value, f32 old, f32 notch ) -{ +static f32 menu_slider_snap( f32 value, f32 old, f32 notch ){ f32 const k_epsilon = 0.0125f; if( fabsf(notch-value) < k_epsilon ){ @@ -264,6 +288,12 @@ static f32 menu_slider_snap( f32 value, f32 old, f32 notch ) return value; } +static void menu_setitem_type( ent_menuitem *item, + enum ent_menuitem_type type ){ + if( !item ) return; + item->type = type; +} + /* * Run from vg_gui every frame */ @@ -512,6 +542,26 @@ static void menu_update(void){ } } } + + menu_setitem_type( menu.ctr_deck, k_ent_menuitem_type_disabled ); + menu_setitem_type( menu.ctr_ps, k_ent_menuitem_type_disabled ); + menu_setitem_type( menu.ctr_kbm, k_ent_menuitem_type_disabled ); + menu_setitem_type( menu.ctr_xbox, k_ent_menuitem_type_disabled ); + menu_setitem_type( menu.ctr_steam, k_ent_menuitem_type_disabled ); + + if( vg_input.display_input_method == k_input_method_kbm ) + menu_setitem_type( menu.ctr_kbm, k_ent_menuitem_type_visual ); + else{ + if( vg_input.display_input_type == SDL_CONTROLLER_TYPE_PS3 || + vg_input.display_input_type == SDL_CONTROLLER_TYPE_PS4 || + vg_input.display_input_type == SDL_CONTROLLER_TYPE_PS5 ){ + menu_setitem_type( menu.ctr_ps, k_ent_menuitem_type_visual ); + } + else { + menu_setitem_type( menu.ctr_xbox, k_ent_menuitem_type_visual ); + } + /* FIXME: Steam/Deck controller detection? */ + } } /* @@ -541,7 +591,7 @@ VG_STATIC void menu_render(void){ screen = { 0,0, vg.window_x,vg.window_y }; ui_rect_center( screen, panel ); ui_fill( panel, ui_colour(k_ui_bg) ); - ui_outline( panel, 1, ui_colour(k_ui_fg) ); + ui_outline( panel, 1, ui_colour(k_ui_fg), 0 ); ui_rect_pad( panel, (ui_px[]){8,8} ); ui_rect title; @@ -615,6 +665,7 @@ VG_STATIC void menu_render(void){ for( u32 i=0; itype == k_ent_menuitem_type_disabled ) continue; if( item->type == k_ent_menuitem_type_page ) continue; if( !(item->groups & (0x1 << menu.page)) ) continue; diff --git a/models_src/rs_menu.mdl b/models_src/rs_menu.mdl index 4810d7c..74e5e88 100644 Binary files a/models_src/rs_menu.mdl and b/models_src/rs_menu.mdl differ diff --git a/skaterift.c b/skaterift.c index 099ff99..983ca9b 100644 --- a/skaterift.c +++ b/skaterift.c @@ -11,7 +11,7 @@ * ============================================================================= */ -#if 0 +#if 1 #define SR_NETWORKED diff --git a/skaterift_imgui_dev.c b/skaterift_imgui_dev.c index 2a3d282..9618a04 100644 --- a/skaterift_imgui_dev.c +++ b/skaterift_imgui_dev.c @@ -24,7 +24,8 @@ #include "vg/vg.h" static int skaterift_loaded = 0; -static char g_an_buffer[ 4096 ]; +static char g_an_buffer[ 96 ], + g_an_buffer2[ 96 ]; int main( int argc, char *argv[] ){ vg_mem.use_libc_malloc = 0; @@ -105,10 +106,29 @@ VG_STATIC void vg_gui(void){ vg_ui.wants_mouse = 1; - ui_rect panel; + ui_rect panel, content; ui_panel( window, panel ); - ui_enum( panel, "Select enum:", dropdown_options, 3, &dropdown_value ); - ui_checkbox( panel, "Toggly:", &checkbox_value ); + + static i32 page = 0; + ui_tabs( panel, content, + (const char *[]){ "Controls", "Other", "Nothing" }, 3, &page ); + + if( page == 0 ){ + ui_enum( content, "Select enum:", dropdown_options, 3, &dropdown_value ); + ui_checkbox( content, "Toggly:", &checkbox_value ); + ui_textbox( content, "Single:", g_an_buffer, 96, 1, 0, NULL ); + ui_textbox( content, "Multi:", g_an_buffer2, 96, 5, 0, NULL ); + + if( ui_button( content, "Hello" ) == 1 ){ + vg_success( "Ding!\n" ); + } + } + else if( page == 1 ){ + if( ui_button( content, "Another button" ) == 1 ){ + vg_error( "Press\n" ); + } + } + #if 0 ui_fill( window, ui_colour( k_ui_bg+1 ) ); diff --git a/workshop.c b/workshop.c index 341d44a..1414fc6 100644 --- a/workshop.c +++ b/workshop.c @@ -1158,25 +1158,24 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ){ workshop_form_gui_draw_preview( img_box ); /* file path */ - ui_rect null, file_entry, file_button, file_label; - ui_split( content, k_ui_axis_h, 8, 0, null, content ); - ui_split( content, k_ui_axis_h, 28, 0, file_entry, content ); + ui_rect file_button, file_label; char buf[128]; - snprintf( buf, 128, "Addon folder: skaterift/%s", - workshop_filetype_folder() ); - - ui_label( file_entry, buf, 1, 8, file_entry ); + snprintf( buf, 128, + "Addon folder: skaterift/%s", workshop_filetype_folder() ); if( type == k_addon_type_world ){ struct ui_textbox_callbacks callbacks = { .change = workshop_changed_model_path }; - ui_textbox( file_entry, workshop_form.addon_folder, - vg_list_size(workshop_form.addon_folder), 0, &callbacks ); + ui_textbox( content, buf, workshop_form.addon_folder, + vg_list_size(workshop_form.addon_folder), 1, 0, &callbacks ); } else{ + ui_rect file_entry; + ui_standard_widget( content, file_entry, 1 ); ui_split( file_entry, k_ui_axis_v, -128, 0, file_entry, file_button ); + if( workshop_form.file_intent != k_workshop_form_file_intent_none ){ ui_text( file_entry, workshop_form.addon_folder, 1, k_ui_align_middle_left, ui_colour( k_ui_fg+4 ) ); @@ -1196,8 +1195,9 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ){ .change = workshop_changed_model_path }; - ui_textbox( file_entry, workshop_form.addon_folder, - vg_list_size(workshop_form.addon_folder), 0, &callbacks ); + ui_textbox( file_entry, buf, workshop_form.addon_folder, + vg_list_size(workshop_form.addon_folder), 1, + 0, &callbacks ); if( ui_button_text( file_button, "Load", 1 ) == 1 ){ workshop_op_load_model(); @@ -1205,31 +1205,21 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ){ } } - ui_rect title_entry, label; - ui_split( content, k_ui_axis_h, 8, 0, null, content ); - ui_split( content, k_ui_axis_h, 28, 0, title_entry, content ); - const char *str_title = "Title:", *str_desc = "Description:"; - ui_split( title_entry, k_ui_axis_v, - ui_text_line_width(str_title)+8, 0, label, title_entry ); - - ui_rect vis_enum; - ui_split_ratio( title_entry, k_ui_axis_v, 0.6f, 16, - title_entry, vis_enum ); /* title box */ { struct ui_textbox_callbacks callbacks = { .change = workshop_changed_title }; - ui_text( label, str_title, 1, k_ui_align_middle_left, 0 ); - ui_textbox( title_entry, workshop_form.submission.title, - vg_list_size(workshop_form.submission.title), 0, &callbacks ); + ui_textbox( content, str_title, workshop_form.submission.title, + vg_list_size(workshop_form.submission.title), 1, + 0, &callbacks ); } /* visibility option */ { - ui_enum( vis_enum, "Visibility:", workshop_form_visibility_opts, + ui_enum( content, "Visibility:", workshop_form_visibility_opts, 4, &workshop_form.submission.visibility ); } @@ -1238,26 +1228,19 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ){ struct ui_textbox_callbacks callbacks = { .change = workshop_changed_description }; - ui_rect desc_entry; - ui_split( content, k_ui_axis_h, 8, 0, null, content ); - ui_split( content, k_ui_axis_h, 28, 0, label, content ); - ui_split( content, k_ui_axis_h, 28*4, 0, desc_entry, content ); - ui_text( label, str_desc, 1, k_ui_align_middle_left, 0 ); - ui_textbox( desc_entry, workshop_form.submission.description, - vg_list_size(workshop_form.submission.description), - UI_TEXTBOX_MULTILINE|UI_TEXTBOX_WRAP, &callbacks ); + ui_textbox( content, str_desc, workshop_form.submission.description, + vg_list_size(workshop_form.submission.description), 4, + UI_TEXTBOX_MULTILINE|UI_TEXTBOX_WRAP, &callbacks ); } /* submissionable */ - ui_rect submission_row; - ui_split( content, k_ui_axis_h, 8, 0, null, content ); - ui_split( content, k_ui_axis_h, content[3]-32-8, 0, content, - submission_row ); + ui_rect final_row; + ui_split( content, k_ui_axis_h, content[3]-32-8, 0, content, final_row ); ui_rect submission_center; - rect_copy( submission_row, submission_center ); + rect_copy( final_row, submission_center ); submission_center[2] = 256; - ui_rect_center( submission_row, submission_center ); + ui_rect_center( final_row, submission_center ); ui_rect btn_left, btn_right; ui_split_ratio( submission_center, k_ui_axis_v, 0.5f, 8, @@ -1277,15 +1260,14 @@ VG_STATIC void workshop_form_gui_edit_page( ui_rect content ){ "By submitting this item, you agree to the workshop terms of service"; ui_rect disclaimer_row, inner, link; - ui_split( content, k_ui_axis_h, 8, 0, null, content ); - ui_split( content, k_ui_axis_h, content[3]-32, 0, content, - disclaimer_row ); + ui_split( content, k_ui_axis_h, content[3]-32, 0, content, disclaimer_row ); ui_px btn_width = 32; rect_copy( disclaimer_row, inner ); inner[2] = ui_text_line_width( disclaimer_text ) + btn_width+8; + ui_rect label; ui_rect_center( disclaimer_row, inner ); 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} ); @@ -1409,7 +1391,7 @@ VG_STATIC void workshop_form_gui(void) vg_ui.wants_mouse = 1; ui_fill( window, ui_colour( k_ui_bg+1 ) ); - ui_outline( window, 1, ui_colour( k_ui_bg+7 ) ); + ui_outline( window, 1, ui_colour( k_ui_bg+7 ), 0 ); ui_rect title, panel; ui_split( window, k_ui_axis_h, 28, 0, title, panel );