+ draw_mesh( filled_start, filled_count );
+ }
+
+ // Level selection UI
+ float ratio = ((float)vg_window_x/(float)vg_window_y);
+
+ m3x3f ui_view = M3X3_IDENTITY;
+ m3x3_scale( ui_view, (v3f){ 1.0f, -ratio, 1.0f } );
+ glUniformMatrix3fv( SHADER_UNIFORM( shader_tile_colour, "uPv" ), 1, GL_FALSE, (float *)ui_view );
+
+ // Calculate mouse in UIsp
+ v3f mouse_ui_space = { ((float)vg_mouse[0] / (float)(vg_window_x)) * 2.0f - 1.0f,
+ (((float)vg_mouse[1] / (float)(vg_window_y)) * 2.0f - 1.0f)*(1.0f/ratio), 0.0125f };
+
+ // Get selected level
+ const float selection_scale = 0.05f;
+ int const level_count = vg_list_size( level_pack_1 );
+ int level_select = -1;
+
+ if( mouse_ui_space[0] <= -0.9f )
+ {
+ float levels_range = (float)level_count*selection_scale*0.6f;
+ float level_offset = ((mouse_ui_space[1] + levels_range) / levels_range) * 0.5f * (float)level_count;
+ level_select = floorf( level_offset );
+
+ // Draw selector
+ if( level_select >= 0 && level_select < vg_list_size( level_pack_1 ) )
+ {
+ glUniform4f( SHADER_UNIFORM( shader_tile_colour, "uColour" ), 0.369768f, 0.3654f, 0.42f, 1.0f );
+
+ use_mesh( &world.tile );
+ glUniform3f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ),
+ -1.0f,
+ (-(float)level_count + (float)level_select * 2.0f ) * selection_scale * 0.6f,
+ selection_scale
+ );
+ draw_mesh( 2, 2 );
+
+ use_mesh( &world.circle );
+ }
+
+ if( vg_get_button_down( "primary" ) )
+ {
+ console_changelevel( 1, level_pack_1 + level_select );
+ }