X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=551c2cc1d9d026db60f829c8a7a3b6b6d0716a22;hb=7fb47c3eb672f4468da8b5b452c09d44e1389d5f;hp=87c8cba7483e9ea22e07e042b967e34189eb4309;hpb=d43d7f62ff83799b6d99221d881179814cb239a6;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index 87c8cba..551c2cc 100644 --- a/player_skate.c +++ b/player_skate.c @@ -2082,8 +2082,19 @@ VG_STATIC void player__skate_update( player_instance *player ) struct player_skate *s = &player->_skate; world_instance *world = world_current_instance(); + if( world->water.enabled ){ + if( player->rb.co[1]+0.25f < world->water.height ){ + audio_oneshot_3d( &audio_splash, player->rb.co, 40.0f, 1.0f ); + player__skate_kill_audio( player ); + player__dead_transition( player ); + return; + } + } + v3_copy( player->rb.co, s->state.prev_pos ); s->state.activity_prev = s->state.activity; + v3f normal_total; + v3_zero( normal_total ); struct board_collider { @@ -2117,7 +2128,6 @@ VG_STATIC void player__skate_update( player_instance *player ) float slap = 0.0f; if( s->state.activity <= k_skate_activity_air_to_grind ){ - float min_dist = 0.6f; for( int i=0; i<2; i++ ){ v3f wpos, closest; @@ -2139,9 +2149,6 @@ VG_STATIC void player__skate_update( player_instance *player ) wheels[1].pos[1] = s->state.slap; - - - const int k_wheel_count = 2; s->substep = k_rb_delta; @@ -2488,6 +2495,7 @@ begin_collision:; v3f impulse; v3_muls( ct->n, lambda, impulse ); + v3_muladds( normal_total, impulse, inv_mass, normal_total ); v3_muladds( player->rb.v, impulse, inv_mass, player->rb.v ); v3_cross( delta, impulse, impulse ); m3x3_mulv( iIw, impulse, impulse ); @@ -2514,6 +2522,24 @@ begin_collision:; * -------------------------------------------------------------------------- */ + f32 nforce = v3_length(normal_total); + if( nforce > 4.0f ){ + if( nforce > 17.6f ){ + v3_muladds( player->rb.v, normal_total, -1.0f, player->rb.v ); + player__dead_transition(player); + player__skate_kill_audio(player); + return; + } + + f32 amt = k_cam_punch; + if( player->camera_mode == k_cam_firstperson ){ + amt *= 0.25f; + } + + v3_muladds( player->cam_land_punch_v, normal_total, amt, + player->cam_land_punch_v ); + } + s->surface = k_surface_prop_concrete; for( int i=0; i