From 6a6539bcfeb7bd693251f7aae31056671a65c0f0 Mon Sep 17 00:00:00 2001 From: hgn Date: Mon, 15 May 2023 03:16:27 +0100 Subject: [PATCH 1/1] its a menu, fuck off --- blender_export.py | 14 +- conf.h | 19 +- entity.h | 8 + menu.h | 1360 +++++++++++++--------------------------- model.h | 4 + models_src/rs_menu.mdl | Bin 195728 -> 145472 bytes render.h | 2 + skaterift.c | 13 +- skaterift_imgui_dev.c | 11 +- 9 files changed, 465 insertions(+), 966 deletions(-) diff --git a/blender_export.py b/blender_export.py index cb3b990..b7068fe 100644 --- a/blender_export.py +++ b/blender_export.py @@ -372,7 +372,8 @@ class ent_menuitem_button(Structure): class ent_menuitem_checkmark(Structure): #{ _fields_ = [("id_check",c_uint32), - ("pstr_data",c_uint32)] + ("pstr_data",c_uint32), + ("offset",c_float*3)] #} class ent_menuitem_page(Structure): @@ -393,10 +394,12 @@ class ent_menuitem_anon_union(Union): class ent_menuitem(Structure): #{ _fields_ = [("type",c_uint32), ("groups",c_uint32), - ("id_links",c_uint32*4), + ("id_links",c_uint32*4), + ("factive",c_float), ("fvisible",c_float), #-- TODO: Refactor this into a simple mesh structure ("transform",mdl_transform), ("submesh_start",c_uint32),("submesh_count",c_uint32), + ("_u64",c_uint64), #-- end ("_anonymous_union", ent_menuitem_anon_union)] #} @@ -1149,7 +1152,7 @@ def sr_compile_fonts( collection ): def sr_compile_menus( collection ): #{ - print( "[SR] Compiling menus" ) + print( "[SR1] Compiling menus" ) groups = [] for obj in collection.all_objects:#{ @@ -1182,12 +1185,17 @@ def sr_compile_menus( collection ): item_checkmark = item._anonymous_union.checkmark item_checkmark.pstr_data = sr_compile_string( obj_data.string ) item_checkmark.id_check = sr_entity_id( obj_data.checkmark ) + delta = obj_data.checkmark.location - obj.location + item_checkmark.offset[0] = delta[0] + item_checkmark.offset[1] = delta[2] + item_checkmark.offset[2] = -delta[1] #} elif item.type == 4:#{ item_slider = item._anonymous_union.slider item_slider.id_min = sr_entity_id( obj_data.slider_minloc ) item_slider.id_max = sr_entity_id( obj_data.slider_maxloc ) item_slider.id_handle = sr_entity_id( obj_data.slider_handle ) + item_slider.pstr_data = sr_compile_string( obj_data.string ) #} elif item.type == 5:#{ item_page = item._anonymous_union.page diff --git a/conf.h b/conf.h index eecd540..63b635a 100644 --- a/conf.h +++ b/conf.h @@ -6,19 +6,22 @@ #define SKATERIFT_APPID 2103940 -VG_STATIC float cl_fov = 0.86f, - cl_blur_strength = 0.3f; -VG_STATIC int cl_blur = 1, - cl_playermdl_id = 0, - cl_invert_y = 0; +VG_STATIC f32 cl_fov = 0.86f, + cl_blur_strength = 0.3f; +VG_STATIC i32 cl_blur = 1, + cl_playermdl_id = 0, + cl_invert_y = 0; VG_STATIC void g_conf_init(void) { - VG_VAR_F32( cl_fov, flags=VG_VAR_PERSISTENT ); - VG_VAR_I32( cl_invert_y, flags=VG_VAR_PERSISTENT ); - VG_VAR_I32( cl_blur, flags=VG_VAR_PERSISTENT ); VG_VAR_F32( cl_blur_strength, flags=VG_VAR_PERSISTENT ); VG_VAR_I32( cl_playermdl_id, flags=VG_VAR_PERSISTENT ); + + vg_console_reg_var( "blur_effect", &cl_blur, + k_var_dtype_i32, VG_VAR_PERSISTENT ); + vg_console_reg_var( "invert_y", &cl_invert_y, + k_var_dtype_i32, VG_VAR_PERSISTENT ); + vg_console_reg_var( "fov", &cl_fov, k_var_dtype_f32, VG_VAR_PERSISTENT ); } #endif /* CONF_H */ diff --git a/entity.h b/entity.h index 6e30ef2..a92f4bf 100644 --- a/entity.h +++ b/entity.h @@ -256,10 +256,17 @@ typedef struct ent_menuitem ent_menuitem; struct ent_menuitem{ u32 type, groups, id_links[4]; /* ent_menuitem */ + f32 factive, fvisible; mdl_transform transform; u32 submesh_start, submesh_count; + union{ u64 _u64; /* force storage for 64bit pointers */ + i32 *pi32; + f32 *pf32; + void *pvoid; + }; + union{ struct{ u32 id_min, /* ent_marker */ @@ -277,6 +284,7 @@ struct ent_menuitem{ struct{ u32 id_check, /* ent_menuitem */ pstr_data; + v3f offset; /* relative to parent */ } checkmark; diff --git a/menu.h b/menu.h index d41017d..3d8eaf0 100644 --- a/menu.h +++ b/menu.h @@ -16,8 +16,23 @@ struct { int disable_open; u32 page, /* current page index */ - page_stack[ MENU_STACK_SIZE ], page_depth; + + enum menu_input_mode{ + k_menu_input_mode_mouse, + k_menu_input_mode_keys + } + input_mode; + f32 mouse_track, mouse_dist; /* used for waking up mouse */ + f32 slider_offset; + + struct page_stack_frame { + u32 page; + ent_menuitem *loc; + ent_camera *cam; + } + page_stack[ MENU_STACK_SIZE ]; + ent_menuitem *loc; ent_camera *cam; camera view; @@ -30,6 +45,55 @@ struct { } static menu; +/* + * Attaches memory locations to the various items in the menu + */ +static void menu_link(void) +{ + /* link data locations */ + for( u32 i=0; itype == k_ent_menuitem_type_toggle || + item->type == k_ent_menuitem_type_slider ){ + + const char *name; + + if( item->type == k_ent_menuitem_type_slider ) + name = mdl_pstr( &menu.model, item->slider.pstr_data ); + else + name = mdl_pstr( &menu.model, item->checkmark.pstr_data ); + vg_var *var = vg_console_match_var( name ); + + if( var ){ + if( ( item->type == k_ent_menuitem_type_slider && + var->data_type != k_var_dtype_f32 + ) || + ( item->type == k_ent_menuitem_type_toggle &&! + ( var->data_type == k_var_dtype_i32 || + var->data_type == k_var_dtype_u32 + ) + ) + ){ + vg_error( "Cannot hook to data %s(%p), because it is type %d.\n", + name, var, var->data_type ); + item->pvoid = NULL; + } + else{ + item->pvoid = var->data; + } + } + else{ + vg_error( "No data named %s\n", name ); + item->pvoid = NULL; + } + } + else{ + item->pvoid = NULL; + } + } +} + static void menu_init(void) { void *alloc = vg_mem.rtmemory; @@ -61,8 +125,35 @@ static void menu_init(void) shader_model_menu_register(); } +/* + * Drop back a page until we're at the bottom which then we jus quit + */ +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; + } + else{ + menu.page = menu.page_stack[ menu.page_depth ].page; + menu.cam = menu.page_stack[ menu.page_depth ].cam; + + if( menu.input_mode == k_menu_input_mode_keys ) + menu.loc = menu.page_stack[ menu.page_depth ].loc; + else menu.loc = NULL; + } +} + +/* + * Open page to the string identifier + */ static void menu_open_page( const char *name ) { + if( menu.page_depth >= MENU_STACK_SIZE ) + vg_fatal_error( "Stack overflow\n" ); + vg_info( "Try to open %s\n", name ); u32 hash = vg_strdjb2( name ); @@ -71,56 +162,106 @@ static void menu_open_page( const char *name ) if( item->type == k_ent_menuitem_type_page ){ if( mdl_pstreq( &menu.model, item->page.pstr_name, name, hash ) ){ - menu.page = __builtin_ctz( item->groups ); - vg_info( "menu page: %u\n", menu.page ); + u32 new_page = __builtin_ctz( item->groups ); - if( item->page.id_entrypoint ){ - u32 id = mdl_entity_id_id( item->page.id_entrypoint ); - menu.loc = mdl_arritm( &menu.items, id ); + if( new_page == menu.page ){ + menu_back_page(); } - - if( item->page.id_viewpoint ){ - u32 id = mdl_entity_id_id( item->page.id_viewpoint ); - menu.cam = mdl_arritm( &menu.cameras, id ); + else{ + menu.page_stack[ menu.page_depth ].page = menu.page; + menu.page_stack[ menu.page_depth ].cam = menu.cam; + menu.page_stack[ menu.page_depth ++ ].loc = menu.loc; + menu.page = __builtin_ctz( item->groups ); + + if( menu.input_mode == k_menu_input_mode_keys ){ + if( item->page.id_entrypoint ){ + u32 id = mdl_entity_id_id( item->page.id_entrypoint ); + menu.loc = mdl_arritm( &menu.items, id ); + } + } + + if( item->page.id_viewpoint ){ + u32 id = mdl_entity_id_id( item->page.id_viewpoint ); + menu.cam = mdl_arritm( &menu.cameras, id ); + } + vg_info( "menu page: %u (%p,%p)\n", + menu.page, menu.loc, menu.cam ); } - - menu.page_stack[ menu.page_depth ++ ] = menu.page; return; } } } } -static void menu_back_page(void) +/* + * activate a pressable type + */ +static void menu_trigger_item( ent_menuitem *item ) { - if( menu.page_depth == 0 ){ - menu.active = 0; + if ( item->type == k_ent_menuitem_type_event_button ){ + u32 q = item->button.pstr; + + if( MDL_CONST_PSTREQ( &menu.model, q, "quit" ) ){ + vg.window_should_close = 1; + } + else if( MDL_CONST_PSTREQ( &menu.model, q, "reset" ) ){ + localplayer_cmd_respawn( 0, NULL ); + + menu.page_depth = 0; + menu.active = 0; + menu.page = 0xffffffff; + } } - else{ - menu.page = menu.page_stack[ -- menu.page_depth ]; + else if( item->type == k_ent_menuitem_type_page_button ){ + menu_open_page( mdl_pstr( &menu.model, item->button.pstr ) ); + } + else if( item->type == k_ent_menuitem_type_toggle ){ + if( item->pi32 ){ + *item->pi32 = *item->pi32 ^ 0x1; + } + } +} + +static f32 menu_slider_snap( f32 value, f32 old, f32 notch ) +{ + f32 const k_epsilon = 0.0125f; + + if( fabsf(notch-value) < k_epsilon ){ + if( fabsf(notch-old) > k_epsilon ){ + audio_lock(); + audio_oneshot( &audio_ui[0], 1.0f, 0.0f ); + audio_unlock(); + } + + return notch; } + else + return value; } +/* + * Run from vg_gui every frame + */ static void menu_update(void) { if( button_down( k_srbind_mopen ) ){ if( !menu.active && !menu.disable_open ){ menu.active = 1; + 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.factive > 0.01f ){ - - } - if( !menu.active ) return; - if( !menu.loc ) return; - if( !menu.cam ) return; + enum menu_input_mode prev_mode = menu.input_mode; + + /* get buttons inputs + * -------------------------------------------------------------------*/ int ml = button_down( k_srbind_mleft ), mr = button_down( k_srbind_mright ), mu = button_down( k_srbind_mup ), @@ -129,995 +270,334 @@ static void menu_update(void) mv = mu-md, enter = button_down( k_srbind_maccept ), escape = button_down( k_srbind_mback ); - - if( escape ){ - menu_back_page(); - } - else if( enter ){ - if ( menu.loc->type == k_ent_menuitem_type_event_button ){ - } - else if( menu.loc->type == k_ent_menuitem_type_page_button ){ - menu_open_page( mdl_pstr( &menu.model, menu.loc->button.pstr ) ); - } - else if( menu.loc->type == k_ent_menuitem_type_toggle ){ - - } + if( mh||mv||enter ){ + menu.input_mode = k_menu_input_mode_keys; } - else if( mh||mv ){ - v3f opt; - v3_zero( opt ); - f32 best = 0.707f; - ent_menuitem *nextpos = NULL; - - opt[0] += mh; - opt[2] += mv; - mdl_transform_vector( &menu.cam->transform, opt, opt ); - - for( u32 i=0; i<4; i++ ){ - u32 id = menu.loc->id_links[i]; - if( !id ) continue; - u32 index = mdl_entity_id_id( id ); - - ent_menuitem *other = mdl_arritm( &menu.items, index ); - v3f delta; - v3_sub( menu.loc->transform.co, other->transform.co, delta ); - v3_normalize( delta ); - - f32 score = v3_dot( delta, opt ); - if( score > best ){ - best = score; - nextpos = other; - } - } - if( nextpos ){ - menu.loc = nextpos; + /* get mouse inputs + * --------------------------------------------------------------------*/ + menu.mouse_dist += v2_length( vg.mouse_delta ); /* TODO: Move to UI */ + menu.mouse_track += vg.time_frame_delta; + if( menu.mouse_track > 0.1f ){ + menu.mouse_track = fmodf( menu.mouse_track, 0.1f ); + if( menu.mouse_dist > 10.0f ){ + menu.input_mode = k_menu_input_mode_mouse; + menu.mouse_dist = 0.0f; } } -} - -VG_STATIC void menu_render(void) -{ - glEnable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - glBlendEquation(GL_FUNC_ADD); - - shader_blitcolour_use(); - shader_blitcolour_uColour( (v4f){ 0.1f, 0.1f, 0.3f, menu.factive*0.5f } ); - render_fsquad(); - - glEnable( GL_DEPTH_TEST ); - glDisable( GL_BLEND ); - - if( menu.cam ){ - menu.view.fov = menu.cam->fov; - menu.view.farz = 150.0f; - menu.view.nearz = 0.01f; - v3_copy( menu.cam->transform.co, menu.view.pos ); - - v3f v0; - mdl_transform_vector( &menu.cam->transform, (v3f){0.0f,-1.0f,0.0f}, v0 ); - player_vector_angles( menu.view.angles, v0, 1.0f, 0.0f ); - camera_update_transform( &menu.view ); - camera_update_view( &menu.view ); - camera_update_projection( &menu.view ); - camera_finalize( &menu.view ); - } - else return; - - shader_model_menu_use(); - shader_model_menu_uTexMain( 1 ); - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, menu.texture ); - shader_model_menu_uPv( menu.view.mtx.pv ); - shader_model_menu_uPvmPrev( menu.view.mtx_prev.pv ); - - mesh_bind( &menu.mesh ); - - for( u32 i=0; itype == k_ent_menuitem_type_page ) continue; - if( !(item->groups & (0x1 << menu.page)) ) continue; + if( ui_clicking(UI_MOUSE_LEFT) || ui_clicking(UI_MOUSE_RIGHT) ){ + menu.input_mode = k_menu_input_mode_mouse; + } + + if( menu.input_mode == k_menu_input_mode_mouse ){ + /* + * handle mouse input + * ------------------------------------------------------------*/ + vg_ui.wants_mouse = 1; + + /* + * this raycasting is super cumbersome because all the functions were + * designed for other purposes. we dont care though. + */ + m4x4f inverse; + m4x4_inv( menu.view.mtx.p, inverse ); + v4f coords; + coords[0] = vg_ui.mouse[0]; + coords[1] = vg.window_y - vg_ui.mouse[1]; + v2_div( coords, (v2f){ vg.window_x, vg.window_y }, coords ); + v2_muls( coords, 2.0f, coords ); + v2_add( coords, (v2f){-1.0f,-1.0f}, coords ); + coords[2] = 1.0f; + coords[3] = 1.0f; + m4x4_mulv( inverse, coords, coords ); + v3f ray; + m3x3_mulv( menu.view.transform, coords, ray ); + v3_normalize( ray ); + + if( menu.loc && (menu.loc->type == k_ent_menuitem_type_slider) && + ui_clicking(UI_MOUSE_LEFT) && menu.loc->pf32 ){ + + u32 il = mdl_entity_id_id( menu.loc->slider.id_min ), + ir = mdl_entity_id_id( menu.loc->slider.id_max ); + ent_marker *ml = mdl_arritm( &menu.markers, il ), + *mr = mdl_arritm( &menu.markers, ir ); + + v3f q2; + v3_muladds( menu.view.pos, ray, 100.0f, q2 ); + + f32 s,t; + v3f c1, c2; + + closest_segment_segment( ml->transform.co, mr->transform.co, + menu.view.pos, q2, &s,&t, c1,c2 ); + + if( ui_click_down(UI_MOUSE_LEFT) ){ + menu.slider_offset = *menu.loc->pf32 - s; + } - if( item == menu.loc ){ - shader_model_menu_uColour( (v4f){ 0.1f,0.25f,0.9f,1.0f} ); - } - else{ - shader_model_menu_uColour( (v4f){ 1.0f,1.0f,1.0f,1.0f} ); - } + f32 newvalue = vg_clampf( s+menu.slider_offset, 0.0f, 1.0f ); - m4x3f mmdl; - mdl_transform_m4x3( &item->transform, mmdl ); - shader_model_menu_uMdl( mmdl ); + newvalue = menu_slider_snap( newvalue, *menu.loc->pf32, 0.00f ); + newvalue = menu_slider_snap( newvalue, *menu.loc->pf32, 1.00f ); + newvalue = menu_slider_snap( newvalue, *menu.loc->pf32, 0.25f ); + newvalue = menu_slider_snap( newvalue, *menu.loc->pf32, 0.50f ); + newvalue = menu_slider_snap( newvalue, *menu.loc->pf32, 0.75f ); - for( u32 j=0; jsubmesh_count; j++ ){ - u32 index = item->submesh_start + j; - mdl_draw_submesh( mdl_arritm( &menu.model.submeshs, index )); + *menu.loc->pf32 = newvalue; + return; } - } -} - -#endif /* MENU_H */ - -#if 0 -#ifndef MENU_H -#define MENU_H - -#include "common.h" -#include "model.h" -#include "world_render.h" -#include "player.h" -#include "conf.h" - -#include "shaders/model_menu.h" -#include "vg_steam_friends.h" - -VG_STATIC mdl_context menu_model; -VG_STATIC mdl_array_ptr menu_markers; -VG_STATIC glmesh menu_glmesh; -VG_STATIC m4x3f menu_mdl_mtx; -VG_STATIC float menu_opacity = 0.0f; -VG_STATIC float menu_input_cooldown = 0.0f; -VG_STATIC float menu_fov_target = 97.0f, - menu_smooth_fov = 97.0f; -VG_STATIC v2f menu_extra_angles; -VG_STATIC v3f menu_camera_pos; -VG_STATIC v2f menu_camera_angles; - -VG_STATIC int cl_menu = 0, - cl_menu_go_away = 0; - -VG_STATIC int menu_enabled(void){ return cl_menu; } - -VG_STATIC const char *playermodels[] = { "ch_new", "ch_jordan", "ch_outlaw" }; - -GLuint tex_menu; - -#if 0 -VG_STATIC struct input_binding input_menu_h, - input_menu_v, - input_menu_press, - input_menu_back, - input_menu_toggle, - input_menu_toggle_kbm; -#endif - -VG_STATIC void menu_btn_quit( int event ); -VG_STATIC void menu_btn_skater( int event ); -VG_STATIC void menu_btn_blur( int event ); -VG_STATIC void menu_btn_fuckoff( int event ); -VG_STATIC void menu_btn_reset( int event ); -VG_STATIC void menu_btn_map( int event ); -VG_STATIC void menu_btn_settings( int event ); -VG_STATIC void menu_btn_invert_y( int event ); - -VG_STATIC mdl_mesh *menu_mesh_fov_slider, - *menu_mesh_vol_slider, - *menu_mesh_res_slider; - -VG_STATIC ent_marker - *menu_mark_fov_min, - *menu_mark_fov_max, - *menu_mark_vol_min, - *menu_mark_vol_max, - *menu_mark_res_min, - *menu_mark_res_max; - -struct{ - /* state */ - int loc; - u32 page; - - /* map browser */ - struct menu_map_file{ - char name[ 64 ]; - } - maps_list[ 16 ]; - - int selected_map, - map_count; -} -VG_STATIC game_menu; - -enum menu_page{ - k_menu_page_main = 0x1, - k_menu_page_skater = 0x2, - k_menu_page_quit = 0x4, - k_menu_page_settings = 0x8, - k_menu_page_map = 0x10 -}; - -struct menu_btn_userdata{ - int i; - void *ptr_generic; -}; - -VG_STATIC int menu_settings_if( struct menu_btn_userdata ud ) -{ - if( game_menu.page & k_menu_page_settings ){ - int *ptr = ud.ptr_generic; - return *ptr; - } - else - return 0; -} - -VG_STATIC int menu_vis( struct menu_btn_userdata ud ) -{ - if( ud.i & game_menu.page ) - return 1; - else - return 0; -} - -#if 0 -VG_STATIC int menu_controller( struct menu_btn_userdata ud ) -{ - if( (game_menu.page & (k_menu_page_main|k_menu_page_settings)) - && (ud.i == steam_display_controller) ) - return 1; - return 0; -} - -VG_STATIC int menu_controller_inf( struct menu_btn_userdata ud ) -{ - if( (game_menu.page & k_menu_page_settings) - && (ud.i == steam_display_controller) ) - return 1; - return 0; -} -#endif - -struct menu_button -{ - const char *name; - - int (*fn_visibility)( struct menu_btn_userdata ud ); - struct menu_btn_userdata user; - - void (*fn_press)( int event ); - - const char *ll, - *lu, - *lr, - *ld; - - mdl_mesh *mesh; - float falpha, fsize; -} -VG_STATIC menu_buttons[] = -{ - { - "text_quit", menu_vis, {.i=k_menu_page_main|k_menu_page_quit}, - .fn_press = menu_btn_quit, - .ld="text_reset", .lr="text_settings", /*.ll="text_map"*/ - }, - { - "text_quitty", menu_vis, {.i=k_menu_page_quit} - }, - { - "text_yes", menu_vis, {.i=k_menu_page_quit}, - .fn_press = menu_btn_fuckoff - }, -{ - "text_reset", menu_vis, {.i=k_menu_page_main}, - .fn_press = menu_btn_reset, - .lu="text_quit", .ld="text_skater", /*.ll="text_map",*/ .lr="text_settings" -}, -{ - "text_skater", menu_vis, {.i=k_menu_page_main|k_menu_page_skater}, - .fn_press = menu_btn_skater, - .lu="text_reset", /*.ll="text_map",*/ .lr="text_settings" -}, -/* -{ - "text_map", menu_vis, {.i=k_menu_page_main}, - .fn_press = menu_btn_map, - .lr="text_reset" -}, -*/ -{ - "text_settings", menu_vis, {.i=k_menu_page_main|k_menu_page_settings}, - .fn_press = menu_btn_settings, - .ll="text_reset" -}, -{ - "skater_left", menu_vis, {k_menu_page_skater} -}, -{ - "skater_right", menu_vis, {k_menu_page_skater} -}, - -{ - "fov_slider", menu_vis, {k_menu_page_settings}, - .ld="text_invert_y" -}, -{ "fov_info", menu_vis, {k_menu_page_settings} }, - -{ - "vol_slider", menu_vis, {k_menu_page_settings}, - .lu="res_slider" -}, -{ "vol_info", menu_vis, {k_menu_page_settings} }, - -{ - "text_invert_y", menu_vis, {k_menu_page_settings}, - .fn_press = menu_btn_invert_y, - .lu = "fov_slider", .ld="text_blur" -}, -{ - "text_invert_y_check", menu_settings_if, {.ptr_generic=&cl_invert_y} -}, -{ - "text_blur", menu_vis, {k_menu_page_settings}, - .fn_press = menu_btn_blur, - .lu="text_invert_y", .ld="res_slider" -}, -{ - "text_blur_check", menu_settings_if, {.ptr_generic=&cl_blur} -}, -{ - "res_slider", menu_vis, {k_menu_page_settings}, - .ld = "vol_slider", .lu = "text_blur" -}, -{ - "res_info", menu_vis, {k_menu_page_settings}, -}, -#if 0 -{ "ctr_xbox", menu_controller_inf, {k_steam_controller_type_xbox}}, -{ "ctr_xbox_text", menu_controller_inf, {k_steam_controller_type_xbox}}, -{ "ctr_steam", menu_controller_inf, {k_steam_controller_type_steam}}, -{ "ctr_steam_text", menu_controller_inf, {k_steam_controller_type_steam}}, -{ "ctr_deck", menu_controller_inf, {k_steam_controller_type_steam_deck}}, -{ "ctr_deck_text", menu_controller_inf, {k_steam_controller_type_steam_deck}}, -{ "ctr_ps", menu_controller_inf, {k_steam_controller_type_playstation}}, -{ "ctr_ps_text", menu_controller_inf, {k_steam_controller_type_playstation}}, -{ "ctr_kbm", menu_controller_inf, {k_steam_controller_type_keyboard}}, -{ "ctr_kbm_text", menu_controller_inf, {k_steam_controller_type_keyboard}}, -#endif -{ - "text_paused", menu_vis, {k_menu_page_main} -}, -}; - -VG_STATIC int menu_get_loc( const char *loc ) -{ - for( int i=0; itype == k_ent_menuitem_type_page ) continue; + if( item->type == k_ent_menuitem_type_visual ) continue; + if( !(item->groups & (0x1<type == k_ent_menuitem_type_slider ){ + u32 subtarget = mdl_entity_id_id( item->slider.id_handle ); + ray_item = mdl_arritm( &menu.items, subtarget ); + } - vg_strncpy( file.name, mf->name, - vg_list_size(game_menu.maps_list[0].name), - k_strncpy_always_add_null ); + v3f local_ray, + local_co; - game_menu.map_count ++; - if( game_menu.map_count == vg_list_size(game_menu.maps_list) ) - break; + m4x3f inverse_mtx; + mdl_transform_m4x3( &ray_item->transform, inverse_mtx ); + m4x3_invert_full( inverse_mtx, inverse_mtx ); + + m4x3_mulv( inverse_mtx, menu.view.transform[3], local_co ); + m3x3_mulv( inverse_mtx, ray, local_ray ); + v3_normalize( local_ray ); + + local_ray[0] = 1.0f/local_ray[0]; + local_ray[1] = 1.0f/local_ray[1]; + local_ray[2] = 1.0f/local_ray[2]; + + for( u32 j=0; jsubmesh_count; j++ ){ + mdl_submesh *sm = mdl_arritm( &menu.model.submeshs, + ray_item->submesh_start + j ); + if( ray_aabb1( sm->bbx, local_co, local_ray, 1000.0f ) ){ + hit_item = item; + break; + } + } } - tinydir_next( &dir ); - } - - tinydir_close(&dir); -} - -VG_STATIC void menu_crap_ui(void) -{ -#if 0 - if( cl_menu && (game_menu.page == k_menu_page_map) ){ - ui_rect box; - box[0] = vg.window_x/2 - 150; - box[1] = vg.window_y/2 - 300; - box[2] = 300; - box[3] = 600; - - ui_fill_rect( box, 0xa0000000 ); - - if( game_menu.map_count == 0 ){ - ui_text( (ui_rect){ vg.window_x/2, box[1]+8, 0,0 }, "No maps found", 1, - k_text_align_center ); + if( hit_item != menu.loc ){ + menu.loc = hit_item; } - else{ - ui_rect_pad( box, 4 ); - box[3] = 16; - - for( int i=0; iname, 1, k_text_align_center ); - box[1] += 16+4; - } + if( escape ){ + menu_back_page(); } - } -#endif -} - -VG_STATIC void steam_on_game_overlay( CallbackMsg_t *msg ) -{ - GameOverlayActivated_t *inf = (GameOverlayActivated_t *)msg->m_pubParam; - vg_info( "Steam game overlay activated; pausing\n" ); - - if( inf->m_bActive ){ - cl_menu = 1; - game_menu.page = k_menu_page_main; - game_menu.loc = menu_get_loc( "text_skater" ); - } -} - -VG_STATIC void menu_init(void) -{ -#if 0 - vg_apply_bind_str( &input_menu_h, "", "gp-ls-h" ); - vg_apply_bind_str( &input_menu_h, "+", "right" ); - vg_apply_bind_str( &input_menu_h, "-", "left" ); - vg_apply_bind_str( &input_menu_v, "", "-gp-ls-v" ); - vg_apply_bind_str( &input_menu_v, "+", "up" ); - vg_apply_bind_str( &input_menu_v, "-", "down" ); - vg_apply_bind_str( &input_menu_press, "", "gp-a" ); - vg_apply_bind_str( &input_menu_press, "", "\2enter" ); - vg_apply_bind_str( &input_menu_back, "", "gp-b" ); - vg_apply_bind_str( &input_menu_back, "", "\2escape" ); - vg_apply_bind_str( &input_menu_toggle_kbm, "", "\2escape" ); - vg_apply_bind_str( &input_menu_toggle, "", "\2gp-menu" ); -#endif - - vg_linear_clear( vg_mem.scratch ); - - mdl_open( &menu_model, "models/rs_menu.mdl", vg_mem.rtmemory ); - mdl_load_metadata_block( &menu_model, vg_mem.rtmemory ); - mdl_load_array( &menu_model, &menu_markers, "ent_marker", vg_mem.rtmemory ); - //mdl_invert_uv_coordinates( &menu_model ); - mdl_async_load_glmesh( &menu_model, &menu_glmesh ); - mdl_close( &menu_model ); - - vg_tex2d_load_qoi_async_file( "textures/menu.qoi", - VG_TEX2D_CLAMP|VG_TEX2D_NEAREST, - &tex_menu ); - - - for( int i=0; imesh = mdl_find_mesh( &menu_model, btn->name ); - - if( !btn->mesh ){ - vg_info( "info: %s\n", btn->name ); - vg_fatal_error( "Menu programming error" ); + else if( menu.loc ){ + if( ui_click_down( UI_MOUSE_LEFT ) ){ + menu_trigger_item( menu.loc ); + } } } - - menu_mark_fov_max = - ent_find_marker( &menu_model, &menu_markers, "fov_slider_max" ); - menu_mark_fov_min = - ent_find_marker( &menu_model, &menu_markers, "fov_slider_min" ); - menu_mark_vol_max = - ent_find_marker( &menu_model, &menu_markers, "vol_slider_max" ); - menu_mark_vol_min = - ent_find_marker( &menu_model, &menu_markers, "vol_slider_min" ); - menu_mark_res_max = - ent_find_marker( &menu_model, &menu_markers, "res_slider_max" ); - menu_mark_res_min = - ent_find_marker( &menu_model, &menu_markers, "res_slider_min" ); - - menu_mesh_fov_slider = mdl_find_mesh( &menu_model, "fov_slider" ); - menu_mesh_vol_slider = mdl_find_mesh( &menu_model, "vol_slider" ); - menu_mesh_res_slider = mdl_find_mesh( &menu_model, "res_slider" ); - - shader_model_menu_register(); - -#ifdef SR_NETWORKED - steam_register_callback( k_iGameOverlayActivated, steam_on_game_overlay ); -#endif -} - -VG_STATIC void menu_run_directional(void) -{ -#if 0 - struct menu_button *btn = &menu_buttons[ game_menu.loc ]; - - if( vg_input_button_down( &input_menu_press ) ){ - if( btn->fn_press ){ - audio_lock(); - audio_oneshot( &audio_ui[0], 1.0f, 0.0f ); - audio_unlock(); - - btn->fn_press( 1 ); - return; + else if( menu.input_mode == k_menu_input_mode_keys ){ + /* + * handle button input + * ------------------------------------------------------------*/ + if( (prev_mode != k_menu_input_mode_keys) && !menu.loc ){ + for( u32 i=0; itype != k_ent_menuitem_type_page) && + (item->type != k_ent_menuitem_type_visual) && + (item->groups & (0x1< 0.8f*0.8f ){ - const char *link = NULL; + if( menu.loc->type == k_ent_menuitem_type_slider && menu.loc->pf32 ){ + f32 move = 0.0f; - if( fabsf(dir[0]) > fabsf(dir[1]) ){ - if( dir[0] > 0.0f ) link = btn->lr; - else link = btn->ll; + if( vg_input.display_input_method == k_input_method_controller ){ + move += button_press( k_srbind_mright ); + move -= button_press( k_srbind_mleft ); } else{ - if( dir[1] > 0.0f ) link = btn->ld; - else link = btn->lu; + move += axis_state( k_sraxis_mbrowse_h ); } - if( link ){ - game_menu.loc = menu_get_loc( link ); - menu_input_cooldown = 0.25f; - } - } - } -#endif -} - -VG_STATIC int menu_page_should_backout(void) -{ - return 0; -#if 0 - return vg_input_button_down( &input_menu_back ); -#endif -} - -VG_STATIC void menu_close(void) -{ - cl_menu_go_away = 1; - game_menu.page = 0; - game_menu.loc = menu_get_loc( "text_skater" ); -} - -VG_STATIC void menu_page_main(void) -{ - if( menu_page_should_backout() ) - { - menu_close(); - return; - } - - menu_fov_target = 112.0f; - menu_run_directional(); -} - -VG_STATIC void menu_page_map(void) -{ - if( menu_page_should_backout() ){ - game_menu.page = k_menu_page_main; - game_menu.loc = menu_get_loc( "text_map" ); - } - - if( game_menu.map_count > 0 ){ -#if 0 - float v = input_menu_v.axis.value; - if( (fabsf(v) > 0.7f) && (menu_input_cooldown <= 0.0f) ){ - audio_lock(); - audio_oneshot( &audio_rewind[4], 1.0f, 0.0f ); - audio_unlock(); + move *= vg.time_frame_delta; + *menu.loc->pf32 = vg_clampf( *menu.loc->pf32 + move, 0.0f, 1.0f ); - if( v > 0.0f ){ - game_menu.selected_map --; - - if( game_menu.selected_map < 0 ) - game_menu.selected_map = game_menu.map_count-1; - - menu_input_cooldown = 0.25f; + mh = 0; + } + + if( escape ){ + menu_back_page(); + } + else if( enter ){ + menu_trigger_item( menu.loc ); + } + else if( mh||mv ){ + v3f opt; + v3_zero( opt ); + f32 best = 0.707f; + ent_menuitem *nextpos = NULL; + + opt[0] += mh; + opt[2] += mv; + mdl_transform_vector( &menu.cam->transform, opt, opt ); + + for( u32 i=0; i<4; i++ ){ + u32 id = menu.loc->id_links[i]; + if( !id ) continue; + u32 index = mdl_entity_id_id( id ); + + ent_menuitem *other = mdl_arritm( &menu.items, index ); + v3f delta; + v3_sub( menu.loc->transform.co, other->transform.co, delta ); + v3_normalize( delta ); + + f32 score = v3_dot( delta, opt ); + if( score > best ){ + best = score; + nextpos = other; + } } - else{ - game_menu.selected_map ++; - - if( game_menu.selected_map >= game_menu.map_count ) - game_menu.selected_map = 0; - menu_input_cooldown = 0.25f; + if( nextpos ){ + menu.loc = nextpos; } } - - if( vg_input_button_down( &input_menu_press ) ){ -#if 0 - /* load map */ - char temp[256]; - strcpy( temp, "maps/" ); - strcat( temp, game_menu.maps_list[game_menu.selected_map].name ); - - world_change_world( 1, (const char *[]){ temp } ); - menu_close(); -#endif - } -#endif } - - menu_fov_target = 80.0f; -} - -VG_STATIC void menu_page_quit(void) -{ - if( menu_page_should_backout() ){ - game_menu.page = k_menu_page_main; - game_menu.loc = menu_get_loc( "text_quit" ); - } - - menu_fov_target = 90.0f; - menu_run_directional(); } -void temp_update_playermodel(void); -VG_STATIC void menu_page_skater(void) +/* + * Run from vg_gui when active + */ +VG_STATIC void menu_render(void) { -#if 0 - float h = input_menu_h.axis.value; - menu_fov_target = 97.0f; - - if( menu_page_should_backout() ){ - game_menu.page = k_menu_page_main; - game_menu.loc = menu_get_loc( "text_skater" ); - return; - } + glEnable(GL_BLEND); + glDisable(GL_DEPTH_TEST); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glBlendEquation(GL_FUNC_ADD); - if( (fabsf(h) > 0.7f) && (menu_input_cooldown <= 0.0f) ){ - audio_lock(); - audio_oneshot( &audio_rewind[4], 1.0f, 0.0f ); - audio_unlock(); + shader_blitcolour_use(); + v4f colour; + ui_hex_to_norm( ui_colour( k_ui_bg+3 ), colour ); + colour[3] = 0.5f; - vg_info( "%f\n", h ); + shader_blitcolour_uColour( colour ); + render_fsquad(); - if( h < 0.0f ){ - cl_playermdl_id --; - if( cl_playermdl_id < 0 ) - cl_playermdl_id = 2; + glEnable( GL_DEPTH_TEST ); + glDisable( GL_BLEND ); - int li = menu_get_loc( "skater_left" ); + f32 rate = vg.time_frame_delta * 12.0f; - menu_buttons[li].fsize = 0.4f; - menu_buttons[li].falpha = 1.0f; + if( menu.cam ){ + camera target; - menu_input_cooldown = 0.25f; - } - else{ - cl_playermdl_id ++; - if( cl_playermdl_id > 2 ) - cl_playermdl_id = 0; - - int ri = menu_get_loc( "skater_right" ); + target.fov = menu.cam->fov; + v3_copy( menu.cam->transform.co, target.pos ); - menu_buttons[ri].fsize = 0.4f; - menu_buttons[ri].falpha = 1.0f; + v3f v0; + mdl_transform_vector( &menu.cam->transform, (v3f){0.0f,-1.0f,0.0f}, v0 ); + player_vector_angles( target.angles, v0, 1.0f, 0.0f ); - menu_input_cooldown = 0.25f; - } + camera_lerp( &menu.view, &target, rate, &menu.view ); - temp_update_playermodel(); - } -#endif -} + menu.view.farz = 150.0f; + menu.view.nearz = 0.01f; -VG_STATIC void menu_slider( float *value, int set_value, - mdl_mesh *slider, v3f co_min, v3f co_max ) -{ -#if 0 - if( set_value ){ - float h = input_menu_h.axis.value; - if( fabsf(h) > 0.04f ) - *value += h * vg.time_frame_delta; - *value = vg_clampf( *value, 0.0f, 1.0f ); + camera_update_transform( &menu.view ); + camera_update_view( &menu.view ); + camera_update_projection( &menu.view ); + camera_finalize( &menu.view ); } + else return; - v3_lerp( co_min, co_max, *value, slider->transform.co ); -#endif -} + shader_model_menu_use(); + shader_model_menu_uTexMain( 1 ); + glActiveTexture( GL_TEXTURE1 ); + glBindTexture( GL_TEXTURE_2D, menu.texture ); + shader_model_menu_uPv( menu.view.mtx.pv ); + shader_model_menu_uPvmPrev( menu.view.mtx_prev.pv ); -VG_STATIC void menu_page_settings(void) -{ - menu_run_directional(); - - int fov_select = game_menu.loc == menu_get_loc( "fov_slider" ); - menu_slider( &cl_fov, fov_select, - menu_mesh_fov_slider, menu_mark_fov_min->transform.co, - menu_mark_fov_max->transform.co ); - - if( fov_select ) - menu_fov_target = vg_lerpf( 97.0f, 135.0f, cl_fov ) * 0.8f; - - menu_slider( &vg_audio.external_global_volume, - (game_menu.loc == menu_get_loc( "vol_slider" )), - menu_mesh_vol_slider, menu_mark_vol_min->transform.co, - menu_mark_vol_max->transform.co ); - - menu_slider( &gpipeline.view_render_scale, - (game_menu.loc == menu_get_loc( "res_slider" )), - menu_mesh_res_slider, menu_mark_res_min->transform.co, - menu_mark_res_max->transform.co ); - - if( menu_page_should_backout() ){ - game_menu.page = k_menu_page_main; - game_menu.loc = menu_get_loc( "text_settings" ); - return; - } -} + mesh_bind( &menu.mesh ); -VG_STATIC void menu_update(void) -{ -#if 0 - vg_input_update( 1, &input_menu_h ); - vg_input_update( 1, &input_menu_v ); - vg_input_update( 1, &input_menu_back ); - vg_input_update( 1, &input_menu_press ); - vg_input_update( 1, &input_menu_toggle ); - vg_input_update( 1, &input_menu_toggle_kbm ); -#endif - return; - - -#if 0 - int toggle_gp = vg_input_button_down( &input_menu_toggle ), - toggle_kb = vg_input_button_down( &input_menu_toggle_kbm ), - wait_for_a_sec = 0; - - if( toggle_gp || toggle_kb ){ - if( cl_menu ){ - if( toggle_gp ){ - menu_close(); - } - } - else{ - if( toggle_kb ) - wait_for_a_sec = 1; + v4f white, blue; - cl_menu = 1; - game_menu.page = 1; - } - } + ui_hex_to_norm( ui_colour( k_ui_fg ), white ); + ui_hex_to_norm( ui_colour( k_ui_orange+k_ui_brighter ), blue ); - if( !wait_for_a_sec && cl_menu ){ - if( game_menu.page == k_menu_page_main ) - menu_page_main(); - else if( game_menu.page == k_menu_page_skater ) - menu_page_skater(); - else if( game_menu.page == k_menu_page_quit ) - menu_page_quit(); - else if( game_menu.page == k_menu_page_settings ) - menu_page_settings(); - else if( game_menu.page == k_menu_page_map ) - menu_page_map(); - } + for( u32 i=0; itype == k_ent_menuitem_type_page ) continue; + if( !(item->groups & (0x1 << menu.page)) ) continue; - /* Base */ - { - player_instance *player = &localplayer; - struct player_avatar *av = player->playeravatar; + int selected = 0; - v3f center_rough; - if( player->subsystem == k_player_subsystem_dead ){ - m4x3_mulv( av->sk.final_mtx[av->id_hip], (v3f){0.0f,0.9f,0.0f}, - center_rough ); - } - else{ - m4x3_mulv( av->sk.final_mtx[av->id_head], (v3f){0.0f,1.5f,0.0f}, - center_rough ); - } - - v3f cam_offset; - float cam_rot; - if( player->subsystem == k_player_subsystem_walk ){ - v3_muls( player->rb.to_world[2], 1.0f, cam_offset ); - cam_rot = 0.0f; - } - else{ - v3_muls( player->rb.to_world[0], -1.0f, cam_offset ); - cam_rot = -VG_PIf*0.5f; + if( menu.loc ){ + if( menu.loc->type == k_ent_menuitem_type_slider ){ + u32 subid = menu.loc->slider.id_handle; + if( item == mdl_arritm( &menu.items, mdl_entity_id_id(subid) )) + selected = 1; + } + else{ + if( item == menu.loc ) + selected = 1; + } } + item->factive = vg_lerpf( item->factive, selected, rate ); + v4f colour; + v4_lerp( white, blue, item->factive, colour ); + shader_model_menu_uColour( colour ); - v3f lookdir; - m3x3_mulv( player->invbasis, cam_offset, lookdir ); - lookdir[1] = 0.0f; - v3_normalize( lookdir ); - - m3x3_mulv( player->basis, lookdir, cam_offset ); - v3_muladds( center_rough, cam_offset, 2.0f, menu_camera_pos ); - - menu_camera_angles[1] = 0.0f; - menu_camera_angles[0] = -atan2f( lookdir[0], lookdir[2] ); - - /* setup model matrix */ - v4f qmenu_mdl; - q_axis_angle( qmenu_mdl, (v3f){0.0f,1.0f,0.0f}, -menu_camera_angles[0] ); - q_m3x3( qmenu_mdl, menu_mdl_mtx ); - v3_add( center_rough, (v3f){0.0f,-0.5f,0.0f}, menu_mdl_mtx[3] ); - m3x3_mul( player->basis, menu_mdl_mtx, menu_mdl_mtx ); + f32 scale = 1.0f+item->factive*0.1f; - menu_smooth_fov = vg_lerpf( menu_smooth_fov, menu_fov_target, - vg.time_frame_delta * 8.2f ); - } - - /* Extra */ - { - v3f delta; - v3_sub( btn->mesh->transform.co, (v3f){ 0.0f,1.5f,-1.5f }, delta ); - v3_normalize( delta ); - - float y = atan2f( delta[0], delta[2] ), - p = -sinf(delta[1]), - dt = vg.time_frame_delta; - - menu_extra_angles[0] = vg_lerpf( menu_extra_angles[0], y, dt ); - menu_extra_angles[1] = vg_lerpf( menu_extra_angles[1], p, dt ); - - v2_muladds( menu_camera_angles, menu_extra_angles, 0.8f, - menu_camera_angles ); - menu_camera_angles[0] = fmodf( menu_camera_angles[0], VG_TAUf ); - } - - float dt = vg.time_frame_delta * 6.0f; - menu_opacity = vg_lerpf( menu_opacity, cl_menu&&!cl_menu_go_away, dt ); - - if( menu_opacity <= 0.01f ){ - cl_menu = 0; - cl_menu_go_away = 0; - } - - vg.time_rate = 1.0-(double)menu_opacity; - - if( cl_menu ){ - menu_input_cooldown -= vg.time_frame_delta; - } -#endif -} - -/* https://iquilezles.org/articles/functions/ */ -float expSustainedImpulse( float x, float f, float k ) -{ - float s = fmaxf(x-f,0.0f); - return fminf( x*x/(f*f), 1.0f+(2.0f/f)*s*expf(-k*s)); -} - -VG_STATIC void menu_render_bg(void) -{ - glEnable(GL_BLEND); - glDisable(GL_DEPTH_TEST); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - glBlendEquation(GL_FUNC_ADD); - - shader_blitcolour_use(); - shader_blitcolour_uColour( (v4f){ 0.1f, 0.1f, 0.3f, menu_opacity*0.5f } ); - render_fsquad(); -} + m4x3f mmdl; + mdl_transform transform = item->transform; + v3_muls( transform.s, scale, transform.s ); + mdl_transform_m4x3( &transform, mmdl ); -VG_STATIC void menu_render_fg( camera *cam ) -{ - glEnable( GL_DEPTH_TEST ); - glDisable( GL_BLEND ); + if( item->type == k_ent_menuitem_type_toggle && item->pi32 ){ + u32 subid = mdl_entity_id_id( item->checkmark.id_check ); + ent_menuitem *subitem = mdl_arritm( &menu.items, subid ); - m4x3f mtx; - - shader_model_menu_use(); - shader_model_menu_uColour( (v4f){ 1.0f,1.0f,1.0f,1.0f} ); - shader_model_menu_uTexMain( 1 ); + v3_muladds( item->transform.co, item->checkmark.offset, scale, + subitem->transform.co ); - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, tex_menu ); - - shader_model_menu_uPv( cam->mtx.pv ); - shader_model_menu_uPvmPrev( cam->mtx_prev.pv ); - mesh_bind( &menu_glmesh ); - - for( int i=0; ifn_visibility( btn->user )? 1.0f: 0.0f, - tsize1 = i==game_menu.loc? 0.07f: 0.0f, - tsize = tsize0+tsize1; - - btn->falpha = vg_lerpf( btn->falpha, talpha, vg.time_frame_delta * 14.0f); - btn->fsize = vg_lerpf( btn->fsize, tsize, vg.time_frame_delta * 7.0f ); - - /* Colour */ - v4f vselected = {0.95f*1.3f,0.45f*1.3f,0.095f*1.3f, 1.0f}, - vnormal = {1.0f,1.0f,1.0f, 1.0f}, - vcurrent; - - v4_lerp( vnormal, vselected, btn->falpha, vcurrent ); - shader_model_menu_uColour( vcurrent ); - - /* Create matrix */ - m4x3f mtx_size; - mdl_transform_m4x3( &btn->mesh->transform, mtx ); - m4x3_mul( menu_mdl_mtx, mtx, mtx ); - m4x3_identity( mtx_size ); - m3x3_scalef( mtx_size, expSustainedImpulse( btn->fsize, 0.5f, 8.7f) ); - m4x3_mul( mtx, mtx_size, mtx ); - shader_model_menu_uMdl( mtx ); - - for( int j=0; jmesh->submesh_count; j++ ){ - mdl_submesh *sm = - mdl_arritm( &menu_model.submeshs, btn->mesh->submesh_start+j ); - mdl_draw_submesh( sm ); + subitem->fvisible = vg_lerpf( subitem->fvisible, *item->pi32, rate ); + v3_fill( subitem->transform.s, subitem->fvisible ); + } + else if( item->type == k_ent_menuitem_type_slider && item->pf32 ){ + u32 il = mdl_entity_id_id( item->slider.id_min ), + ir = mdl_entity_id_id( item->slider.id_max ), + ih = mdl_entity_id_id( item->slider.id_handle ); + ent_marker *ml = mdl_arritm( &menu.markers, il ), + *mr = mdl_arritm( &menu.markers, ir ); + ent_menuitem *handle = mdl_arritm( &menu.items, ih ); + + v3_lerp( ml->transform.co, mr->transform.co, *item->pf32, + handle->transform.co ); } - } - - /* - for( int i=0; inode_count; i++ ) - { - mdl_node *pnode = mdl_node_from_id( menu_model, i ); - - for( int j=0; jsubmesh_count; j++ ) - { - mdl_submesh *sm = - mdl_submesh_from_id( menu_model, pnode->submesh_start+j ); - mdl_node_transform( pnode, mtx ); - m4x3_mul( menu_mdl_mtx, mtx, mtx ); - shader_menu_uMdl( mtx ); + shader_model_menu_uMdl( mmdl ); - mdl_draw_submesh( sm ); + for( u32 j=0; jsubmesh_count; j++ ){ + u32 index = item->submesh_start + j; + mdl_draw_submesh( mdl_arritm( &menu.model.submeshs, index )); } } - */ } #endif /* MENU_H */ -#endif diff --git a/model.h b/model.h index e37e323..80ab7cb 100644 --- a/model.h +++ b/model.h @@ -447,6 +447,7 @@ VG_STATIC const char *mdl_pstr( mdl_context *mdl, u32 pstr ) return ((char *)mdl_arritm( &mdl->strings, pstr )) + 4; } + VG_STATIC int mdl_pstreq( mdl_context *mdl, u32 pstr, const char *str, u32 djb2 ) { @@ -458,6 +459,9 @@ mdl_pstreq( mdl_context *mdl, u32 pstr, const char *str, u32 djb2 ) else return 0; } +#define MDL_CONST_PSTREQ( MDL, Q, CONSTSTR )\ + mdl_pstreq( MDL, Q, CONSTSTR, vg_strdjb2( CONSTSTR ) ) + /* * Simple mesh interface for OpenGL * ---------------------------------------------------------------------------- diff --git a/models_src/rs_menu.mdl b/models_src/rs_menu.mdl index a01b026f3a16f286c515344a400dc4104cfc7c32..95f7de0ca1d5144bc6c3084e10b1c331b342940c 100644 GIT binary patch literal 145472 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

