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;
}
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 );