X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=48d24bb6270c89f7eda120ba971cb374c57d40a7;hb=02e009ae6e20938675277e9ce2f467e17b170cc7;hp=efc0f348db2900014c95cf14a848a7d340751a89;hpb=a0917f7b56c4c4682fd592b9b52e33d1a393d714;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index efc0f34..48d24bb 100644 --- a/player_skate.c +++ b/player_skate.c @@ -6,6 +6,7 @@ #include "vg/vg_perlin.h" #include "menu.h" #include "ent_skateshop.h" +#include "addon.h" VG_STATIC void player__skate_bind( player_instance *player ) { @@ -2093,6 +2094,8 @@ VG_STATIC void player__skate_update( player_instance *player ) 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 { @@ -2126,7 +2129,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; @@ -2148,9 +2150,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; @@ -2497,6 +2496,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 ); @@ -2523,6 +2523,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; iq, qtrick, kf_board->q ); q_normalize( kf_board->q ); - struct player_board *board = player_get_player_board( player ); + struct player_board *board = + addon_cache_item_if_loaded( k_addon_type_board, + player->board_view_slot ); if( board ){ /* foot weight distribution */