point maps (wip)
[carveJwlIkooP6JGAAIwe30JlM.git] / world_render.h
index 7fb47b0dc2cb580c9ee3fd1a8521d04643018412..10e416325b306529daa4ec9d0f6f2faa369098b2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
+ * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved
  */
 
 #ifndef WORLD_RENDER_H
@@ -60,8 +60,8 @@ VG_STATIC void world_render_init(void)
    vg_tex2d_load_qoi_async_file( "textures/garbage.qoi", 
                                  VG_TEX2D_NEAREST|VG_TEX2D_REPEAT, 
                                  &tex_terrain_noise );
-   vg_async_item *call = vg_async_alloc(0);
-   vg_async_dispatch( call, async_world_render_init );
+
+   vg_async_call( async_world_render_init, NULL, 0 );
 }
 
 VG_STATIC void world_link_lighting_ub( world_instance *world, GLuint shader )
@@ -405,8 +405,11 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam,
          render_gate( world, gate, cam, layer_depth );
       }
       else if( gate->type == k_gate_type_nonlocel ){
-         world_instance *dest_world = &world_global.worlds[ gate->target ];
-         render_gate( dest_world, gate, cam, layer_depth );
+         if( skaterift.async_op != k_async_op_world_loading &&
+             skaterift.async_op != k_async_op_world_preloading ){
+            world_instance *dest_world = &world_global.worlds[ gate->target ];
+            render_gate( dest_world, gate, cam, layer_depth );
+         }
       }
       else
          world->rendering_gate = NULL;
@@ -415,17 +418,16 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam,
 
 VG_STATIC void world_prerender( world_instance *world )
 {
-   static double g_time = 0.0;
-   g_time += vg.time_delta * (1.0/(k_day_length*60.0));
+   world->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_time = world->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_time_of_day = vg_fractf( world->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 );
 
@@ -438,9 +440,7 @@ state->g_time_of_day = vg_fractf( g_time );
    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 ] =
@@ -448,12 +448,12 @@ state->g_time_of_day = vg_fractf( g_time );
    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 )
 {
@@ -465,25 +465,29 @@ VG_STATIC void render_world( world_instance *world, camera *cam,
    render_world_alphatest( world, cam );
    render_terrain( world, cam );
 
-   /* Render SFD's */
-   u32 closest = 0;
-   float min_dist = INFINITY;
+   if( layer_depth == 0 ){
+      skateshop_render();
 
-   if( !mdl_arrcount( &world->ent_route ) )
-      return;
+      /* Render SFD's */
+      u32 closest = 0;
+      float min_dist = INFINITY;
 
-   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( !mdl_arrcount( &world->ent_route ) )
+         return;
 
-      if( dist < min_dist ){
-         min_dist = dist;
-         closest = i;
+      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;
+         }
       }
-   }
 
-   ent_route *route = mdl_arritm( &world->ent_route, closest );
-   sfd_render( world, cam, route->board_transform );
+      ent_route *route = mdl_arritm( &world->ent_route, closest );
+      sfd_render( world, cam, route->board_transform );
+   }
 }
 
 VG_STATIC void render_world_depth( world_instance *world, camera *cam )