diff --git a/src/main.rs b/src/main.rs index b01c73f..b1ba1a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod engine; use engine::*; mod camera; +mod drone; mod rendering; mod graphics_util; @@ -23,7 +24,7 @@ async fn main() { // Physics Initialization world.register_free_collider( - ColliderBuilder::cuboid(50.0, 5.0, 50.0) + ColliderBuilder::cuboid(250.0, 5.0, 250.0) .restitution(0.5) .build(), None, @@ -35,7 +36,9 @@ async fn main() { let drone_rb_handle = world.register_body( RigidBodyBuilder::dynamic() .translation(vector![0.0, 10.0, 0.0]) - .rotation(vector![0.1, 0.0, 0.0]) + .rotation(vector![0.6, 0.0, 0.0]) + .linear_damping(0.1) + .angular_damping(0.1) .build(), ); world.register_collider( @@ -46,13 +49,14 @@ async fn main() { None, ); let motor_positions = [ - vector![5.0, 0.0, 5.0], - vector![-5.0, 0.0, 5.0], - vector![-5.0, 0.0, -5.0], - vector![5.0, 0.0, -5.0], + point![5.0, 3.0, 5.0], + point![-5.0, 3.0, 5.0], + point![-5.0, 3.0, -5.0], + point![5.0, 3.0, -5.0], ]; let mut tick = 0; + loop { renderer.update_camera(); if mq::is_key_pressed(mq::KeyCode::L) { @@ -74,23 +78,18 @@ async fn main() { } // Physics Simulation - world.step(); - { let drone_rb = world.bodies.get_mut(drone_rb_handle).unwrap(); drone_rb.reset_forces(true); drone_rb.reset_torques(true); for (i, pos) in motor_positions.iter().enumerate() { // Thrust is applied upward at motor position - let force = nalgebra::Vector3::new(0.0, drone_rb.mass() * 2.5, 0.0); + let mut force = nalgebra::Vector3::new(0.0, drone_rb.mass() * 2.8, 0.0); // drone_rb.reset_forces(true); - drone_rb.add_force_at_point( - drone_rb.rotation().transform_vector(&force), - point![pos.x, pos.y, pos.z], - true, - ); + force = drone_rb.rotation().transform_vector(&force); + drone_rb.add_force_at_point(force, drone_rb.position().transform_point(&pos), true); // drone_rb.apply_force_at_point(force, *pos, true); // let torque = if i % 2 == 0 { @@ -103,6 +102,8 @@ async fn main() { } } + world.step(); + renderer.draw(&mut world); if tick >= 30 {