From: hgn Date: Fri, 23 Sep 2022 16:26:24 +0000 (+0100) Subject: audio occlusion X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;ds=inline;h=d4746875c05dd3e077e1b266e50ffe4856b45502;p=carveJwlIkooP6JGAAIwe30JlM.git audio occlusion --- diff --git a/audio.h b/audio.h index 498acc3..0572d6d 100644 --- a/audio.h +++ b/audio.h @@ -2,6 +2,12 @@ #define AUDIO_H #include "common.h" +#include "world.h" + +static float audio_occlusion_current = 0.0f, + k_audio_occlusion_rate = 1.0f; + +static int k_audio_debug_soundscape = 0; sfx_vol_control audio_vol_all = { .val = 1.0f, .name = "All" }; @@ -10,6 +16,7 @@ sfx_set audio_board = .sources = "sound/skate.ogg\0" "sound/wheel.ogg\0" "sound/slide.ogg\0" + "sound/reverb.ogg\0" }; sfx_system audio_player0 = @@ -39,12 +46,38 @@ sfx_system audio_player2 = .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT }; +sfx_system audio_player3 = +{ + .vol = 0.0f, + .ch = 1, + .vol_src = &audio_vol_all, + .name = "Player3", + .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT +}; + static void audio_init(void) { sfx_set_init( &audio_board, NULL ); sfx_set_play( &audio_board, &audio_player0, 0 ); sfx_set_play( &audio_board, &audio_player1, 1 ); sfx_set_play( &audio_board, &audio_player2, 2 ); + sfx_set_play( &audio_board, &audio_player3, 3 ); + + vg_convar_push( (struct vg_convar){ + .name = "aud_debug_soundscape", + .data = &k_audio_debug_soundscape, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=0 }, + .persistent = 1 + }); + + vg_convar_push( (struct vg_convar){ + .name = "aud_occlusion_rate", + .data = &k_audio_occlusion_rate, + .data_type = k_convar_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); } static void audio_free(void) @@ -52,4 +85,65 @@ static void audio_free(void) sfx_set_free( &audio_board ); } +static void audio_sample_occlusion( v3f origin ) +{ + float d = 0.0f, + sample_dist = 880.0f; + + int sample_count = 8; + + for( int i=0; irb, &pp->rb, lca, pj->limits ); } } + + v4f plane = {0.0f,1.0f,0.0f,0.0f}; + rb_effect_simple_bouyency( &pj->rb, plane, k_ragdoll_floatyiness, + k_ragdoll_floatydrag ); } /* CONSTRAINTS */ diff --git a/rigidbody.h b/rigidbody.h index 05d2db1..026d867 100644 --- a/rigidbody.h +++ b/rigidbody.h @@ -1860,6 +1860,23 @@ static void rb_constraint_position( rigidbody *ra, v3f lca, } } +/* + * Effectors + */ + +static void rb_effect_simple_bouyency( rigidbody *ra, v4f plane, + float amt, float drag ) +{ + /* float */ + float depth = v3_dot( plane, ra->co ) - plane[3], + lambda = vg_clampf( -depth, 0.0f, 1.0f ) * amt; + + v3_muladds( ra->v, plane, lambda * ktimestep, ra->v ); + + if( depth < 0.0f ) + v3_muls( ra->v, 1.0f-(drag*ktimestep), ra->v ); +} + /* * ----------------------------------------------------------------------------- * BVH implementation, this is ONLY for static rigidbodies, its to slow for diff --git a/sound_src/reverb.ogg b/sound_src/reverb.ogg new file mode 100644 index 0000000..b8bb4d8 Binary files /dev/null and b/sound_src/reverb.ogg differ