X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=fishladder.c;h=7cda200bd7727d537cc849e214f27d7c3c3e5ec1;hb=e00ea4ccba1891970699f9b5b78ba1ebaada2974;hp=74a39ce4de1bcd955e8c5db78b89b5ca3e6222b9;hpb=499bcabb125cdf2618a6be89ccade08b007254f3;p=fishladder.git diff --git a/fishladder.c b/fishladder.c index 74a39ce..7cda200 100644 --- a/fishladder.c +++ b/fishladder.c @@ -23,9 +23,9 @@ Reverse order New things to program: - UI text element renderer (SDF) - Particle system thing for ball collision - Level descriptions / titles + UI text element renderer (SDF) DONE(sorta) + Particle system thing for ball collision + Level descriptions / titles HALF Row Gridlines for I/O Play button / Speed controller @@ -355,7 +355,7 @@ struct world int num_fishes; - char map_name[128]; + char map_name[64]; struct career_level *ptr_career_level; u32 score; @@ -402,9 +402,9 @@ static int map_load( const char *str, const char *name ) // Scan for width for(;; world.w ++) { - if( str[world.w] == ';' ) + if( c[world.w] == ';' ) break; - else if( !str[world.w] ) + else if( !c[world.w] ) { vg_error( "Unexpected EOF when parsing level\n" ); return 0; @@ -1266,7 +1266,7 @@ void vg_update(void) world.tile_y = floorf( world.tile_pos[1] ); // Tilemap editing - if( !world.simulating ) + if( !world.simulating && !gui_want_mouse() ) { v2_copy( vg_mouse_ws, drag_to_co ); @@ -1965,6 +1965,27 @@ void vg_render(void) } + // Level title + ui_begin( &ui_global_ctx, 512, 256 ); + + ui_global_ctx.override_colour = 0xff9a8a89; + //ui_text( &ui_global_ctx, world.map_title, 6, 0 ); + ui_global_ctx.override_colour = 0xffffffff; + + ui_resolve( &ui_global_ctx ); + + m3x3f world_text; + m3x3_copy( vg_pv, world_text ); + m3x3_translate( world_text, (v3f){ 1.55f, 1.9f, 0.0f } ); + m3x3_rotate( world_text, VG_PIf*0.5f ); + m3x3_scale( world_text, (v3f){0.01f,-0.01f,0.01f} ); + + ui_draw( &ui_global_ctx, world_text ); + + // Main + // ========================================================================================= + + use_mesh( &world.tile ); SHADER_USE( shader_tile_main ); m2x2f subtransform; @@ -2311,12 +2332,63 @@ void vg_render(void) level_ui_space[1] -= 0.01f; draw_numbers( level_ui_space, i ); } - - //use_mesh( &world.numbers ); - //draw_numbers( (v3f){ 0.0f, -0.5f, 0.1f }, 128765 ); } void vg_ui(void) { + ui_global_ctx.cursor[0] = 0; + ui_global_ctx.cursor[1] = 0; + ui_global_ctx.cursor[2] = 256; + + gui_fill_y(); + + ui_global_ctx.id_base = 4 << 16; + gui_new_node(); + { + gui_fill_rect( ui_global_ctx.cursor, 0xff5577ff ); + + gui_text( "MARBLE COMPUTING", 4, 0 ); + + ui_global_ctx.cursor[1] += 45; + ui_global_ctx.cursor[3] = 709; + + // Level scroll view + gui_new_node(); + { + gui_fill_rect( ui_global_ctx.cursor, 0xffff7729 ); + gui_set_clip( ui_global_ctx.cursor ); + + ui_global_ctx.cursor[2] = 16; + gui_align_right(); + + static struct ui_scrollbar sb = { + .bar_height = 400 + }; + ui_scrollbar( &ui_global_ctx, &sb, 0 ); + + ui_global_ctx.cursor[2] = 240; + ui_global_ctx.cursor[3] = 50; + gui_align_left(); + + ui_px content_height = vg_list_size(cmp_levels_basic)*ui_global_ctx.cursor[3]; + ui_global_ctx.cursor[1] -= ui_calculate_content_scroll( &sb, content_height ); + + for( int i = 0; i < vg_list_size(cmp_levels_basic); i ++ ) + { + struct cmp_level *lvl_info = &cmp_levels_basic[i]; + + gui_new_node(); + { + gui_fill_rect( ui_global_ctx.cursor, i&0x1?0xff23fce45:0xff8722f8 ); + gui_text( lvl_info->title, 3, 0 ); + } + gui_end_down(); + } + + gui_release_clip(); + } + gui_end_down(); + } + gui_end(); }