1 #include "world_volumes.h"
3 void world_volumes_update( world_instance
*world
, v3f pos
)
5 /* filter and check the existing ones */
7 for( u32 i
=0; i
<world_static
.active_trigger_volume_count
; i
++ ){
8 i32 idx
= world_static
.active_trigger_volumes
[i
];
9 ent_volume
*volume
= mdl_arritm( &world
->ent_volume
, idx
);
12 m4x3_mulv( volume
->to_local
, pos
, local
);
13 if( (fabsf(local
[0]) <= 1.0f
) &&
14 (fabsf(local
[1]) <= 1.0f
) &&
15 (fabsf(local
[2]) <= 1.0f
) )
17 world_static
.active_trigger_volumes
[ j
++ ] = idx
;
18 boxf cube
= {{-1.0f
,-1.0f
,-1.0f
},{1.0f
,1.0f
,1.0f
}};
19 vg_line_boxf_transformed( volume
->to_world
, cube
, 0xff00ccff );
23 * LEGACY BEHAVIOUR: < v104 does not have leave events
25 if( world
->meta
.info
.version
>= 104 ){
27 basecall
.function
= k_ent_function_trigger_leave
;
28 basecall
.id
= mdl_entity_id( k_ent_volume
, idx
);
31 entity_call( world
, &basecall
);
35 world_static
.active_trigger_volume_count
= j
;
37 static float random_accum
= 0.0f
;
38 random_accum
+= vg
.time_delta
;
42 while( random_accum
> 0.1f
){
50 bh_iter_init_range( 0, &it
, pos
, radius
);
53 while( bh_next( world
->entity_bh
, &it
, &idx
) ){
54 u32 id
= world
->entity_list
[ idx
],
55 type
= mdl_entity_id_type( id
),
56 index
= mdl_entity_id_id( id
);
58 if( type
!= k_ent_volume
) continue;
60 ent_volume
*volume
= mdl_arritm( &world
->ent_volume
, index
);
61 boxf cube
= {{-1.0f
,-1.0f
,-1.0f
},{1.0f
,1.0f
,1.0f
}};
63 if( volume
->flags
& k_ent_volume_flag_particles
){
64 vg_line_boxf_transformed( volume
->to_world
, cube
, 0xff00c0ff );
66 for( int j
=0; j
<random_ticks
; j
++ ){
70 basecall
.function
= 0;
72 entity_call( world
, &basecall
);
76 for( u32 i
=0; i
<world_static
.active_trigger_volume_count
; i
++ )
77 if( world_static
.active_trigger_volumes
[i
] == index
)
80 if( world_static
.active_trigger_volume_count
>
81 vg_list_size(world_static
.active_trigger_volumes
) ) continue;
84 m4x3_mulv( volume
->to_local
, pos
, local
);
86 if( (fabsf(local
[0]) <= 1.0f
) &&
87 (fabsf(local
[1]) <= 1.0f
) &&
88 (fabsf(local
[2]) <= 1.0f
) ){
90 basecall
.function
= 0;
94 entity_call( world
, &basecall
);
95 world_static
.active_trigger_volumes
[
96 world_static
.active_trigger_volume_count
++ ] = index
;
99 vg_line_boxf_transformed( volume
->to_world
, cube
, 0xffcccccc );