land 'supports'
authorhgn <hgodden00@gmail.com>
Mon, 30 Jan 2023 07:49:23 +0000 (07:49 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 30 Jan 2023 07:49:23 +0000 (07:49 +0000)
player_device_skate.h

index e23398d78a45e17d0b5df1165e3abf8faff5c069..566bead354db77b1dd3c4e8c4985db5b62e6219c 100644 (file)
@@ -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;