+VG_STATIC void ent_audio_call( world_instance *world, ent_call *call )
+{
+ ent_audio *audio = mdl_arritm( &world->ent_audio, call->ent.index );
+
+ if( call->function == k_ent_function_particle_spawn ){
+ float chance = vg_randf()*100.0f,
+ bar = 0.0f;
+
+ for( u32 i=0; i<audio->clip_count; i++ ){
+ ent_audio_clip *clip = mdl_arritm( &world->ent_audio_clip,
+ audio->clip_start+i );
+
+ bar += clip->probability;
+
+ if( chance < bar ){
+ float *pos = call->data;
+
+ audio_lock();
+ audio_oneshot_3d( &clip->clip, pos,
+ audio->transform.s[0],
+ audio->volume );
+ audio_unlock();
+ break;
+ }
+ }
+ }
+}
+
+VG_STATIC void entity_call( world_instance *world, ent_call *call )
+{
+ if( call->ent.type == k_ent_volume ){
+ ent_volume_call( world, call );
+ } else if( call->ent.type == k_ent_audio ){
+ ent_audio_call( world, call );
+ }
+}
+
+VG_STATIC void world_update( world_instance *world, v3f pos )
+{
+ /* TEMP!!!!!! */
+ 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 );
+
+
+
+ glBindBuffer( GL_UNIFORM_BUFFER, world->ubo_lighting );
+ glBufferSubData( GL_UNIFORM_BUFFER, 0,
+ sizeof(struct ub_world_lighting), &world->ub_lighting );
+ /* TEMP!!!!!! */
+
+ world_global.sky_time += world_global.sky_rate * vg.time_delta;
+ world_global.sky_rate = vg_lerp( world_global.sky_rate,
+ world_global.sky_target_rate,
+ vg.time_delta * 5.0 );
+
+ world_routes_update( world );
+ world_routes_debug( world );
+
+ /* ---- SFD ------------ */