speed button
authorhgn <hgodden00@gmail.com>
Mon, 20 Dec 2021 23:52:09 +0000 (23:52 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 20 Dec 2021 23:52:09 +0000 (23:52 +0000)
fishladder.c
fishladder_resources.h
textures/buttons.png
textures/ubuntu.png

index becb812d88b5bb9b48a800ad8846962b2f7509f6..e90a8a527a1f89742bf31ee007545adb01ead367 100644 (file)
@@ -38,7 +38,7 @@ enum e_world_button
        k_world_button_none = -1,
        k_world_button_sim = 0,
        k_world_button_pause = 1,
-       k_world_button_wire_mode = 2
+       k_world_button_speedy = 2
 };
 
 #define FLAG_CANAL             0x1
@@ -185,7 +185,7 @@ struct world
        
        int w, h;
        
-       struct mesh shapes, numbers;
+       struct mesh shapes;
        struct mesh_wire
        {
                GLuint vao, vbo, ebo;
@@ -346,10 +346,6 @@ static void use_mesh( struct mesh *m )
        glBindVertexArray( m->vao );
 }
 
-
-
-
-
 static struct cell_button *get_wbutton( enum e_world_button btn )
 {
        return &world.buttons[ btn ];
@@ -705,15 +701,30 @@ static int map_load( const char *str, const char *name )
                
                // Level selection area
                
-               for( int y = 16+2; y < 16+world.h-2; y ++ )
+               // Beginner
+               for( int y = 16+2; y < 16+2+4; y ++ )
+               {
+                       u8 *px = &info_buffer[((y*64)+16-1)*4];
+                       px[0] = 0x10;
+               }
+               
+               // Intermediate
+               for( int y = 16+2; y < 16+2+6; y ++ )
                {
-                       for( int x = 14; x < 16; x ++ )
+                       for( int x = 0; x < 3; x ++ )
                        {
-                               u8 *px = &info_buffer[((y*64)+x)*4];
+                               u8 *px = &info_buffer[((y*64)+16-5+x)*4];
                                px[0] = 0x10;
                        }
                }
                
+               // Expert
+               for( int x = 1; x < 5; x ++ )
+               {
+                       u8 *px = &info_buffer[((16*64)+16-5+x)*4];
+                       px[0] = 0x10;
+               }
+               
                info_buffer[(((16+world.h-3)*64)+world.w+16-1)*4] = 0x30;
                info_buffer[(((16+world.h-2)*64)+world.w+16-1)*4] = 0x30;
 
@@ -1083,7 +1094,7 @@ static void simulation_start(void)
        world.sim_frame = 0;
        world.sim_run = 0;
        
-       world.sim_delta_speed = 2.5f;
+       world.sim_delta_speed = world.buttons[ k_world_button_speedy ].pressed? 10.0f: 2.5f;
        world.sim_delta_ref = vg_time;
        world.sim_internal_ref = 0.0f;
        world.sim_internal_time = 0.0f;
@@ -1094,6 +1105,11 @@ static void simulation_start(void)
        clear_animation_flags();
        
        io_reset();
+       
+       if( world.pCmpLevel )
+       {
+               world.pCmpLevel->completed_score = 0;
+       }
 }
 
 static int world_check_pos_ok( v2i co )
@@ -1195,11 +1211,11 @@ void vg_update(void)
                        r2 = (float)world.h / (float)world.w,
                        size;
        
-       size = ( r2 < r1? (float)world.w * 0.5f: ((float)world.h * 0.5f) / r1 ) + 2.5f; 
+       size = ( r2 < r1? (float)(world.w+5) * 0.5f: ((float)world.h * 0.5f) / r1 ) + 2.5f;     
        m3x3_projection( m_projection, -size, size, -size*r1, size*r1 );
        
        v3f origin;
-       origin[0] = floorf( -0.5f * world.w );
+       origin[0] = floorf( -0.5f * ((float)world.w-3.0f) );
        origin[1] = floorf( -0.5f * world.h );
        origin[2] = 0.0f;
        
@@ -1914,33 +1930,12 @@ static void render_tiles( v2i start, v2i end, v4f const regular_colour, v4f cons
        }
 }
 
