X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=a802a1cd496a2e1e78570ab424e94ce017f36d09;hb=b888cce683d95cc01d0b4be9bbe92a0dd47452ac;hp=bfccb61a2930b5c146544182eb5d3327b379858f;hpb=2673c575386c604fc2c0603dba2480eda05cf97a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index bfccb61..a802a1c 100644 --- a/player_skate.c +++ b/player_skate.c @@ -4,6 +4,7 @@ #include "player.h" #include "audio.h" #include "vg/vg_perlin.h" +#include "menu.h" VG_STATIC void player__skate_bind( player_instance *player ) { @@ -127,10 +128,8 @@ VG_STATIC int skate_grind_scansq( player_instance *player, v3f tri[3]; struct world_surface *surf = world_tri_index_surface(world,ptri[0]); -#if 0 if( !(surf->info.flags & k_material_flag_skate_surface) ) continue; -#endif for( int j=0; j<3; j++ ) v3_copy( world->scene_geo->arrvertices[ptri[j]].co, tri[j] ); @@ -302,7 +301,7 @@ VG_STATIC int create_jumps_to_hit_target( player_instance *player, m3x3_mulv( player->invbasis, player->rb.v, v_local ); v2f d = { v3_dot( ax, v0 ), v0[1] }, - v = { v3_dot( ax, player->rb.v ), v_local[1] }; + v = { v3_dot( ax, v_local ), v_local[1] }; float a = atan2f( v[1], v[0] ), m = v2_length( v ), @@ -430,7 +429,7 @@ void player__approximate_best_trajectory( player_instance *player ) /* REFACTOR */ - v3f closest; + v3f closest={0.0f,0.0f,0.0f}; if( search_for_grind ){ if( bh_closest_point( world->geo_bh, co1, closest, 1.0f ) != -1 ){ @@ -579,8 +578,6 @@ void player__approximate_best_trajectory( player_instance *player ) v3_add( launch_co, co0, co0 ); /* rough scan to make sure we dont collide with anything */ - /* NOTE this was rarely needed and ends up with false negatives. */ -#if 0 for( int j=1; j<=16; j++ ){ t = (float)j*(1.0f/16.0f); t *= 0.9f; @@ -595,14 +592,13 @@ void player__approximate_best_trajectory( player_instance *player ) v3f n; int idx = spherecast_world( world, co0,co1, - k_board_radius*0.5f, &t1, n); + k_board_radius*0.1f, &t1, n); if( idx != -1 ){ goto invalidated_grind; } v3_copy( co1, co0 ); } -#endif v3_copy( grind.n, jump->n ); @@ -614,10 +610,8 @@ void player__approximate_best_trajectory( player_instance *player ) s->possible_jumps[ s->possible_jump_count ++ ] = *jump; -#if 0 continue; invalidated_grind:; -#endif } } @@ -1010,7 +1004,8 @@ VG_STATIC void skate_apply_pump_model( player_instance *player ) v3_muladds( s->state.throw_v, player->rb.to_world[1], -doty, Fl); if( s->state.activity == k_skate_activity_ground ){ - v3_muladds( player->rb.v, Fl, k_mmcollect_lat, player->rb.v ); + if( v3_length2(player->rb.v)<(20.0f*20.0f) ) + v3_muladds( player->rb.v, Fl, k_mmcollect_lat, player->rb.v ); v3_muladds( s->state.throw_v, Fl, -k_mmcollect_lat, s->state.throw_v ); } @@ -1191,18 +1186,27 @@ VG_STATIC void player__skate_post_update( player_instance *player ) slide = 0.0f; } + static float menu_gate = 1.0f; + menu_gate = vg_lerpf( menu_gate, 1-cl_menu, vg.frame_delta*4.0f ); + float - vol_main = sqrtf( (1.0f-air)*attn*(1.0f-slide) * 0.4f ), - vol_air = sqrtf( air *attn * 0.5f ), - vol_slide = sqrtf( (1.0f-air)*attn*slide * 0.25f ); + vol_main = sqrtf( (1.0f-air)*attn*(1.0f-slide) * 0.4f ) * menu_gate, + vol_air = sqrtf( air *attn * 0.5f ) * menu_gate, + vol_slide = sqrtf( (1.0f-air)*attn*slide * 0.25f ) * menu_gate; const u32 flags = AUDIO_FLAG_SPACIAL_3D|AUDIO_FLAG_LOOP; - if( !s->aud_air ) - s->aud_air = audio_request_channel( &audio_board[1], flags ); + if( !s->aud_air ){ + s->aud_air = audio_get_first_idle_channel(); + if( s->aud_air ) + audio_channel_init( s->aud_air, &audio_board[1], flags ); + } - if( !s->aud_slide ) - s->aud_slide = audio_request_channel( &audio_board[2], flags ); + if( !s->aud_slide ){ + s->aud_slide = audio_get_first_idle_channel(); + if( s->aud_slide ) + audio_channel_init( s->aud_slide, &audio_board[2], flags ); + } /* brrrrrrrrrrrt sound for tiles and stuff @@ -1273,7 +1277,8 @@ VG_STATIC void player__skate_post_update( player_instance *player ) if( s->aud_main ){ s->aud_main->colour = 0x00103efe; audio_channel_set_spacial( s->aud_main, player->rb.co, 40.0f ); - audio_channel_slope_volume( s->aud_main, 0.05f, vol_main ); + //audio_channel_slope_volume( s->aud_main, 0.05f, vol_main ); + audio_channel_edit_volume( s->aud_main, vol_main, 1 ); audio_channel_sidechain_lfo( s->aud_main, 0, sidechain_amt ); float rate = 1.0f + (attn-0.5f)*0.2f; @@ -1283,14 +1288,16 @@ VG_STATIC void player__skate_post_update( player_instance *player ) if( s->aud_slide ){ s->aud_slide->colour = 0x00103efe; audio_channel_set_spacial( s->aud_slide, player->rb.co, 40.0f ); - audio_channel_slope_volume( s->aud_slide, 0.05f, vol_slide ); + //audio_channel_slope_volume( s->aud_slide, 0.05f, vol_slide ); + audio_channel_edit_volume( s->aud_slide, vol_slide, 1 ); audio_channel_sidechain_lfo( s->aud_slide, 0, sidechain_amt ); } if( s->aud_air ){ s->aud_air->colour = 0x00103efe; audio_channel_set_spacial( s->aud_air, player->rb.co, 40.0f ); - audio_channel_slope_volume( s->aud_air, 0.05f, vol_air ); + //audio_channel_slope_volume( s->aud_air, 0.05f, vol_air ); + audio_channel_edit_volume( s->aud_air, vol_air, 1 ); } audio_unlock(); @@ -3147,4 +3154,10 @@ VG_STATIC void player__skate_reset( player_instance *player, s->state.head_position[1] = 1.8f; } +VG_STATIC void player__skate_restore( player_instance *player ) +{ + struct player_skate *s = &player->_skate; + s->state = s->state_gate_storage; +} + #endif /* PLAYER_SKATE_C */