- render_sky( camera );
- render_world_routes( projection, camera[3] );
- render_world_standard( projection, camera[3] );
- render_world_vb( projection, camera[3] );
- render_world_alphatest( projection, camera[3] );
- render_terrain( projection, camera[3] );
-
- int closest = 0;
- float min_dist = INFINITY;
-
- if( !world.route_count )
- return;
-
- for( int i=0; i<world.route_count; i++ )
- {
- float dist = v3_dist2( world.routes[i].scoreboard_transform[3],
- camera[3] );
-
- if( dist < min_dist )
- {
- min_dist = dist;
- closest = i;
+ static double g_time = 0.0;
+ g_time += vg.time_delta * (1.0/(k_day_length*60.0));
+
+ struct ub_world_lighting *state = &world->ub_lighting;
+
+ state->g_time = g_time;
+ state->g_realtime = vg.time;
+ state->g_debug_indices = k_debug_light_indices;
+ state->g_light_preview = k_light_preview;
+ state->g_debug_complexity = k_debug_light_complexity;
+ state->g_time_of_day = vg_fractf( g_time );
+ state->g_day_phase = cosf( state->g_time_of_day * VG_PIf * 2.0f );
+ state->g_sunset_phase= cosf( state->g_time_of_day * VG_PIf * 4.0f + VG_PIf );
+
+ state->g_day_phase = state->g_day_phase * 0.5f + 0.5f;
+ state->g_sunset_phase = powf( state->g_sunset_phase * 0.5f + 0.5f, 6.0f );
+
+ float a = state->g_time_of_day * VG_PIf * 2.0f;
+ state->g_sun_dir[0] = sinf( a );
+ state->g_sun_dir[1] = cosf( a );
+ state->g_sun_dir[2] = 0.2f;
+ v3_normalize( state->g_sun_dir );
+
+
+ world->probabilities[ k_probability_curve_constant ] = 1.0f;
+
+ float dp = state->g_day_phase;
+
+ world->probabilities[ k_probability_curve_wildlife_day ] =
+ (dp*dp*0.8f+state->g_sunset_phase)*0.8f;
+ world->probabilities[ k_probability_curve_wildlife_night ] =
+ 1.0f-powf(fabsf((state->g_time_of_day-0.5f)*5.0f),5.0f);
+
+
+ glBindBuffer( GL_UNIFORM_BUFFER, world->ubo_lighting );
+ glBufferSubData( GL_UNIFORM_BUFFER, 0,
+ sizeof(struct ub_world_lighting), &world->ub_lighting );
+}
+
+VG_STATIC void skateshop_render(void);
+VG_STATIC void render_world( world_instance *world, camera *cam,
+ int layer_depth )
+{
+ render_sky( world, cam );
+
+ render_world_routes( world, cam, layer_depth );
+ render_world_standard( world, cam );
+ render_world_vb( world, cam );
+ render_world_alphatest( world, cam );
+ render_terrain( world, cam );
+
+ if( layer_depth == 0 ){
+ skateshop_render();
+
+ /* Render SFD's */
+ u32 closest = 0;
+ float min_dist = INFINITY;
+
+ if( !mdl_arrcount( &world->ent_route ) )
+ return;
+
+ for( u32 i=0; i<mdl_arrcount( &world->ent_route ); i++ ){
+ ent_route *route = mdl_arritm( &world->ent_route, i );
+ float dist = v3_dist2( route->board_transform[3], cam->pos );
+
+ if( dist < min_dist ){
+ min_dist = dist;
+ closest = i;
+ }