-/*
-static void draw_numbers( v3f coord, int number )
-{
-       v3f pos;
-       v3_copy( coord, pos );
-       int digits[8]; int i = 0;
-       
-       while( number > 0 && i < 8 )
-       {               
-               digits[i ++] = number % 10;
-               number = number / 10;
-       }
-       
-       for( int j = 0; j < i; j ++ )
-       {
-               glUniform3fv( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), 1, pos );
-               draw_mesh( MESH_NUMBERS_OFFSETS[digits[i-j-1]][0], MESH_NUMBERS_OFFSETS[digits[i-j-1]][1] );
-               pos[0] += pos[2] * 0.75f;
-       }
-}*/
-
-static void wbutton_run( enum e_world_button btn_name )
+static void wbutton_run( enum e_world_button btn_name, v2f btn_tex )
 {
        static v3f button_colours[] = {
                {0.204f, 0.345f, 0.553f},
                {0.204f, 0.345f, 0.553f},
-               {0.741f, 0.513f, 0.078f},
+               {0.553f, 0.345f, 0.204f},
                {1.0f, 0.0f, 0.0f}
        };
 
@@ -1992,6 +1987,14 @@ static void wbutton_run( enum e_world_button btn_name )
                        else
                                world.pause_offset_target = 0.0f;
                }
+               else if( btn_name == k_world_button_speedy )
+               {
+                       btn->pressed ^= 0x1;
+                       
+                       world.sim_delta_speed = btn->pressed? 10.0f: 2.5f;
+                       world.sim_delta_ref = vg_time;
+                       world.sim_internal_ref = world.sim_internal_time;
+               }
                else
                {
                        btn->pressed ^= 0x1;
@@ -2041,14 +2044,146 @@ static void wbutton_run( enum e_world_button btn_name )
        glUniform4f( SHADER_UNIFORM( shader_buttons, "uOffset" ), 
                world.w-1, 
                world.h-btn_name-2, 
-               (float)(btn_name+tex_offset), 
-               3.0f 
+               (float)(btn_tex[0]+tex_offset), 
+               btn_tex[1]
        );
        glUniform4fv( SHADER_UNIFORM( shader_buttons, "uColour" ), 1, final_colour );
        
        draw_mesh( 0, 2 );
 }
 
