e6ee331a8ee1267e91c6194e750e441008de4b89
9 .sources
= "sound/bird0.ogg\0"
14 static float k_audio_random_freq
= 1.0f
/10.0f
,
15 k_audio_random_hz
= 1.0f
;
17 static double world_audio_last_tick
= 0.0;
19 static struct world_ambient_layer
24 world_ambient_layers
[8];
26 static void world_audio_init(void)
28 sfx_set_init( &audio_birds
, NULL
);
30 vg_convar_push( (struct vg_convar
){
31 .name
= "aud_random_freq",
32 .data
= &k_audio_random_freq
,
33 .data_type
= k_convar_dtype_f32
,
34 .opt_f32
= { .clamp
= 0 },
38 for( int i
=0; i
<vg_list_size(world_ambient_layers
); i
++ )
40 struct world_ambient_layer
*layer
= &world_ambient_layers
[i
];
41 sfx_system
*sys
= &layer
->sys
;
44 sys
->vol_src
= &audio_vol_all
;
45 sys
->name
= "ambient";
46 sys
->flags
= SFX_FLAG_PERSISTENT
;
50 static void world_audio_spawn_random( v3f around
)
52 for( int i
=0; i
<vg_list_size(world_ambient_layers
); i
++ )
54 struct world_ambient_layer
*layer
= &world_ambient_layers
[i
];
56 if( !layer
->sys
.is_playing
)
58 sfx_set_playrnd( &audio_birds
, &layer
->sys
, 0, 3 );
61 vg_rand_sphere( chance
);
62 v3_muladds( around
, chance
, 100.0f
, layer
->pos
);
69 static void world_audio_update( v3f around
, v3f ears
)
71 if( world_audio_last_tick
+ (double)k_audio_random_hz
< vg_time
)
73 world_audio_last_tick
= vg_time
;
75 float chance
= vg_randf();
76 if( chance
< k_audio_random_freq
)
78 world_audio_spawn_random( around
);
83 for( int i
=0; i
<vg_list_size(world_ambient_layers
); i
++ )
85 struct world_ambient_layer
*layer
= &world_ambient_layers
[i
];
87 if( layer
->sys
.is_playing
)
88 audio_spacialize( &layer
->sys
, layer
->pos
, around
, ears
, 30.0f
);
92 static void world_audio_debug(void)
94 for( int i
=0; i
<vg_list_size(world_ambient_layers
); i
++ )
96 struct world_ambient_layer
*layer
= &world_ambient_layers
[i
];
98 if( layer
->sys
.is_playing
)
100 vg_line_pt3( layer
->pos
, 1.0f
, 0xffff00ff );
105 #endif /* WORLD_AUDIO_H */