From: hgn Date: Mon, 28 Nov 2022 22:18:03 +0000 (+0000) Subject: grind sound X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=75703291fbf045008a3b1ebb20fc46a2617b6b3b;p=carveJwlIkooP6JGAAIwe30JlM.git grind sound --- diff --git a/audio.h b/audio.h index 43adf05..f13280b 100644 --- a/audio.h +++ b/audio.h @@ -19,7 +19,10 @@ audio_clip audio_board[] = { .path="sound/skate.ogg" }, { .path="sound/wheel.ogg" }, { .path="sound/slide.ogg" }, - { .path="sound/reverb.ogg" } + { .path="sound/reverb.ogg" }, + { .path="sound/grind_loop.ogg" }, + { .path="sound/grind_enter.ogg" }, + { .path="sound/grind_exit.ogg" } }; audio_clip audio_splash = @@ -149,6 +152,11 @@ audio_player audio_player3 = .name = "Player3", }; +audio_player audio_player4 = +{ + .name = "Player4", +}; + audio_player audio_player_extra = { .name = "PlayerInst" @@ -165,6 +173,7 @@ VG_STATIC void audio_init(void) audio_player_init( &audio_player1 ); audio_player_init( &audio_player2 ); audio_player_init( &audio_player3 ); + audio_player_init( &audio_player4 ); audio_player_init( &audio_player_gate ); audio_player_init( &ambient_player ); audio_player_init( &ambient_sprites[0] ); @@ -198,6 +207,7 @@ VG_STATIC void audio_init(void) audio_player_set_flags( &audio_player0, flags ); audio_player_set_flags( &audio_player1, flags ); audio_player_set_flags( &audio_player2, flags ); + audio_player_set_flags( &audio_player4, flags ); audio_player_set_flags( &audio_player_gate, flags ); audio_player_set_flags( &audio_player3, AUDIO_FLAG_LOOP ); audio_player_set_flags( &ambient_player, AUDIO_FLAG_LOOP ); @@ -215,6 +225,7 @@ VG_STATIC void audio_init(void) audio_player_playclip( &audio_player1, &audio_board[1] ); audio_player_playclip( &audio_player2, &audio_board[2] ); audio_player_playclip( &audio_player3, &audio_board[3] ); + audio_player_playclip( &audio_player4, &audio_board[4] ); audio_player_playclip( &ambient_player, &audio_ambience[0] ); audio_player_playclip( &audio_player_gate, &audio_gate_ambient ); @@ -237,7 +248,7 @@ VG_STATIC void audio_init(void) }); } -VG_STATIC void audio_free(void*_) +VG_STATIC void audio_free(void) { /* TODO! */ vg_warn( "UNIMPLEMENTED: audio_free()\n" ); diff --git a/build.c b/build.c index 9e56b52..053154f 100644 --- a/build.c +++ b/build.c @@ -119,7 +119,7 @@ void build_shaders(void) vg_shader_set_include_dir( "shaders" ); _shader( "blit", "shaders/blit.vs", "shaders/blit.fs" ); - _shader( "blit", "shaders/blit.vs", "shaders/blit.fs" ); + _shader( "blitblur", "shaders/blit.vs", "shaders/blitblur.fs" ); _shader( "standard", "shaders/standard.vs", "shaders/standard.fs" ); _shader( "vblend", "shaders/standard.vs", "shaders/vblend.fs" ); _shader( "terrain", "shaders/standard.vs", "shaders/terrain.fs" ); diff --git a/maps_src/mp_mtzero.mdl b/maps_src/mp_mtzero.mdl index 95d8125..d7ed5d4 100644 Binary files a/maps_src/mp_mtzero.mdl and b/maps_src/mp_mtzero.mdl differ diff --git a/network.h b/network.h index b47f518..4d34e82 100644 --- a/network.h +++ b/network.h @@ -23,7 +23,7 @@ VG_STATIC void network_init(void); VG_STATIC void network_update(void); /* Call it at shutdown */ -VG_STATIC void network_end(void*_); +VG_STATIC void network_end(void); /* * Can buffer up a bunch of these by calling many times, they will be @@ -349,7 +349,7 @@ VG_STATIC void network_init(void) } } -VG_STATIC void network_end(void*_) +VG_STATIC void network_end(void) { /* TODO: Fire off any buffered highscores that need to be setn */ if( cremote_state == k_ESteamNetworkingConnectionState_Connected || @@ -364,7 +364,7 @@ VG_STATIC void network_end(void*_) VG_STATIC void network_init(void){} VG_STATIC void network_update(void){} -VG_STATIC void network_end(void*_){} +VG_STATIC void network_end(void){} #endif /* SR_NETWORKED */ #endif /* NETWORK_H */ diff --git a/player.h b/player.h index b2a69bd..7b5eeaa 100644 --- a/player.h +++ b/player.h @@ -293,7 +293,7 @@ VG_STATIC void player_init(void) /* 1 }; for( int i=0; irb.co ); audio_player_set_position( &audio_player1, phys->rb.co ); audio_player_set_position( &audio_player2, phys->rb.co ); + audio_player_set_position( &audio_player4, phys->rb.co ); audio_player_set_position( &audio_player_gate, world.render_gate_pos ); audio_player_set_vol( &audio_player_gate, 5.0f ); @@ -115,6 +116,7 @@ VG_STATIC void player_audio(void) audio_player_set_vol( &audio_player1, 0.0f ); audio_player_set_vol( &audio_player2, 0.0f ); audio_player_set_vol( &audio_player3, 0.0f ); + audio_player_set_vol( &audio_player4, 0.0f ); int walk_phase = 0; if( vg_fractf(player.walk_timer) > 0.5f ) @@ -159,15 +161,19 @@ VG_STATIC void player_audio(void) float speed = vg_minf(v3_length( phys->rb.v )*0.1f,1.0f), attn = speed, slide = vg_clampf( fabsf(phys->slip), 0.0f, 1.0f ), - vol0 = (1.0f-air)*attn*(1.0f-slide), - vol1 = air *attn, - vol2 = (1.0f-air)*attn*slide; + grind = phys->grind, + vol0 = (1.0f-air)*attn*(1.0f-slide)*(1.0f-grind), + vol1 = air *attn*(1.0f-grind), + vol2 = (1.0f-air)*attn*slide*(1.0f-grind), + vol4 = grind*2.0f; audio_player_set_vol( &audio_player0, vol0*vg.time_rate ); audio_player_set_vol( &audio_player1, vol1*vg.time_rate ); audio_player_set_vol( &audio_player2, vol2*vg.time_rate ); + audio_player_set_vol( &audio_player4, vol4*vg.time_rate ); float reverb_amt = vol0 * audio_occlusion_current * 0.5f; + audio_player_set_pan( &audio_player3, 0.0f ); audio_player_set_vol( &audio_player3, reverb_amt*vg.time_rate ); } diff --git a/player_physics.h b/player_physics.h index 80a07b2..86f49a0 100644 --- a/player_physics.h +++ b/player_physics.h @@ -973,6 +973,8 @@ VG_STATIC void player_do_motion(void) int len = player_update_collision_manifold( manifold ); int grind_col = player_update_grind_collision( &manifold[len] ); + static int _grind_col_pre = 0; + if( grind_col ) { phys->grind = 1; @@ -989,17 +991,41 @@ VG_STATIC void player_do_motion(void) q_mul( correction, phys->rb.q, phys->rb.q ); } - float const DOWNFORCE = -k_downforce*2.0f*VG_TIMESTEP_FIXED; - v3_muladds( phys->rb.v, phys->rb.up, DOWNFORCE, phys->rb.v ); + float const DOWNFORCE = -k_downforce*1.2f*VG_TIMESTEP_FIXED; + v3_muladds( phys->rb.v, manifold[len].n, DOWNFORCE, phys->rb.v ); m3x3_identity( phys->vr ); m3x3_identity( phys->vr_pstep ); + + if( !_grind_col_pre ) + { + audio_lock(); + audio_player_set_flags( &audio_player_extra, + AUDIO_FLAG_SPACIAL_3D ); + audio_player_set_position( &audio_player_extra, phys->rb.co ); + audio_player_set_vol( &audio_player_extra, 20.0f ); + audio_player_playclip( &audio_player_extra, &audio_board[5] ); + audio_unlock(); + } } else { phys->grind = 0; player_adhere_ground( manifold, len ); + + if( _grind_col_pre ) + { + audio_lock(); + audio_player_set_flags( &audio_player_extra, + AUDIO_FLAG_SPACIAL_3D ); + audio_player_set_position( &audio_player_extra, phys->rb.co ); + audio_player_set_vol( &audio_player_extra, 20.0f ); + audio_player_playclip( &audio_player_extra, &audio_board[6] ); + audio_unlock(); + } } + _grind_col_pre = grind_col; + rb_presolve_contacts( manifold, len+ VG_MAX(0,grind_col) ); player_collision_response( manifold, len+ VG_MAX(0,grind_col) ); diff --git a/render.h b/render.h index 317b301..3399822 100644 --- a/render.h +++ b/render.h @@ -6,6 +6,7 @@ #include "model.h" #include "shaders/blit.h" +#include "shaders/blitblur.h" #include "shaders/standard.h" #include "shaders/vblend.h" @@ -281,6 +282,8 @@ VG_STATIC void render_init_temp_buffer(void) glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gpipeline.rgb_background, 0); @@ -317,7 +320,10 @@ VG_STATIC void render_init_fs_quad(void) vg_info( "[render] Allocate quad\n" ); float quad[] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f }; + 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, + + 0.2f, 0.0f, 0.8f, 1.0f, 0.2f, 1.0f, + 0.2f, 0.0f, 0.8f, 0.0f, 0.8f, 1.0f}; glGenVertexArrays( 1, &gpipeline.fsquad.vao ); glGenBuffers( 1, &gpipeline.fsquad.vbo ); @@ -350,6 +356,7 @@ VG_STATIC void render_init_uniform_buffers(void) VG_STATIC void render_init(void) { shader_blit_register(); + shader_blitblur_register(); shader_standard_register(); shader_vblend_register(); @@ -376,4 +383,10 @@ VG_STATIC void render_fsquad(void) glDrawArrays( GL_TRIANGLES, 0, 6 ); } +VG_STATIC void render_fsquad1(void) +{ + glBindVertexArray( gpipeline.fsquad.vao ); + glDrawArrays( GL_TRIANGLES, 6, 6 ); +} + #endif /* RENDER_H */ diff --git a/shaders/blitblur.fs b/shaders/blitblur.fs new file mode 100644 index 0000000..eac828e --- /dev/null +++ b/shaders/blitblur.fs @@ -0,0 +1,21 @@ +out vec4 FragColor; +uniform sampler2D uTexMain; + +in vec2 aUv; + +vec2 rand_hash22( vec2 p ) +{ + vec3 p3 = fract(vec3(p.xyx) * 213.8976123); + p3 += dot(p3, p3.yzx+19.19); + return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y)); +} + +void main() +{ + vec2 voffset = rand_hash22( aUv ); + + float bamt = abs(aUv.x-0.5)*2.0; + bamt = pow(bamt,4.0)*0.05; + + FragColor = texture( uTexMain, aUv + voffset*bamt ); +} diff --git a/shaders/blitblur.h b/shaders/blitblur.h new file mode 100644 index 0000000..b754d12 --- /dev/null +++ b/shaders/blitblur.h @@ -0,0 +1,58 @@ +#ifndef SHADER_blitblur_H +#define SHADER_blitblur_H +static void shader_blitblur_link(void); +static void shader_blitblur_register(void); +static struct vg_shader _shader_blitblur = { + .name = "blitblur", + .link = shader_blitblur_link, + .vs = +{ +.static_src = +"layout (location=0) in vec2 a_co;\n" +"out vec2 aUv;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n" +" aUv = a_co;\n" +"}\n" +""}, + .fs = +{ +.static_src = +"out vec4 FragColor;\n" +"uniform sampler2D uTexMain;\n" +"\n" +"in vec2 aUv;\n" +"\n" +"vec2 rand_hash22( vec2 p )\n" +"{\n" +" vec3 p3 = fract(vec3(p.xyx) * 213.8976123);\n" +" p3 += dot(p3, p3.yzx+19.19);\n" +" return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));\n" +"}\n" +"\n" +"void main()\n" +"{\n" +" vec2 voffset = rand_hash22( aUv );\n" +" \n" +" float bamt = abs(aUv.x-0.5)*2.0;\n" +" bamt = pow(bamt,4.0)*0.05;\n" +"\n" +" FragColor = texture( uTexMain, aUv + voffset*bamt );\n" +"}\n" +""}, +}; + +static GLuint _uniform_blitblur_uTexMain; +static void shader_blitblur_uTexMain(int i){ + glUniform1i(_uniform_blitblur_uTexMain,i); +} +static void shader_blitblur_register(void){ + vg_shader_register( &_shader_blitblur ); +} +static void shader_blitblur_use(void){ glUseProgram(_shader_blitblur.id); } +static void shader_blitblur_link(void){ + _uniform_blitblur_uTexMain = glGetUniformLocation( _shader_blitblur.id, "uTexMain" ); +} +#endif /* SHADER_blitblur_H */ diff --git a/skaterift.c b/skaterift.c index ba26edd..0b3310a 100644 --- a/skaterift.c +++ b/skaterift.c @@ -33,7 +33,7 @@ int main( int argc, char *argv[] ) return 0; } -VG_STATIC void highscores_save_at_exit(void*_) +VG_STATIC void highscores_save_at_exit(void) { highscores_serialize_all(); } @@ -73,24 +73,22 @@ vg_info(" ' ' '--' [] '----- '----- ' ' '---' " if( !highscores_read() ) highscores_create_db(); - vg_loader_highwater( NULL, highscores_save_at_exit, NULL ); - - //vg_sleep_ms(200); + vg_loader_step( NULL, highscores_save_at_exit ); steam_init(); - vg_loader_highwater( NULL, steam_end, NULL ); - vg_loader_highwater( network_init, network_end, NULL ); + vg_loader_step( NULL, steam_end ); + vg_loader_step( network_init, network_end ); } VG_STATIC void vg_load(void) { - vg_loader_highwater( render_init, NULL, NULL ); - vg_loader_highwater( menu_init, NULL, NULL ); - vg_loader_highwater( world_init, NULL, NULL ); - vg_loader_highwater( player_init, NULL, NULL ); + vg_loader_step( render_init, NULL ); + vg_loader_step( menu_init, NULL ); + vg_loader_step( world_init, NULL ); + vg_loader_step( player_init, NULL ); vg_bake_shaders(); - vg_loader_highwater( audio_init, audio_free, NULL ); + vg_loader_step( audio_init, audio_free ); world_audio_init(); /* 'systems' are completely loaded now */ @@ -112,11 +110,11 @@ VG_STATIC void draw_origin_axis(void) vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 0.0f, 1.0f }, 0xff0000ff ); } -VG_STATIC void vg_update( int loaded ) +VG_STATIC void vg_update(void) { steam_update(); - if( loaded ) + if( vg.is_loaded ) { draw_origin_axis(); network_update(); @@ -126,17 +124,17 @@ VG_STATIC void vg_update( int loaded ) } } -VG_STATIC void vg_update_fixed( int loaded ) +VG_STATIC void vg_update_fixed(void) { - if( loaded ) + if( vg.is_loaded ) { player_update_fixed(); } } -VG_STATIC void vg_update_post( int loaded ) +VG_STATIC void vg_update_post(void) { - if( loaded ) + if( vg.is_loaded ) { player_update_post(); menu_update(); diff --git a/sound_src/grind_enter.ogg b/sound_src/grind_enter.ogg new file mode 100644 index 0000000..f2c0e62 Binary files /dev/null and b/sound_src/grind_enter.ogg differ diff --git a/sound_src/grind_exit.ogg b/sound_src/grind_exit.ogg new file mode 100644 index 0000000..fa28116 Binary files /dev/null and b/sound_src/grind_exit.ogg differ diff --git a/sound_src/grind_loop.ogg b/sound_src/grind_loop.ogg new file mode 100644 index 0000000..339645f Binary files /dev/null and b/sound_src/grind_loop.ogg differ diff --git a/steam.h b/steam.h index 360a45f..5d768b8 100644 --- a/steam.h +++ b/steam.h @@ -6,6 +6,7 @@ #ifndef STEAM_H #define STEAM_H +#define VG_GAME #include "vg/vg_steam.h" #include "vg/vg_steam_utils.h" #include "vg/vg_steam_networking.h" @@ -309,7 +310,7 @@ VG_STATIC void steam_update(void) } } -VG_STATIC void steam_end(void *nothing) +VG_STATIC void steam_end(void) { if( steam_ready ) { diff --git a/world.h b/world.h index bf58144..d307278 100644 --- a/world.h +++ b/world.h @@ -451,11 +451,11 @@ VG_STATIC void world_init(void) /* Other systems */ vg_info( "Loading other world systems\n" ); - vg_loader_highwater( world_render_init, NULL, NULL ); - vg_loader_highwater( world_sfd_init, NULL, NULL ); - vg_loader_highwater( world_water_init, NULL, NULL ); - vg_loader_highwater( world_gates_init, NULL, NULL ); - vg_loader_highwater( world_routes_init, NULL, NULL ); + vg_loader_step( world_render_init, NULL ); + vg_loader_step( world_sfd_init, NULL ); + vg_loader_step( world_water_init, NULL ); + vg_loader_step( world_gates_init, NULL ); + vg_loader_step( world_routes_init, NULL ); /* Allocate dynamic world memory arena */ u32 max_size = 76*1024*1024; @@ -557,11 +557,11 @@ VG_STATIC void world_update( v3f pos ) { world.switching_to_new_world = 0; world_unload(); - world_load(); + vg_loader_start( world_load ); + return; } } - world.sky_time += world.sky_rate * vg.time_delta; world.sky_rate = vg_lerp( world.sky_rate, world.sky_target_rate, vg.time_delta * 5.0 ); diff --git a/world_gen.h b/world_gen.h index 96928b6..ee774bb 100644 --- a/world_gen.h +++ b/world_gen.h @@ -655,6 +655,8 @@ VG_STATIC void world_process_resources(void) VG_STATIC void world_unload(void) { + vg_acquire_thread_sync(); + /* free meshes */ mesh_free( &world.mesh_route_lines ); mesh_free( &world.mesh_geo ); @@ -734,6 +736,8 @@ VG_STATIC void world_unload(void) world.collector_count = 0; world.water.enabled = 0; + + vg_release_thread_sync(); } VG_STATIC void world_load(void)