+static void wbutton_draw( v2i pos, v2f tex, v4f colour )
+{
+       glUniform4f( SHADER_UNIFORM( shader_buttons, "uOffset" ), 
+               pos[0], 
+               pos[1], 
+               tex[0], 
+               tex[1] 
+       );
+       glUniform4fv( SHADER_UNIFORM( shader_buttons, "uColour" ), 1, colour );
+       draw_mesh( 0, 2 );
+}
+
+static void level_selection_buttons(void)
+{
+       v3f tutorial_colour = { 0.204f, 0.345f, 0.553f };
+       v3f locked_colour = { 0.2f, 0.2f, 0.2f };
+
+       struct button_grid
+       {
+               v3f primary_colour;
+               v2i origin;
+               v2i dims;
+               struct cmp_level *levels;
+               int count;
+       }
+       grids[] = 
+       {
+               {
+                       .primary_colour = { 0.204f, 0.345f, 0.553f },
+                       .origin = { -1, 2 },
+                       .dims = { 1, 4 },
+                       .levels = cmp_levels_tutorials,
+                       .count = vg_list_size( cmp_levels_tutorials )
+               },
+               {
+                       .primary_colour = { 0.304f, 0.245f, 0.553f },
+                       .origin = { -5, 2 },
+                       .dims = { 3, 6 },
+                       .levels = cmp_levels_basic,
+                       .count = vg_list_size( cmp_levels_basic )
+               },
+               {
+                       .primary_colour = { 0.553f, 0.345f, 0.204f },
+                       .origin = { -4, 0 },
+                       .dims = { 4, 1 },
+                       .levels = cmp_levels_grad,
+                       .count = vg_list_size( cmp_levels_grad )
+               }
+       };
+       
+       v2f tex_coord = { 0.0f, 0.0f };
+       v4f final_colour = { 0.0f, 0.0f, 0.0f, 0.2f };
+       v2i button_pos;
+       static struct cmp_level *select_from = NULL;
+       struct cmp_level *switch_level_to = NULL;
+       
+       if( vg_get_button_down( "primary" ) )
+               select_from = NULL;
+       
+       for( int i = 0; i < vg_list_size( grids ); i ++ )
+       {
+               struct button_grid *grid = &grids[i];
+               
+               int j = 0;
+               
+               for( int x = 0; x < grid->dims[0]; x ++ )
+               {
+                       for( int y = 0; y < grid->dims[1]; y ++ )
+                       {
+                               if( j < grid->count )
+                               {
+                                       struct cmp_level *lvl = &grid->levels[ j ];
+                                       
+                                       // Determine colour
+                                       if( lvl->unlocked )
+                                       {
+                                               if( lvl->is_tutorial )
+                                                       v3_copy( tutorial_colour, final_colour );
+                                               else
+                                                       v3_copy( grid->primary_colour, final_colour );
+                                                       
+                                               if( lvl->completed_score )
+                                                       final_colour[3] = 0.8f;
+                                               else
+                                                       final_colour[3] = 0.2f;
+                                       }
+                                       else v3_copy( locked_colour, final_colour );
+                                       
+                                       v2i_add( grid->origin, (v2i){ x,y }, button_pos );
+                                       int is_hovering = v2i_eq( (v2i){world.tile_x, world.tile_y}, button_pos );
+                               
+                                       if( is_hovering )
+                                       {
+                                               final_colour[3] += 0.1f;
+                                               
+                                               // Up click
+                                               if( vg_get_button_up( "primary" ) )
+                                                       if( select_from == lvl && lvl->unlocked )
+                                                       {
+                                                               switch_level_to = lvl;
+                                                               sfx_set_play( &audio_clicks, &audio_system_ui, 1 );
+                                                       }
+                                               
+                                               // Start click
+                                               if( vg_get_button_down( "primary" ) )
+                                                       select_from = lvl;
+                                               
+                                               if( vg_get_button( "primary" ) )
+                                                       final_colour[3] += 0.2f;
+                                       }
+                                       
+                                       if( world.pCmpLevel == lvl )
+                                               final_colour[3] += fabsf(sinf( vg_time * 2.0f )) * 0.2f;
+                                       
+                                       wbutton_draw( (v2i){ grid->origin[0] + x, grid->origin[1] + y }, tex_coord, final_colour );
+                               }
+                               else break;
+                               
+                               j ++;
+                       }
+               }
+       }
+       
+       if( switch_level_to )
+       {
+               if( console_changelevel( 1, &switch_level_to->map_name ) )
+               {
+                       world.pCmpLevel = switch_level_to;
+               }
+       }
+}
+
 void vg_render(void)
 {
        glViewport( 0,0, vg_window_x, vg_window_y );
@@ -2249,9 +2384,11 @@ void vg_render(void)
        vg_tex2d_bind( &tex_buttons, 0 );
        glUniform1i( SHADER_UNIFORM( shader_buttons, "uTexMain" ), 0 );
        
-       wbutton_run( k_world_button_sim );
-       wbutton_run( k_world_button_pause );
-       //wbutton_run( k_world_button_wire_mode );
+       wbutton_run( k_world_button_sim, (v2f){ 0.0f, 3.0f } );
+       wbutton_run( k_world_button_pause, (v2f){ 1.0f, 3.0f } );
+       wbutton_run( k_world_button_speedy, (v2f){ 0.0f, 2.0f } );
+       
+       level_selection_buttons();
        
        // WIRES
        // ========================================================================================================
@@ -3175,19 +3312,6 @@ void vg_start(void)
                init_mesh( &world.shapes, combined_mesh, vg_list_size( combined_mesh ) );
        }
        