rDPy5-8`8>DM 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 literal 195728 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 F{{alBn9BeF diff --git a/render.h b/render.h index b663394..541f047 100644 --- a/render.h +++ b/render.h @@ -572,6 +572,8 @@ VG_STATIC void async_render_init( void *payload, u32 size ) vg_console_reg_cmd( "fb", render_framebuffer_control, render_framebuffer_poll ); + vg_console_reg_var( "render_scale", &gpipeline.view_render_scale, + k_var_dtype_f32, VG_VAR_PERSISTENT ); glGenVertexArrays( 1, &gpipeline.fsquad.vao ); glGenBuffers( 1, &gpipeline.fsquad.vbo ); diff --git a/skaterift.c b/skaterift.c index acb0a2e..457aa22 100644 --- a/skaterift.c +++ b/skaterift.c @@ -153,6 +153,7 @@ VG_STATIC void vg_load(void) #endif vg_console_load_autos(); + menu_link(); vg_async_call( async_skaterift_complete, NULL, 0 ); } @@ -219,7 +220,6 @@ VG_STATIC void vg_update_post(void) v3_copy( localplayer.rb.v, vg_audio.external_lister_velocity ); audio_unlock(); - menu_update(); vg.time_rate = 1.0f-menu.factive; vehicle_update_post(); } @@ -359,11 +359,6 @@ VG_STATIC void render_main_game(void) render_scene_gate_subview(); present_view_with_post_processing(); - - if( menu.active ){ - glClear( GL_DEPTH_BUFFER_BIT ); - menu_render(); - } /* =========== End Frame =========== */ } @@ -401,6 +396,12 @@ VG_STATIC void vg_gui(void) return; } + menu_update(); + if( menu.active ){ + glClear( GL_DEPTH_BUFFER_BIT ); + menu_render(); + } + #if 0 player__im_gui( &localplayer ); #endif diff --git a/skaterift_imgui_dev.c b/skaterift_imgui_dev.c index c51acbe..b27489b 100644 --- a/skaterift_imgui_dev.c +++ b/skaterift_imgui_dev.c @@ -111,20 +111,13 @@ VG_STATIC void vg_gui(void) ui_outline( window, 1, ui_colour( k_ui_bg+7 ) ); ui_rect title, panel; - ui_split_px( window, k_ui_axis_h, 28, 0, title, panel ); + ui_split( window, k_ui_axis_h, 28, 0, title, panel ); ui_fill( title, ui_colour( k_ui_bg+7 ) ); ui_text( title, "Workshop tool", 1, k_ui_align_middle_center, ui_colourcont(k_ui_bg+7) ); ui_rect quit_button; - ui_split_px( title, k_ui_axis_v, title[2]-title[3], 2, title, quit_button ); - - if( workshop_form.operation == k_workshop_form_op_none ){ - if( ui_button_text( quit_button, "X", 1 ) ){ - workshop_quit_form(); - return; - } - } + ui_split( title, k_ui_axis_v, title[2]-title[3], 2, title, quit_button ); ui_dev_colourview(); } -- 2.25.1