route markers in map, fix cubemap rendering in menu
[carveJwlIkooP6JGAAIwe30JlM.git] / world_routes.c
index 4998cc115efa779b0d89ae4ce657326525ebec52..36d70d79f9246194cf0227b87680ea74dc40eb2e 100644 (file)
@@ -960,8 +960,10 @@ static void world_routes_update( world_instance *world )
    for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
       ent_route *route = mdl_arritm( &world->ent_route, i );
       
-      int target = route->active_checkpoint == 0xffff? 0: 1;
-      route->factive = vg_lerpf( route->factive, target, 0.6f*vg.time_delta );
+      int target = (route->active_checkpoint == 0xffff? 0: 1) || 
+                    skaterift.activity == k_skaterift_respawning;
+      route->factive = vg_lerpf( route->factive, target, 
+                                 0.6f*vg.time_frame_delta );
    }
 
    for( u32 i=0; i<world_render.text_particle_count; i++ ){
@@ -970,8 +972,7 @@ static void world_routes_update( world_instance *world )
    }
 }
 
-static void world_routes_fixedupdate( world_instance *world )
-{
+static void world_routes_fixedupdate( world_instance *world ){
    rb_solver_reset();
 
    for( u32 i=0; i<world_render.text_particle_count; i++ ){
@@ -1199,9 +1200,20 @@ static void world_routes_fracture( world_instance *world, ent_gate *gate,
    }
 }
 
+static void render_gate_markers( int run_id, ent_gate *gate ){
+   for( u32 j=0; j<4; j++ ){
+      if( gate->routes[j] == run_id ){
+         m4x3f mmdl;
+         ent_gate_get_mdl_mtx( gate, mmdl );
+         shader_model_gate_uMdl( mmdl );
+         mdl_draw_submesh( &world_gates.sm_marker[j] );
+         break;
+      }
+   }
+}
+
 static void render_world_routes( world_instance *world, camera *cam, 
-                                    int layer_depth )
-{
+                                    int layer_depth ){
    m4x3f identity_matrix;
    m4x3_identity( identity_matrix );
 
@@ -1292,37 +1304,48 @@ static void render_world_routes( world_instance *world, camera *cam,
 
    /* skip writing into the motion vectors for this */
    glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } );
+   glDisable( GL_CULL_FACE );
 
-   for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
-      ent_route *route = mdl_arritm( &world->ent_route, i );
+   if( skaterift.activity == k_skaterift_respawning ){
+      for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
+         ent_route *route = mdl_arritm( &world->ent_route, i );
 
-      if( route->active_checkpoint != 0xffff ){
          v4f colour;
-         float brightness = 0.3f + world->ub_lighting.g_day_phase;
-         v3_muls( route->colour, brightness, colour );
-         colour[3] = 1.0f-route->factive;
+         v3_muls( route->colour, 1.6666f, colour );
+         colour[3] = 0.0f;
 
          shader_model_gate_uColour( colour );
 
-         u32 next = route->active_checkpoint+1+layer_depth;
-             next = next % route->checkpoints_count;
-             next += route->checkpoints_start;
+         for( u32 j=0; j<mdl_arrcount(&world->ent_gate); j ++ ){
+            ent_gate *gate = mdl_arritm( &world->ent_gate, j );
+            if( !(gate->flags & k_ent_gate_nonlocal) )
+               render_gate_markers( i, gate );
+         }
+      }
+   }
+   else{
+      for( u32 i=0; i<mdl_arrcount(&world->ent_route); i++ ){
+         ent_route *route = mdl_arritm( &world->ent_route, i );
 
-         ent_checkpoint *cp = mdl_arritm( &world->ent_checkpoint, next );
-         ent_gate *gate = mdl_arritm( &world->ent_gate, cp->gate_index );
+         if( route->active_checkpoint != 0xffff ){
+            v4f colour;
+            float brightness = 0.3f + world->ub_lighting.g_day_phase;
+            v3_muls( route->colour, brightness, colour );
+            colour[3] = 1.0f-route->factive;
 
-         m4x3f mmdl;
-         ent_gate_get_mdl_mtx( gate, mmdl );
-         shader_model_gate_uMdl( mmdl );
+            shader_model_gate_uColour( colour );
 
-         for( u32 j=0; j<4; j++ ){
-            if( gate->routes[j] == i ){
-               mdl_draw_submesh( &world_gates.sm_marker[j] );
-               break;
-            }
+            u32 next = route->active_checkpoint+1+layer_depth;
+                next = next % route->checkpoints_count;
+                next += route->checkpoints_start;
+
+            ent_checkpoint *cp = mdl_arritm( &world->ent_checkpoint, next );
+            ent_gate *gate = mdl_arritm( &world->ent_gate, cp->gate_index );
+            render_gate_markers( i, gate );
          }
       }
    }
+   glEnable( GL_CULL_FACE );
    glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 } );
 }