-       // Numbers mesh
-       {
-               init_mesh( &world.numbers,
-                       MESH_NUMBERS_BUFFER,
-                       vg_list_size( MESH_NUMBERS_BUFFER )
-               );
-               
-               for( int i = 0; i < 10; i ++ )
-               {
-                       vg_info( "offset: %u, length: %u\n", MESH_NUMBERS_OFFSETS[i][0], MESH_NUMBERS_OFFSETS[i][1] );
-               }
-       }
-       
        // Create wire mesh
        {
                int const num_segments = 64;
@@ -3283,7 +3407,6 @@ void vg_free(void)
        glDeleteBuffers( 1, &world.wire.ebo );
 
        free_mesh( &world.shapes );
-       free_mesh( &world.numbers );
        
        map_free();
 }
index 24ba9933069c814e8761115cca6ad23f475ee619..4cdd8943018ab2b2c33c8dc662e2a9d36a914508 100644 (file)
 // FONTS
-/*
-vg_tex2d tex_ubuntu            =  { .path = "textures/ubuntu.qoi" };
 
-static struct ui_sdf_char characters_Ubuntu[] = {
-  {62911, 23039, 64063, 27647, 9, 9, 18, 18, 7},
-  {3519, 23039, 4991, 33279, 7, 31, 23, 40, 9},
-  {50815, 23039, 52543, 29695, 7, 33, 27, 26, 13},
-  {22783, 12543, 25087, 22783, 7, 31, 36, 40, 21},
-  {19647, 0, 21695, 11775, 7, 34, 32, 46, 18},
-  {36095, 0, 38783, 10495, 7, 31, 42, 41, 27},
-  {41343, 0, 43775, 10495, 8, 31, 38, 41, 21},
-  {52543, 23039, 53887, 29695, 7, 33, 21, 26, 7},
-  {7551, 0, 9215, 12543, 6, 34, 26, 49, 10},
-  {9215, 0, 10879, 12543, 9, 34, 26, 49, 10},
-  {43135, 23039, 45119, 30975, 8, 31, 31, 31, 15},
-  {32703, 23039, 34815, 31743, 7, 26, 33, 34, 18},
-  {49343, 23039, 50815, 29951, 8, 12, 23, 27, 8},
-  {61247, 23039, 62911, 28415, 8, 20, 26, 21, 9},
-  {57599, 23039, 59071, 28671, 7, 13, 23, 22, 8},
-  {0, 0, 2047, 12543, 10, 34, 32, 49, 12},
-  {50623, 0, 52735, 10495, 7, 32, 33, 41, 18},
-  {1791, 23039, 3519, 33279, 6, 31, 27, 40, 18},
-  {61183, 0, 63231, 10495, 7, 32, 32, 41, 18},
-  {63231, 0, 65279, 10495, 7, 32, 32, 41, 18},
-  {38655, 12543, 40831, 22783, 8, 31, 34, 40, 18},
-  {0, 12543, 2047, 23039, 7, 31, 32, 41, 18},
-  {55807, 12543, 57855, 22783, 7, 31, 32, 40, 18},
-  {47359, 12543, 49471, 22783, 7, 31, 33, 40, 18},
-  {52735, 0, 54847, 10495, 7, 31, 33, 41, 18},
-  {49471, 12543, 51583, 22783, 7, 31, 33, 40, 18},
-  {28543, 23039, 30015, 31999, 7, 25, 23, 35, 8},
-  {4991, 23039, 6463, 33279, 8, 26, 23, 40, 8},
-  {38911, 23039, 41023, 31487, 7, 26, 33, 33, 18},
-  {47231, 23039, 49343, 29951, 7, 23, 33, 27, 18},
-  {41023, 23039, 43135, 31487, 7, 26, 33, 33, 18},
-  {4095, 12543, 6015, 23039, 8, 31, 30, 41, 13},
-  {21695, 0, 24511, 11519, 7, 31, 44, 45, 30},
-  {13055, 12543, 15551, 22783, 9, 31, 39, 40, 21},
-  {40831, 12543, 43007, 22783, 6, 31, 34, 40, 20},
-  {43775, 0, 46079, 10495, 7, 31, 36, 41, 20},
-  {25087, 12543, 27391, 22783, 6, 31, 36, 40, 23},
-  {51583, 12543, 53695, 22783, 6, 31, 33, 40, 18},
-  {57855, 12543, 59903, 22783, 6, 31, 32, 40, 17},
-  {46079, 0, 48383, 10495, 7, 31, 36, 41, 21},
-  {29695, 12543, 31935, 22783, 6, 31, 35, 40, 22},
-  {6463, 23039, 7807, 33279, 6, 31, 21, 40, 8},
-  {61951, 12543, 63935, 22783, 9, 31, 31, 40, 16},
-  {31935, 12543, 34175, 22783, 6, 31, 35, 40, 20},
-  {59903, 12543, 61951, 22783, 6, 31, 32, 40, 16},
-  {10367, 12543, 13055, 22783, 7, 31, 42, 40, 28},
-  {27391, 12543, 29695, 22783, 6, 31, 36, 40, 23},
-  {38783, 0, 41343, 10495, 7, 31, 40, 41, 25},
-  {43007, 12543, 45183, 22783, 6, 31, 34, 40, 19},
-  {17087, 0, 19647, 11775, 7, 31, 40, 46, 25},
-  {48383, 0, 50623, 10495, 6, 31, 35, 41, 20},
-  {54847, 0, 56959, 10495, 8, 32, 33, 41, 17},
-  {34175, 12543, 36415, 22783, 8, 31, 35, 40, 18},
-  {36415, 12543, 38655, 22783, 6, 31, 35, 40, 22},
-  {15551, 12543, 18047, 22783, 9, 31, 39, 40, 21},
-  {7423, 12543, 10367, 22783, 8, 31, 46, 40, 29},
-  {18047, 12543, 20415, 22783, 8, 31, 37, 40, 20},
-  {20415, 12543, 22783, 22783, 9, 31, 37, 40, 19},
-  {45183, 12543, 47359, 22783, 8, 31, 34, 40, 18},
-  {10879, 0, 12479, 12543, 6, 34, 25, 49, 10},
-  {2047, 0, 4095, 12543, 10, 34, 32, 49, 12},
-  {12479, 0, 14079, 12543, 9, 34, 25, 49, 10},
-  {45119, 23039, 47231, 30719, 7, 31, 33, 30, 18},
-  {59071, 23039, 61247, 28415, 9, 6, 34, 21, 15},
-  {53887, 23039, 55423, 29183, 7, 34, 24, 24, 12},
-  {18879, 23039, 20863, 31999, 8, 26, 31, 35, 16},
-  {24511, 0, 26623, 11007, 6, 34, 33, 43, 19},
-  {20863, 23039, 22847, 31999, 7, 26, 31, 35, 15},
-  {26623, 0, 28735, 11007, 7, 34, 33, 43, 19},
-  {12607, 23039, 14719, 31999, 7, 26, 33, 35, 18},
-  {32767, 0, 34559, 11007, 6, 34, 28, 43, 12},
-  {2047, 12543, 4095, 23039, 7, 26, 32, 41, 18},
-  {30783, 0, 32767, 11007, 6, 34, 31, 43, 18},
-  {6015, 12543, 7423, 23039, 7, 32, 22, 41, 8},
-  {15423, 0, 17087, 12031, 11, 32, 26, 47, 8},
-  {28735, 0, 30783, 11007, 6, 34, 32, 43, 16},
-  {34559, 0, 36095, 11007, 7, 34, 24, 43, 8},
-  {7807, 23039, 10431, 31999, 6, 26, 41, 35, 27},
-  {22847, 23039, 24831, 31999, 6, 26, 31, 35, 18},
-  {10431, 23039, 12607, 31999, 7, 26, 34, 35, 19},
-  {56959, 0, 59071, 10495, 6, 26, 33, 41, 19},
-  {59071, 0, 61183, 10495, 7, 26, 33, 41, 19},
-  {26751, 23039, 28543, 31999, 6, 26, 28, 35, 12},
-  {24831, 23039, 26751, 31999, 8, 26, 30, 35, 14},
-  {0, 23039, 1791, 33279, 7, 31, 28, 40, 13},
-  {16831, 23039, 18879, 31999, 7, 25, 32, 35, 18},
-  {34815, 23039, 36927, 31743, 8, 25, 33, 34, 16},
-  {30015, 23039, 32703, 31743, 8, 25, 42, 34, 25},
-  {14719, 23039, 16831, 31999, 8, 26, 33, 35, 16},
-  {53695, 12543, 55807, 22783, 9, 25, 33, 40, 16},
-  {36927, 23039, 38911, 31743, 8, 25, 31, 34, 15},
-  {4095, 0, 5823, 12543, 8, 34, 27, 49, 10},
-  {14079, 0, 15423, 12543, 6, 34, 21, 49, 9},
-  {5823, 0, 7551, 12543, 9, 34, 27, 49, 10},
-  {55423, 23039, 57599, 28927, 8, 21, 34, 23, 18},
+struct sdf_char
+{
+  u16 uvx, uvy, originX, originY, w, h, advance;
 };
 
-static struct ui_sdf_font font_Ubuntu = { "Ubuntu", 32, 1024, 256, characters_Ubuntu, &tex_ubuntu };
-*/
+struct sdf_font
+{
+  const char *name;
+  int size, width, height;
+  struct sdf_char *characters;
+};
+
+static struct sdf_char characters_Ubuntu[] = {
+  {655, 167, 9, 9, 18, 18, 11},
+  {561, 64, 6, 42, 25, 52, 13},
+  {435, 167, 6, 45, 32, 30, 20},
+  {797, 64, 7, 42, 46, 51, 32},
+  {362, 0, 6, 46, 39, 60, 27},
+  {918, 0, 7, 43, 55, 52, 41},
+  {973, 0, 7, 43, 47, 52, 32},
+  {467, 167, 6, 45, 23, 30, 11},
+  {142, 0, 5, 46, 30, 64, 15},
+  {172, 0, 9, 46, 30, 64, 15},
+  {291, 167, 7, 42, 38, 37, 23},
+  {171, 167, 6, 35, 40, 42, 27},
+  {410, 167, 7, 14, 25, 31, 12},
+  {625, 167, 8, 26, 30, 22, 14},
+  {558, 167, 6, 15, 25, 24, 12},
+  {0, 0, 10, 46, 39, 64, 18},
+  {88, 64, 7, 43, 41, 52, 27},
+  {532, 116, 5, 42, 32, 51, 27},
+  {370, 64, 6, 43, 39, 52, 27},
+  {409, 64, 6, 43, 39, 52, 27},
+  {176, 116, 7, 42, 42, 51, 27},
+  {448, 64, 6, 42, 39, 52, 27},
+  {170, 64, 6, 42, 40, 52, 27},
+  {343, 116, 6, 42, 40, 51, 27},
+  {854, 0, 6, 43, 40, 53, 27},
+  {210, 64, 7, 43, 40, 52, 27},
+  {146, 167, 6, 34, 25, 43, 12},
+  {564, 116, 7, 34, 26, 51, 12},
+  {211, 167, 6, 34, 40, 39, 27},
+  {370, 167, 6, 30, 40, 32, 27},
+  {251, 167, 6, 34, 40, 39, 27},
+  {525, 64, 8, 43, 36, 52, 19},
+  {401, 0, 6, 43, 57, 59, 45},
+  {700, 64, 9, 42, 49, 51, 32},
+  {218, 116, 5, 42, 42, 51, 31},
+  {769, 0, 6, 43, 44, 53, 30},
+  {935, 64, 5, 42, 45, 51, 34},
+  {383, 116, 5, 42, 40, 51, 27},
+  {423, 116, 5, 42, 38, 51, 26},
+  {724, 0, 6, 43, 45, 53, 32},
+  {45, 116, 5, 42, 44, 51, 34},
+  {590, 116, 5, 42, 23, 51, 13},
+  {487, 64, 9, 42, 38, 52, 24},
+  {89, 116, 5, 42, 44, 51, 30},
+  {461, 116, 5, 42, 38, 51, 25},
+  {646, 64, 6, 42, 54, 51, 42},
+  {0, 116, 5, 42, 45, 51, 35},
+  {674, 0, 6, 43, 50, 53, 37},
+  {302, 116, 5, 42, 41, 51, 29},
+  {312, 0, 6, 43, 50, 61, 37},
+  {133, 116, 5, 42, 43, 51, 30},
+  {813, 0, 7, 43, 41, 53, 25},
+  {0, 64, 8, 42, 44, 52, 27},
+  {44, 64, 5, 42, 44, 52, 33},
+  {749, 64, 8, 42, 48, 51, 31},
+  {586, 64, 8, 42, 60, 51, 44},
+  {843, 64, 8, 42, 46, 51, 30},
+  {889, 64, 9, 42, 46, 51, 28},
+  {260, 116, 7, 42, 42, 51, 27},
+  {202, 0, 4, 46, 29, 64, 16},
+  {39, 0, 10, 46, 39, 64, 18},
+  {231, 0, 9, 46, 29, 64, 16},
+  {329, 167, 7, 42, 41, 36, 27},
+  {583, 167, 9, 4, 42, 22, 23},
+  {490, 167, 6, 46, 27, 28, 18},
+  {695, 116, 7, 34, 38, 44, 25},
+  {458, 0, 5, 46, 40, 56, 28},
+  {733, 116, 7, 34, 37, 44, 22},
+  {498, 0, 7, 46, 40, 56, 28},
+  {655, 116, 7, 34, 40, 44, 27},
+  {641, 0, 5, 46, 33, 55, 18},
+  {250, 64, 7, 34, 40, 52, 27},
+  {603, 0, 5, 46, 38, 55, 27},
+  {894, 0, 6, 44, 24, 53, 12},
+  {282, 0, 12, 44, 30, 62, 12},
+  {564, 0, 5, 46, 39, 55, 25},
+  {538, 0, 5, 46, 26, 56, 13},
+  {860, 116, 5, 34, 52, 43, 41},
+  {0, 167, 5, 34, 38, 43, 27},
+  {613, 116, 7, 34, 42, 44, 28},
+  {290, 64, 5, 34, 40, 52, 28},
+  {330, 64, 7, 34, 40, 52, 28},
+  {113, 167, 5, 34, 33, 43, 18},
+  {770, 116, 7, 34, 36, 44, 21},
+  {499, 116, 5, 42, 33, 51, 19},
+  {38, 167, 5, 34, 38, 43, 27},
+  {912, 116, 8, 34, 41, 43, 24},
+  {806, 116, 8, 34, 54, 43, 37},
+  {953, 116, 8, 34, 41, 43, 24},
+  {129, 64, 9, 34, 41, 52, 24},
+  {76, 167, 7, 34, 37, 43, 22},
+  {78, 0, 7, 46, 32, 64, 16},
+  {260, 0, 4, 46, 22, 64, 13},
+  {110, 0, 9, 46, 32, 64, 16},
+  {517, 167, 7, 27, 41, 26, 27},
+};
+
+static struct sdf_font font_Ubuntu = {"Ubuntu", 48, 1024, 256, characters_Ubuntu};
+
+vg_tex2d tex_ubuntu = { .path = "textures/ubuntu.qoi" };
 
 // TEXTURES
 // ===========================================================================================================
