working on drone abstraction
This commit is contained in:
parent
a8221eb90a
commit
91598ea20e
29
src/main.rs
29
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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue