#include "gui.h"
#include "shaders/model_menu.h"
-struct global_menu menu;
+struct global_menu menu = { .skip_starter = 0 };
/*
* Attaches memory locations to the various items in the menu
}
mdl_close( &menu.model );
+
+ vg_console_reg_var( "skip_starter_menu", &menu.skip_starter,
+ k_var_dtype_i32, VG_VAR_PERSISTENT );
+}
+
+void menu_at_begin(void)
+{
+ if( menu.skip_starter ) return;
+
+ skaterift.activity = k_skaterift_menu;
+ menu.page = 0xffffffff;
+ menu_open_page( "Starter", k_ent_menuitem_stack_append );
}
/*
/*
* activate a pressable type
*/
-static void menu_trigger_item( ent_menuitem *item ){
- if ( item->type == k_ent_menuitem_type_event_button ){
+static void menu_trigger_item( ent_menuitem *item )
+{
+ audio_lock();
+ audio_oneshot( &audio_ui[0], 1.0f, 0.0f );
+ audio_unlock();
+
+ if ( item->type == k_ent_menuitem_type_event_button )
+ {
u32 q = item->button.pstr;
- if( MDL_CONST_PSTREQ( &menu.model, q, "quit" ) ){
+ if( MDL_CONST_PSTREQ( &menu.model, q, "quit" ) )
+ {
vg.window_should_close = 1;
}
else if( MDL_CONST_PSTREQ( &menu.model, q, "map" ) ){
else if( MDL_CONST_PSTREQ( &menu.model, q, "prem_nevermind" ) ){
menu_close();
}
+ else if( MDL_CONST_PSTREQ( &menu.model, q, "starter_enter" ) )
+ {
+ if( network_client.auto_connect )
+ network_client.user_intent = k_server_intent_online;
+
+ menu_close();
+ }
}
- else if( item->type == k_ent_menuitem_type_page_button ){
+ else if( item->type == k_ent_menuitem_type_page_button )
+ {
menu_open_page( mdl_pstr( &menu.model, item->button.pstr ),
item->button.stack_behaviour );
}
- else if( item->type == k_ent_menuitem_type_toggle ){
+ else if( item->type == k_ent_menuitem_type_toggle )
+ {
if( item->pi32 ){
*item->pi32 = *item->pi32 ^ 0x1;
}
*/
void menu_update(void)
{
+ static f32 repeater = 0.0f;
+ if( repeater > 0.0f )
+ repeater -= vg.time_frame_delta;
+
if( workshop_form.page != k_workshop_form_hidden ){
return;
}
- int escape = button_down( k_srbind_mback );
- if( menu.credits_open || vg.settings_open ){
- if( escape ){
+ bool escape = 0;
+
+ if( menu.credits_open || vg.settings_open )
+ {
+ vg_exec_input_program( k_vg_input_type_button_u8,
+ input_button_list[k_srbind_mback], &escape );
+ if( escape )
+ {
menu.credits_open = 0;
if( vg.settings_open )
vg_settings_close();
+
+ srinput.state = k_input_state_resume;
}
return;
}
+ escape = button_down( k_srbind_mback );
if( button_down( k_srbind_mopen ) ){
if( skaterift.activity == k_skaterift_default ){
menu_back_page();
}
else if( menu.loc ){
- if( ui_click_down( UI_MOUSE_LEFT ) ){
+ if( ui_click_down( UI_MOUSE_LEFT ) )
+ {
menu_trigger_item( menu.loc );
}
}
mh = 0;
}
- if( escape ){
+ if( escape )
+ {
menu_back_page();
+ audio_lock();
+ audio_oneshot( &audio_ui[3], 1.0f, 0.0f );
+ audio_unlock();
}
- else if( enter ){
+ else if( enter )
+ {
menu_trigger_item( menu.loc );
}
else if( mh||mv ){
v3f opt;
v3_zero( opt );
- f32 best = 0.707f;
+ f32 best = 0.5f;
ent_menuitem *nextpos = NULL;
opt[0] += mh;
}
}
- if( nextpos ){
+ if( nextpos && (repeater <= 0.0f) )
+ {
menu.loc = nextpos;
+ audio_lock();
+ audio_oneshot( &audio_ui[3], 1.0f, 0.0f );
+ audio_unlock();
+ repeater += 0.1f;
}
}
}
ent_menuitem *text_list[ 8 ];
u32 text_count = 0;
- u32 current_tex = 0xffffffff;
+ u32 current_mat = 0xffffffff;
for( u32 i=0; i<mdl_arrcount(&menu.items); i++ ){
ent_menuitem *item = mdl_arritm( &menu.items, i );
shader_model_menu_uMdl( mmdl );
- for( u32 j=0; j<item->submesh_count; j++ ){
+ for( u32 j=0; j<item->submesh_count; j++ )
+ {
u32 index = item->submesh_start + j;
mdl_submesh *sm = mdl_arritm( &menu.model.submeshs, index );
-
- mdl_material *mat = mdl_arritm( &menu.model.materials,
- sm->material_id-1 );
- if( mat->tex_diffuse != current_tex ){
+ if( sm->material_id != current_mat )
+ {
+ mdl_material *mat = mdl_arritm( &menu.model.materials,
+ sm->material_id-1 );
glActiveTexture( GL_TEXTURE1 );
- glBindTexture( GL_TEXTURE_2D, menu.textures[ mat->tex_diffuse ] );
- current_tex = mat->tex_diffuse;
+
+ if( mat->shader == k_shader_standard )
+ {
+ struct shader_props_standard *props = mat->props.compiled;
+
+ /* FIXME: why does menu have its own texture array?? */
+ glBindTexture( GL_TEXTURE_2D,
+ menu.textures[ props->tex_diffuse ] );
+ }
+ else
+ {
+ glBindTexture( GL_TEXTURE_2D, vg.tex_missing );
+ }
+
+ current_mat = sm->material_id;
}
mdl_draw_submesh( sm );