X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=fcaffd9e9466b550b1977e44e09c3776bef10e2a;hb=5bfb36032928ba9f8d12e72961af68bfab9ea648;hp=3cd9a928194cbc677aa9741e3694b26773849040;hpb=844527ec68c063d78d4993bd8e4053f9ddc47b78;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index 3cd9a92..fcaffd9 100644 --- a/player_skate.c +++ b/player_skate.c @@ -59,18 +59,17 @@ VG_STATIC int skate_collide_smooth( player_instance *player, world_instance *world = world_current_instance(); int len = 0; - len = rb_sphere__scene( mtx, sphere, NULL, &world->rb_geo.inf.scene, man ); + len = rb_sphere__scene( mtx, sphere, NULL, &world->rb_geo.inf.scene, man, + k_material_flag_walking ); - for( int i=0; irb; man[i].rbb = NULL; } rb_manifold_filter_coplanar( man, len, 0.03f ); - if( len > 1 ) - { + if( len > 1 ){ rb_manifold_filter_backface( man, len ); rb_manifold_filter_joint_edges( man, len, 0.03f ); rb_manifold_filter_pairs( man, len, 0.03f ); @@ -511,7 +510,8 @@ void player__approximate_best_trajectory( player_instance *player ) float scan_radius = k_board_radius; scan_radius *= vg_clampf( t, 0.02f, 1.0f ); - int idx = spherecast_world(trace_world, co0, co1, scan_radius, &t1, n); + int idx = spherecast_world( trace_world, co0, co1, scan_radius, &t1, n, + k_material_flag_walking ); if( idx != -1 ){ v3f co; v3_lerp( co0, co1, t1, co ); @@ -598,7 +598,8 @@ void player__approximate_best_trajectory( player_instance *player ) v3f n; int idx = spherecast_world( world0, co0,co1, - k_board_radius*0.1f, &t1, n); + k_board_radius*0.1f, &t1, n, + k_material_flag_walking ); if( idx != -1 ){ goto invalidated_grind; } @@ -1119,27 +1120,29 @@ VG_STATIC void player__skate_pre_update( player_instance *player ){ return; } - enum trick_type trick = k_trick_type_none; - if( (s->state.activity <= k_skate_activity_air_to_grind) && - (trick = player_skate_trick_input( player )) ) - { - if( (vg.time - s->state.jump_time) < 0.1f ){ - v3_zero( s->state.trick_vel ); - s->state.trick_time = 0.0f; - - if( trick == k_trick_type_kickflip ){ - s->state.trick_vel[0] = 3.0f; - } - else if( trick == k_trick_type_shuvit ){ - s->state.trick_vel[2] = 3.0f; - } - else if( trick == k_trick_type_treflip ){ - s->state.trick_vel[0] = 2.0f; - s->state.trick_vel[2] = 2.0f; + if( s->state.activity <= k_skate_activity_air_to_grind ){ + enum trick_type trick = k_trick_type_none; + if( (trick = player_skate_trick_input( player )) ){ + if( (vg.time - s->state.jump_time) < 0.1f ){ + v3_zero( s->state.trick_vel ); + s->state.trick_time = 0.0f; + + if( trick == k_trick_type_kickflip ){ + s->state.trick_vel[0] = 3.0f; + } + else if( trick == k_trick_type_shuvit ){ + s->state.trick_vel[2] = 3.0f; + } + else if( trick == k_trick_type_treflip ){ + s->state.trick_vel[0] = 2.0f; + s->state.trick_vel[2] = 2.0f; + } + s->state.trick_type = trick; } - s->state.trick_type = trick; } } + else + s->state.trick_type = k_trick_type_none; } VG_STATIC void player__skate_post_update( player_instance *player ){ @@ -1330,7 +1333,7 @@ int skate_compute_surface_alignment( player_instance *player, v3_muladds( left, player->rb.to_world[1], k_board_radius, left ); ray_l.dist = 2.1f * k_board_radius; - res_l = ray_world( world, left, dir, &ray_l ); + res_l = ray_world( world, left, dir, &ray_l, k_material_flag_walking ); if( res_l ) break; @@ -1342,7 +1345,7 @@ int skate_compute_surface_alignment( player_instance *player, v3_muladds( right, player->rb.to_world[1], k_board_radius, right ); ray_r.dist = 2.1f * k_board_radius; - res_r = ray_world( world, right, dir, &ray_r ); + res_r = ray_world( world, right, dir, &ray_r, k_material_flag_walking ); if( res_r ) break; @@ -1509,7 +1512,8 @@ VG_STATIC int skate_point_visible( v3f origin, v3f target ){ v3_muls( dir, 1.0f/ray.dist, dir ); ray.dist -= 0.025f; - if( ray_world( world_current_instance(), origin, dir, &ray ) ) + if( ray_world( world_current_instance(), origin, dir, &ray, + k_material_flag_walking ) ) return 0; return 1; @@ -2280,7 +2284,8 @@ begin_collision:; v3f n; float cast_radius = wheels[i].radius - k_penetration_slop * 2.0f; - if( spherecast_world( world, current, future, cast_radius, &t, n ) != -1) + if( spherecast_world( world, current, future, cast_radius, &t, n, + k_material_flag_walking ) != -1) max_time = vg_minf( max_time, t * s->substep ); } @@ -2327,7 +2332,8 @@ begin_collision:; float t; v3f n; if( (v3_dist2( head_wp0, head_wp1 ) > 0.001f) && - (spherecast_world( world, head_wp0, head_wp1, 0.2f, &t, n ) != -1) ) + (spherecast_world( world, head_wp0, head_wp1, 0.2f, &t, n, + k_material_flag_walking ) != -1) ) { v3_lerp( start_co, player->rb.co, t, player->rb.co ); rb_update_transform( &player->rb ); @@ -2374,7 +2380,7 @@ begin_collision:; rb_ct *cman = &manifold[manifold_len]; int l = rb_capsule__scene( mtx, &capsule, NULL, &world->rb_geo.inf.scene, - cman ); + cman, k_material_flag_walking ); /* weld joints */ for( int i=0; i