unlock rendering
[carveJwlIkooP6JGAAIwe30JlM.git] / world_routes.c
index 26261a1ed72cc56e4658827dbf83af118e24b1c6..8dd2a8f65aecd60405ab7ccf5b1f132101a078bb 100644 (file)
@@ -365,8 +365,8 @@ void world_routes_place_curve( world_instance *world, ent_route *route,
       ha.dist = 8.0f;
       hb.dist = 8.0f;
 
-      int resa = ray_world( world, sa, down, &ha ),
-          resb = ray_world( world, sb, down, &hb );
+      int resa = ray_world( world, sa, down, &ha, k_material_flag_ghosts ),
+          resb = ray_world( world, sb, down, &hb, k_material_flag_ghosts );
       
       if( pcbuf && resa ){
          world_routes_pointcloud_spot( world, pcbuf, ha.pos, 
@@ -712,6 +712,10 @@ VG_STATIC void world_routes_surface_grid( world_instance *world,
                u32 *tri = &world->scene_geo.arrindices[ idx*3 ];
                v3f vs[3];
 
+               u16 mask = k_material_flag_preview_visibile;
+               if( !(world->scene_geo.arrvertices[tri[0]].flags & mask) ) 
+                  continue;
+
                for( u32 i=0; i<3; i++ ){
                   v3_copy( world->scene_geo.arrvertices[tri[i]].co, vs[i] );
                }
@@ -719,11 +723,6 @@ VG_STATIC void world_routes_surface_grid( world_instance *world,
                f32 t;
                if( ray_tri( vs, ro, dir, &t ) ){
                   v3_muladds( ro, dir, t, hit );
-                  struct world_surface *m1 = 
-                     world_tri_index_surface( world, tri[0] );
-
-                  if( !(m1->info.flags & k_material_flag_preview_visibile) )
-                     continue;
 
                   if( world->water.enabled )
                      if( hit[1] < world->water.height )
@@ -980,7 +979,8 @@ VG_STATIC void world_routes_fixedupdate( world_instance *world )
 
          int l = rb_sphere__scene( particle->obj.rb.to_world,
                                    &particle->obj.inf.sphere,
-                                   NULL, &world->rb_geo.inf.scene, buf );
+                                   NULL, &world->rb_geo.inf.scene, buf,
+                                   k_material_flag_ghosts );
 
          for( int j=0; j<l; j++ ){
             buf[j].rba = &particle->obj.rb;
@@ -1109,12 +1109,15 @@ VG_STATIC void world_routes_update_timer_texts( world_instance *world )
             positions[0][1] = h1;
          }
 
-         m3x3_copy( gate->to_world, text->transform );
+         m4x3f mmdl;
+         ent_gate_get_mdl_mtx( gate, mmdl );
+
+         m3x3_copy( mmdl, text->transform );
          float ratio = v3_length(text->transform[0]) / 
                         v3_length(text->transform[1]);
 
          m3x3_scale( text->transform, (v3f){ size, size*ratio, 0.1f } );
-         m4x3_mulv( gate->to_world, positions[j], text->transform[3] );
+         m4x3_mulv( mmdl, positions[j], text->transform[3] );
       }
    }
 }
@@ -1304,7 +1307,10 @@ VG_STATIC void render_world_routes( world_instance *world, camera *cam,
 
          ent_checkpoint *cp = mdl_arritm( &world->ent_checkpoint, next );
          ent_gate *gate = mdl_arritm( &world->ent_gate, cp->gate_index );
-         shader_model_gate_uMdl( gate->to_world );
+
+         m4x3f mmdl;
+         ent_gate_get_mdl_mtx( gate, mmdl );
+         shader_model_gate_uMdl( mmdl );
 
          for( u32 j=0; j<4; j++ ){
             if( gate->routes[j] == i ){