@@ -114,7 +125,7 @@ vg_tex2d tex_monofur        =  { .path = "textures/ascii.qoi", .flags = VG_TEXTURE_NO_
 vg_tex2d tex_unkown            =  { .path = "textures/unkown.qoi" };
 vg_tex2d tex_buttons           =  { .path = "textures/buttons.qoi" };
 
-vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_ball_noise, &tex_monofur, &tex_unkown, &tex_buttons };
+vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_ball_noise, &tex_monofur, &tex_unkown, &tex_buttons, &tex_ubuntu };
 
 // AUDIO
 // ===========================================================================================================
@@ -591,158 +602,6 @@ void vg_register(void)
                |          |    |     |    |     |    |
 */
 
-float const MESH_NUMBER_0[] = {
-       #include "fonts/numbers/n0.h"
-};
-
-float const MESH_NUMBER_1[] = {
-       #include "fonts/numbers/n1.h"
-};
-
-float const MESH_NUMBER_2[] = {
-       #include "fonts/numbers/n2.h"
-};
-
-float const MESH_NUMBER_3[] = {
-       #include "fonts/numbers/n3.h"
-};
-
-float const MESH_NUMBER_4[] = {
-       #include "fonts/numbers/n4.h"
-};
-
-float const MESH_NUMBER_5[] = {
-       #include "fonts/numbers/n5.h"
-};
-
-float const MESH_NUMBER_6[] = {
-       #include "fonts/numbers/n6.h"
-};
-
-float const MESH_NUMBER_7[] = {
-       #include "fonts/numbers/n7.h"
-};
-
-float const MESH_NUMBER_8[] = {
-       #include "fonts/numbers/n8.h"
-};
-
-float const MESH_NUMBER_9[] = {
-       #include "fonts/numbers/n9.h"
-};
-
-float const MESH_NUMBERS_BUFFER[] =
-{
-       #include "fonts/numbers/n0.h"
-       #include "fonts/numbers/n1.h"
-       #include "fonts/numbers/n2.h"
-       #include "fonts/numbers/n3.h"
-       #include "fonts/numbers/n4.h"
-       #include "fonts/numbers/n5.h"
-       #include "fonts/numbers/n6.h"
-       #include "fonts/numbers/n7.h"
-       #include "fonts/numbers/n8.h"
-       #include "fonts/numbers/n9.h"
-};
-
-#define MESH_NUMBER_DIVISOR 6
-
-u32 const MESH_NUMBERS_OFFSETS[][2] =
-{
-       {
-               0,
-               vg_list_size( MESH_NUMBER_0 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               vg_list_size( MESH_NUMBER_0 ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_1 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_2 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_3 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 ) +
-                       vg_list_size( MESH_NUMBER_3 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_4 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 ) +
-                       vg_list_size( MESH_NUMBER_3 ) +
-                       vg_list_size( MESH_NUMBER_4 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_5 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 ) +
-                       vg_list_size( MESH_NUMBER_3 ) +
-                       vg_list_size( MESH_NUMBER_4 ) +
-                       vg_list_size( MESH_NUMBER_5 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_6 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 ) +
-                       vg_list_size( MESH_NUMBER_3 ) +
-                       vg_list_size( MESH_NUMBER_4 ) +
-                       vg_list_size( MESH_NUMBER_5 ) +
-                       vg_list_size( MESH_NUMBER_6 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_7 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 ) +
-                       vg_list_size( MESH_NUMBER_3 ) +
-                       vg_list_size( MESH_NUMBER_4 ) +
-                       vg_list_size( MESH_NUMBER_5 ) +
-                       vg_list_size( MESH_NUMBER_6 ) +
-                       vg_list_size( MESH_NUMBER_7 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_8 ) / MESH_NUMBER_DIVISOR
-       },
-       {
-               (
-                       vg_list_size( MESH_NUMBER_0 ) +
-                       vg_list_size( MESH_NUMBER_1 ) +
-                       vg_list_size( MESH_NUMBER_2 ) +
-                       vg_list_size( MESH_NUMBER_3 ) +
-                       vg_list_size( MESH_NUMBER_4 ) +
-                       vg_list_size( MESH_NUMBER_5 ) +
-                       vg_list_size( MESH_NUMBER_6 ) +
-                       vg_list_size( MESH_NUMBER_7 ) +
-                       vg_list_size( MESH_NUMBER_8 )
-               ) / MESH_NUMBER_DIVISOR,
-               vg_list_size( MESH_NUMBER_9 ) / MESH_NUMBER_DIVISOR
-       }
-};
-
 struct cmp_level
 {
        const char *map_name;
index 6ef752da2657b68f1349ae6e20ae2152f0020920..3842947f483faa225346febdcf3217bd8e946d41 100644 (file)
Binary files a/textures/buttons.png and b/textures/buttons.png differ
index 55383a66a679d80c39bda2793c70b599aa92e1cd..083432207e55b465ee491d075cdb2e91684d406e 100644 (file)
Binary files a/textures/ubuntu.png and b/textures/ubuntu.png differ