From b8d9653b23cc9d09608e05f08020fb923b3305ac Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 28 May 2023 00:09:30 +0100 Subject: [PATCH 1/1] st --- player.c | 8 ++++++++ player.h | 6 +++--- player_common.c | 18 +++++++++--------- player_common.h | 5 +++++ player_skate.c | 25 +++++++++++++++++++++---- shaders/scene_scoretext.h | 4 ++-- shaders/scene_sfd.vs | 4 ++-- 7 files changed, 50 insertions(+), 20 deletions(-) diff --git a/player.c b/player.c index 145a928..6c610ae 100644 --- a/player.c +++ b/player.c @@ -35,6 +35,9 @@ VG_STATIC void player_init(void) } vg_console_reg_cmd( "respawn", localplayer_cmd_respawn, NULL ); + VG_VAR_F32( k_cam_damp ); + VG_VAR_F32( k_cam_spring ); + VG_VAR_F32( k_cam_punch ); } PLAYER_API @@ -335,6 +338,11 @@ PLAYER_API void player__spawn( player_instance *player, player->subsystem = k_player_subsystem_walk; player->immobile = 0; player->gate_waiting = NULL; + player->rewind_length = 0; + player->rewind_accum = 0.0f; + player->rewind_gate = NULL; + player->rewinding = 0; + world_static.last_use = 0.0; global_skateshop_exit(); diff --git a/player.h b/player.h index b52201b..984fcef 100644 --- a/player.h +++ b/player.h @@ -55,9 +55,9 @@ struct player_instance cam_velocity_constant, cam_velocity_coefficient_smooth, cam_velocity_constant_smooth, - cam_velocity_influence_smooth, - cam_land_punch, - cam_land_punch_v; + cam_velocity_influence_smooth; + + v3f cam_land_punch, cam_land_punch_v; ent_gate *gate_waiting; diff --git a/player_common.c b/player_common.c index 22c26a2..c9cf3b7 100644 --- a/player_common.c +++ b/player_common.c @@ -7,10 +7,6 @@ #include "input.h" #include "menu.h" -VG_STATIC float - k_cam_spring = 20.0f, - k_cam_damp = 6.7f; - VG_STATIC void player_vector_angles( v3f angles, v3f v, float C, float k ) { float yaw = atan2f( v[0], -v[2] ), @@ -212,11 +208,15 @@ VG_STATIC void player__cam_iterate( player_instance *player ) v3_lerp( tpv_pos, fpv_pos, player->camera_type_blend, player->cam.pos ); v3_copy( player->angles, player->cam.angles ); - float Fd = -player->cam_land_punch_v * k_cam_damp, - Fs = -player->cam_land_punch * k_cam_spring; - player->cam_land_punch += player->cam_land_punch_v * vg.time_frame_delta; - player->cam_land_punch_v += ( Fd + Fs ) * vg.time_frame_delta; - player->cam.angles[1] += player->cam_land_punch; + v3f Fd, Fs, F; + v3_muls( player->cam_land_punch_v, -k_cam_damp, Fd ); + v3_muls( player->cam_land_punch, -k_cam_spring, Fs ); + v3_muladds( player->cam_land_punch, player->cam_land_punch_v, + vg.time_frame_delta, player->cam_land_punch ); + v3_add( Fd, Fs, F ); + v3_muladds( player->cam_land_punch_v, F, vg.time_frame_delta, + player->cam_land_punch_v ); + v3_add( player->cam_land_punch, player->cam.pos, player->cam.pos ); /* override camera */ player->cam.angles[0] = diff --git a/player_common.h b/player_common.h index 5cf4411..285a3de 100644 --- a/player_common.h +++ b/player_common.h @@ -5,6 +5,11 @@ static v3f TEMP_TPV_EXTRA; /* TODO: what? */ +VG_STATIC float + k_cam_spring = 20.0f, + k_cam_damp = 6.7f, + k_cam_punch = -1.0f; + VG_STATIC void player_look( player_instance *player, v3f angles ); VG_STATIC void player__cam_iterate( player_instance *player ); VG_STATIC void player_vector_angles( v3f angles, v3f v, float C, float k ); diff --git a/player_skate.c b/player_skate.c index efc0f34..551c2cc 100644 --- a/player_skate.c +++ b/player_skate.c @@ -2093,6 +2093,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 +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; @@ -2148,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; @@ -2497,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 ); @@ -2523,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