update helpers/location to 'frosted' ui
[carveJwlIkooP6JGAAIwe30JlM.git] / menu.c
diff --git a/menu.c b/menu.c
index d5c8d5ed1d11401a3c5aac45a1635b7cc5d0f800..ed69945eaebd64cb9ba8b8f85122fcec967a043e 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -217,10 +217,16 @@ void menu_open_page( const char *name,
  */
 static void menu_trigger_item( ent_menuitem *item )
 {
-   if     ( item->type == k_ent_menuitem_type_event_button ){
+   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" ) ){
@@ -298,20 +304,32 @@ static void menu_setitem_type( ent_menuitem *item,
  */
 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 ){
@@ -469,7 +487,8 @@ void menu_update(void)
          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 );
          }
       }
@@ -510,16 +529,21 @@ void menu_update(void)
          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;
@@ -543,8 +567,13 @@ void menu_update(void)
             }
          }
 
-         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;
          }
       }
    }