ray_hit hit;
hit.dist = INFINITY;
- if( ray_world( world, pos, (v3f){0.0f,-1.0f,0.0f}, &hit )){
+ if( ray_world( world, pos, (v3f){0.0f,-1.0f,0.0f}, &hit,
+ k_material_flag_ghosts )){
struct world_surface *m1 = ray_hit_surface( world, &hit );
if((hit.normal[1] > 0.8f) && (m1 == mat) && (hit.pos[1] > 0.0f+10.0f)){
world_gen_add_blob( world, scene, &hit );
&world->meta, i );
scene_copy_slice( &world->scene_geo, &surf->sm_geo );
+ scene_set_vertex_flags( &world->scene_geo,
+ surf->sm_geo.vertex_start,
+ surf->sm_geo.vertex_count,
+ (u16)(surf->info.flags & 0xffff) );
}
/* compress that bad boy */
}
/* unpack challenge models */
- for( u32 i=0; i<mdl_arrcount( &world->ent_challenge ); i++ ){
- ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i );
+ for( u32 i=0; i<mdl_arrcount( &world->ent_objective ); i++ ){
+ ent_objective *objective = mdl_arritm( &world->ent_objective, i );
- for( u32 j=0; j<challenge->submesh_count; j ++ ){
+ for( u32 j=0; j<objective->submesh_count; j ++ ){
mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
- challenge->submesh_start+j );
+ objective->submesh_start+j );
world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
}
}
v3f closest;
closest_point_aabb( light->transform.co, bbx, closest );
- float dist = v3_dist( closest, light->transform.co ),
- influence = 1.0f/(dist+1.0f);
+ f32 dist2 = v3_dist2( closest, light->transform.co );
- if( dist > light->range )
+ if( dist2 > light->range*light->range )
continue;
+ f32 dist = sqrtf(dist2),
+ influence = 1.0f/(dist+1.0f);
+
if( light->type == k_light_type_spot){
v3f local;
m4x3_mulv( light->inverse_world, center, local );