X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_routes.h;h=f899694a574668e08d4a19454f1bf3bc7764b33b;hb=4a883ac1b2506032f9dddab342712de46f2ca734;hp=d714ff3f70ed9e77481eb4fa446b2f2a82490c5f;hpb=4f4458d229e40a852708319861224b7cc48ad0b9;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_routes.h b/world_routes.h index d714ff3..f899694 100644 --- a/world_routes.h +++ b/world_routes.h @@ -66,6 +66,7 @@ struct subworld_routes u32 segment_start, segment_count, fade_start, fade_count; double fade_timer_start; + float xpos; } ui; } @@ -460,12 +461,30 @@ static void world_routes_ui_notch( u32 route, float time ) } } +static void world_routes_ui_draw_segment( struct route_ui_segment *segment ) +{ + u32 c0, c1; + world_routes_ui_split_indices( segment->index_start, + segment->index_count, &c0, &c1 ); + if( c0 ) + glDrawElements( GL_TRIANGLES, c0, GL_UNSIGNED_SHORT, + (void *)(segment->index_start*sizeof(u16))); + if( c1 ) + glDrawElements( GL_TRIANGLES, c1, GL_UNSIGNED_SHORT, (void *)(0) ); +} + +/* + * Draws full bar at Y offset(offset). + */ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) { + float const k_bar_height = 0.05f, + k_bar_scale_x = 0.005f; + struct subworld_routes *r = subworld_routes(); struct route *pr = &r->routes[route]; - float cx = 0.0f; + float cx = pr->ui.xpos; shader_routeui_use(); glBindVertexArray( pr->ui.vao ); @@ -473,7 +492,9 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) float fade_amt = vg_time - pr->ui.fade_timer_start; fade_amt = vg_clampf( fade_amt / 1.0f, 0.0f, 1.0f ); - float fade_block_size = 0.0f; + float fade_block_size = 0.0f, + main_block_size = 0.0f; + for( u32 i=0; iui.fade_count; i++ ) { u32 j = (pr->ui.fade_start + i) % k_max_ui_segments; @@ -488,7 +509,12 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) v4_copy( colour, fade_colour ); fade_colour[3] *= 1.0f-fade_amt; - float height = pr->factive*0.1f; + /* + * Draw fadeout bar + */ + + float height = pr->factive*k_bar_height, + base = -1.0f + (offset+0.5f)*k_bar_height; shader_routeui_uColour( fade_colour ); for( u32 i=0; iui.fade_count; i++ ) @@ -496,39 +522,32 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) u32 j = (pr->ui.fade_start + i) % k_max_ui_segments; struct route_ui_segment *segment = &pr->ui.segments[j]; - u32 c0, c1; - world_routes_ui_split_indices( segment->index_start, - segment->index_count, &c0, &c1 ); - - shader_routeui_uOffset( (v4f){ cx, offset, 0.005f, height } ); - if( c0 ) - glDrawElements( GL_TRIANGLES, c0, GL_UNSIGNED_SHORT, - (void *)(segment->index_start*sizeof(u16))); - if( c1 ) - glDrawElements( GL_TRIANGLES, c1, GL_UNSIGNED_SHORT, (void *)(0) ); + shader_routeui_uOffset( (v4f){ cx*k_bar_scale_x, base, + k_bar_scale_x, height } ); + world_routes_ui_draw_segment( segment ); cx += segment->length; } + /* + * Draw main bar + */ shader_routeui_uColour( colour ); for( u32 i=0; iui.segment_count; i++ ) { u32 j = (pr->ui.segment_start + i) % k_max_ui_segments; struct route_ui_segment *segment = &pr->ui.segments[j]; - u32 c0, c1; - world_routes_ui_split_indices( segment->index_start, - segment->index_count, &c0, &c1 ); - - shader_routeui_uOffset( (v4f){ cx, offset, 0.005f, height } ); - if( c0 ) - glDrawElements( GL_TRIANGLES, c0, GL_UNSIGNED_SHORT, - (void *)(segment->index_start*sizeof(u16))); - if( c1 ) - glDrawElements( GL_TRIANGLES, c1, GL_UNSIGNED_SHORT, (void *)(0) ); + shader_routeui_uOffset( (v4f){ cx*k_bar_scale_x, base, + k_bar_scale_x, height } ); + world_routes_ui_draw_segment( segment ); cx += segment->length; + + main_block_size += segment->length; } + + pr->ui.xpos = vg_lerpf( pr->ui.xpos, -main_block_size * 0.5f, 0.03f ); } /* @@ -856,8 +875,6 @@ static void world_routes_gen_meshes(void) v3_muladds( hb.pos, up, 0.06f, vb.co ); v3_copy( up, va.norm ); v3_copy( up, vb.norm ); - v3_zero( va.colour ); - v3_zero( vb.colour ); v2_zero( va.uv ); v2_zero( vb.uv ); @@ -958,7 +975,7 @@ static void render_world_routes_ui(void) for( int i=0; iroute_count; i++ ) { struct route *route = &r->routes[i]; - world_routes_ui_draw( i, route->colour, active_offset*0.1f ); + world_routes_ui_draw( i, route->colour, active_offset ); active_offset += route->factive; }