st
authorhgn <hgodden00@gmail.com>
Sat, 27 May 2023 23:09:30 +0000 (00:09 +0100)
committerhgn <hgodden00@gmail.com>
Sat, 27 May 2023 23:09:30 +0000 (00:09 +0100)
player.c
player.h
player_common.c
player_common.h
player_skate.c
shaders/scene_scoretext.h
shaders/scene_sfd.vs

index 145a9285c79c636ece7c70b32c4d947725a213c7..6c610aeda2114a73047a1d46984742405b4db70f 100644 (file)
--- 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();
 
index b52201b7b314009f07395d87e8c7c516cbbe0f8f..984fcef7cf6489a1ab1db7beadb605d3a4a72888 100644 (file)
--- 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;
 
index 22c26a280524f8d75f5c30bfa64d76fbfe93664d..c9cf3b7388e1bee9d7966764d4920b0dc760682f 100644 (file)
@@ -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] = 
index 5cf441123d42072ede60180de9293333d02f6896..285a3dec0537e74c9c357ee320391ca3f42242d1 100644 (file)
@@ -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 );
index efc0f348db2900014c95cf14a848a7d340751a89..551c2cc1d9d026db60f829c8a7a3b6b6d0716a22 100644 (file)
@@ -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<manifold_len; i++ ){
index 37b24fce1748829d5021efda7d7ad2e460c465b0..d417e45d0a467e8b09865ea4ab0c7ad078aa15d7 100644 (file)
@@ -46,8 +46,8 @@ static struct vg_shader _shader_scene_scoretext = {
 "void main()\n"
 "{\n"
 "   float w = ((a_norm.w)-0.5)*2.0 + fract(uInfo.z) - 0.0;\n"
-"   float c = -cos(w*0.2);\n"
-"   float s = -sin(w*0.2);\n"
+"   float c = -cos(w*0.6);\n"
+"   float s = -sin(w*0.6);\n"
 "   float r = 0.2;\n"
 "\n"
 "   float w1 = clamp( w*4.0 - a_co.y*10.0, -1.0, 1.0 ) * (3.14159265*0.5);\n"
index d81ac9937a777d44f146b8db9f2f5d9c6820c778..39560d6fd19118596b61db31c6e20b7af6b8115c 100644 (file)
@@ -17,8 +17,8 @@ out vec3 aWorldCo;
 void main()
 {
    float w = ((a_norm.w)-0.5)*2.0 + fract(uInfo.z) - 0.0;
-   float c = -cos(w*0.2);
-   float s = -sin(w*0.2);
+   float c = -cos(w*0.6);
+   float s = -sin(w*0.6);
    float r = 0.2;
 
    float w1 = clamp( w*4.0 - a_co.y*10.0, -1.0, 1.0 ) * (3.14159265*0.5);