performance measurements
[carveJwlIkooP6JGAAIwe30JlM.git] / player_skate.c
index e591d171db98f6a3c46ee2e3d91855fa97e88914..1ad7231609e2f0dcc2b5abd1a2a94d9e03ce63b8 100644 (file)
@@ -225,7 +225,7 @@ too_many_samples:
          v3_copy( sj->normal3, n1 );
          v3_cross( n0, n1, dir );
 
-         if( v3_length2( dir ) <= 0.001f )
+         if( v3_length2( dir ) <= 0.000001f )
             continue;
 
          v3_normalize( dir );
@@ -1540,7 +1540,6 @@ static void skate_grind_decay( struct grind_info *inf, float strength ){
 static void skate_grind_truck_apply( float sign, struct grind_info *inf,
                                         float strength ){
    struct player_skate_state *state = &player_skate.state;
-
    /* REFACTOR */
    v3f ra = { 0.0f, -k_board_radius, sign * k_board_length };
    v3f raw, wsp;
@@ -2390,7 +2389,7 @@ begin_collision:;
    }
 
    /* yes, we are currently rebuilding mass matrices every frame. too bad! */
-   v3f extent = { k_board_width, 0.1f, k_board_length };
+   v3f extent = { k_board_width*10.0f, 0.1f, k_board_length };
    float ex2 = k_board_interia*extent[0]*extent[0],
          ey2 = k_board_interia*extent[1]*extent[1],
          ez2 = k_board_interia*extent[2]*extent[2];
@@ -2570,6 +2569,27 @@ begin_collision:;
    } else if( stick_frames == 0 ){
       /* TODO: EXIT SOUNDS */
    }
+
+   if( (state->activity_prev < k_skate_activity_grind_any) && 
+       (state->activity >= k_skate_activity_grind_any) ){
+      state->velocity_limit = v3_length( localplayer.rb.v )*1.0f;
+      state->grind_y_start = localplayer.rb.co[1];
+   }
+
+   if( state->activity >= k_skate_activity_grind_any ){
+      f32 dy = localplayer.rb.co[1] - state->grind_y_start;
+      if( dy < 0.0f ){
+         state->velocity_limit += -dy*0.2f;
+      }
+      state->grind_y_start = localplayer.rb.co[1];
+
+
+      f32 speed_end = v3_length( localplayer.rb.v );
+      if( speed_end > state->velocity_limit ){
+         v3_muls( localplayer.rb.v, state->velocity_limit/speed_end, 
+                  localplayer.rb.v );
+      }
+   }
 }
 
 static void player__skate_im_gui(void){