u32 segment_start, segment_count, fade_start, fade_count;
double fade_timer_start;
+ float xpos;
}
ui;
}
}
}
+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 );
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; i<pr->ui.fade_count; i++ )
{
u32 j = (pr->ui.fade_start + i) % k_max_ui_segments;
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; i<pr->ui.fade_count; i++ )
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; i<pr->ui.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 );
}
/*
for( int i=0; i<r->route_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;
}