shadow tweak
[carveJwlIkooP6JGAAIwe30JlM.git] / player_skate.c
index bee2a0ca214a0a65f50e21e1f17a6d52c4b26150..4d40667658aed7856cd16ac67920350b66dfc51a 100644 (file)
@@ -413,6 +413,13 @@ void player__approximate_best_trajectory( player_instance *player )
             p->score = -v3_dot( ve, p->n );
             p->land_dist = t + k_trace_delta * t1;
 
+            u32 vert_index = world.scene_geo->arrindices[ idx*3 ];
+            struct world_material *mat = world_tri_index_material( vert_index );
+            
+            /* Bias prediction towords ramps */
+            if( !(mat->info.flags & k_material_flag_skate_surface) )
+               p->score *= 10.0f;
+
             break;
          }
 
@@ -641,49 +648,55 @@ VG_STATIC void skate_apply_steering_model( player_instance *player )
    struct player_skate *s = &player->_skate;
 
    /* Steering */
-   float input = player->input_js1h->axis.value,
-         grab  = player->input_grab->axis.value,
-         steer = input * (1.0f-(s->state.jump_charge+grab)*0.4f),
-         steer_scaled = vg_signf(steer) * powf(steer,2.0f) * k_steer_ground;
+   float steer = player->input_js1h->axis.value,
+         grab  = player->input_grab->axis.value;
+
+   steer = vg_signf( steer ) * steer*steer * k_steer_ground;
 
    v3f steer_axis;
-   v3_muls( player->rb.to_world[1], -vg_signf( steer_scaled ), steer_axis );
+   v3_muls( player->rb.to_world[1], -vg_signf( steer ), steer_axis );
 
    float rate = 26.0f,
          top  = 1.0f;
 
    if( s->state.activity == k_skate_activity_air )
    {
-      rate = 6.0f * fabsf(steer_scaled);
+      rate = 6.0f * fabsf(steer);
       top  = 1.5f;
    }
-   else if( s->state.activity == k_skate_activity_grind_5050 )
+   else
    {
-      rate = 0.0f;
-      top  = 0.0f;
-   }
+      /* rotate slower when grabbing on ground */
+      steer *= (1.0f-(s->state.jump_charge+grab)*0.4f);
 
-   else if( s->state.activity >= k_skate_activity_grind_any )
-   {
-      rate *= fabsf(steer_scaled);
+      if( s->state.activity == k_skate_activity_grind_5050 )
+      {
+         rate = 0.0f;
+         top  = 0.0f;
+      }
 
-      float a = 0.8f * -steer_scaled * k_rb_delta;
+      else if( s->state.activity >= k_skate_activity_grind_any )
+      {
+         rate *= fabsf(steer);
 
-      v4f q;
-      q_axis_angle( q, player->rb.to_world[1], a );
-      q_mulv( q, s->grind_vec, s->grind_vec );
+         float a = 0.8f * -steer * k_rb_delta;
 
-      v3_normalize( s->grind_vec );
-   }
+         v4f q;
+         q_axis_angle( q, player->rb.to_world[1], a );
+         q_mulv( q, s->grind_vec, s->grind_vec );
 
-   else if( s->state.manual_direction )
-   {
-      rate = 35.0f;
-      top  = 1.5f;
+         v3_normalize( s->grind_vec );
+      }
+
+      else if( s->state.manual_direction )
+      {
+         rate = 35.0f;
+         top  = 1.5f;
+      }
    }
 
    float current  = v3_dot( player->rb.to_world[1], player->rb.w ),
-         addspeed = (steer_scaled * -top) - current,
+         addspeed = (steer * -top) - current,
          maxaccel = rate * k_rb_delta,
          accel    = vg_clampf( addspeed, -maxaccel, maxaccel );