X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=4d40667658aed7856cd16ac67920350b66dfc51a;hb=0c10e79eabdb2cc0fe0b6b4116541d8eeeef1328;hp=bee2a0ca214a0a65f50e21e1f17a6d52c4b26150;hpb=d71f87252be197cec95e0b0458140112f75dc8b2;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index bee2a0c..4d40667 100644 --- a/player_skate.c +++ b/player_skate.c @@ -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 );