diff --git a/src/bike.rs b/src/bike.rs index 3b9a62a..65766b4 100644 --- a/src/bike.rs +++ b/src/bike.rs @@ -226,6 +226,9 @@ fn wheel_mesh( Mesh3d(meshes.add(tire_mesh)), MeshMaterial3d(materials.add(wheel_material.clone())), xform, + Collider::sphere(WHEEL_RADIUS), + ColliderDensity(0.5), + CollisionLayers::NONE, TransformInterpolation, wheel, )); diff --git a/src/physics.rs b/src/physics.rs index e397544..1674499 100644 --- a/src/physics.rs +++ b/src/physics.rs @@ -1,7 +1,7 @@ use avian3d::{math::Scalar, prelude::*}; use bevy::prelude::*; -const DRAG_COEFF: Scalar = 0.1; +const DRAG_COEFF: Scalar = 0.00001; #[derive(Resource, Default, Debug, Reflect)] #[reflect(Resource)] @@ -20,9 +20,9 @@ pub struct CatControllerSettings { impl Default for CatControllerSettings { fn default() -> Self { Self { - kp: 16.0, - kd: 2.0, - ki: 0.9, + kp: 45.0, + kd: 15.0, + ki: 1.0, } } } @@ -272,7 +272,7 @@ mod systems { let bike_vel = bike_vel.0; let dt = time.delta().as_secs_f32(); - let max_thrust = 2000.0; + let max_thrust = 5000.0; let yaw_angle = -yaw_to_angle(input.yaw); for (mut state, config, wheel) in wheels.iter_mut() { @@ -345,7 +345,11 @@ mod systems { let dir = vel.normalize_or_zero(); let drag = -dspeed * dt * DRAG_COEFF * dir; if speed > 1.0 { - force.apply_force_at_point(drag, xform.translation, xform.translation); + force.apply_force_at_point( + drag, + xform.translation - (0.25 * *xform.down()), + xform.translation, + ); } bevy::log::debug!("speed: {}, drag force: {}", speed, drag.length());