X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_volumes.c;h=dac790e9baa0d99387186ab20a5b03fc2d20a218;hb=137d40d96fe923600d8378b8e138e3c276f27ff4;hp=0cc1ed608929b03aaf094afd49ff4e4cba7cb5ac;hpb=c2ee05fe23699fd1de7e1d8259b9bc272b232058;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_volumes.c b/world_volumes.c index 0cc1ed6..dac790e 100644 --- a/world_volumes.c +++ b/world_volumes.c @@ -37,23 +37,37 @@ static void world_volumes_update( world_instance *world, v3f pos ){ random_ticks ++; } - float radius = 25.0f; - boxf volume_proximity; - v3_add( pos, (v3f){ radius, radius, radius }, volume_proximity[1] ); - v3_sub( pos, (v3f){ radius, radius, radius }, volume_proximity[0] ); + float radius = 32.0f; bh_iter it; - bh_iter_init_box( 0, &it, volume_proximity ); + bh_iter_init_range( 0, &it, pos, radius ); i32 idx; - while( bh_next( world->volume_bh, &it, &idx ) ){ - ent_volume *volume = mdl_arritm( &world->ent_volume, idx ); + while( bh_next( world->entity_bh, &it, &idx ) ){ + u32 id = world->entity_list[ idx ], + type = mdl_entity_id_type( id ), + index = mdl_entity_id_id( id ); + + if( type != k_ent_volume ) continue; + ent_volume *volume = mdl_arritm( &world->ent_volume, index ); boxf cube = {{-1.0f,-1.0f,-1.0f},{1.0f,1.0f,1.0f}}; - if( volume->type == k_volume_subtype_trigger ){ + if( volume->flags & k_ent_volume_flag_particles ){ + vg_line_boxf_transformed( volume->to_world, cube, 0xff00c0ff ); + + for( int j=0; j @@ -64,82 +78,21 @@ static void world_volumes_update( world_instance *world, v3f pos ){ if( (fabsf(local[0]) <= 1.0f) && (fabsf(local[1]) <= 1.0f) && - (fabsf(local[2]) <= 1.0f) ) - { + (fabsf(local[2]) <= 1.0f) ){ ent_call basecall; - basecall.function = k_ent_function_trigger; - basecall.id = mdl_entity_id( k_ent_volume, idx ); + basecall.function = 0; + basecall.id = id; basecall.data = NULL; entity_call( world, &basecall ); world_static.active_trigger_volumes[ - world_static.active_trigger_volume_count ++ ] = idx; + world_static.active_trigger_volume_count ++ ] = index; } else vg_line_boxf_transformed( volume->to_world, cube, 0xffcccccc ); } - else if( volume->type == k_volume_subtype_particle ){ - vg_line_boxf_transformed( volume->to_world, cube, 0xff00c0ff ); - - for( int j=0; jent_volume, item_index ); - - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){ 1.0f, 1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){ 1.0f, 1.0f,-1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){ 1.0f,-1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){ 1.0f,-1.0f,-1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){-1.0f, 1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){-1.0f, 1.0f,-1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){-1.0f,-1.0f, 1.0f} ); - m4x3_expand_aabb_point( volume->to_world, bound, (v3f){-1.0f,-1.0f,-1.0f} ); -} - -VG_STATIC float volume_vg_centroid( void *user, u32 item_index, int axis ) -{ - world_instance *world = user; - ent_volume *volume = mdl_arritm( &world->ent_volume, item_index ); - return volume->to_world[3][axis]; -} - -VG_STATIC void volume_vg_swap( void *user, u32 ia, u32 ib ) -{ - world_instance *world = user; - ent_volume *a = mdl_arritm( &world->ent_volume, ia ), - *b = mdl_arritm( &world->ent_volume, ib ), - temp; - - temp = *a; - *a = *b; - *b = temp; -} - -VG_STATIC void volume_vg_debug( void *user, u32 item_index ) -{ - world_instance *world = user; - ent_volume *volume = mdl_arritm( &world->ent_volume, item_index ); - vg_line_boxf_transformed( volume->to_world, (boxf){{-1.0f,-1.0f,-1.0f}, - { 1.0f, 1.0f, 1.0f}}, - 0xff00ff00 ); -} - #endif /* WORLD_VOLUMES_H */