From: hgn Date: Mon, 30 Jan 2023 07:49:23 +0000 (+0000) Subject: land 'supports' X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;ds=inline;h=5e8e7be8671c478b14ed0dca80c72c115ff160b9;p=carveJwlIkooP6JGAAIwe30JlM.git land 'supports' --- diff --git a/player_device_skate.h b/player_device_skate.h index e23398d..566bead 100644 --- a/player_device_skate.h +++ b/player_device_skate.h @@ -1128,9 +1128,35 @@ VG_STATIC void player_skate_update( player_interface *player, &s->sphere_front, manifold ), len_back = skate_collide_smooth( player, mtx_back, &s->sphere_back, &manifold[len_front] ), - interface_len = len_front + len_back; + /* try to slap both wheels onto the ground when landing to prevent mega + * angular velocities being added */ + if( (s->state.activity == k_skate_activity_air) && (len_front != len_back) ) + { + v3f trace_from, trace_dir; + v3_muls( player->rb.to_world[1], -1.0f, trace_dir ); + + if( len_front ) + v3_copy( mtx_back[3], trace_from ); + else + v3_copy( mtx_front[3], trace_from ); + + ray_hit ray; + ray.dist = 0.6f; + + if( ray_world( trace_from, trace_dir, &ray ) ) + { + rb_ct *ct = &manifold[ interface_len ]; + + v3_copy( ray.pos, ct->co ); + v3_copy( ray.normal, ct->n ); + ct->p = 0.0f; + + interface_len ++; + } + } + interface_manifold = manifold; grind_manifold = manifold + interface_len;