working on drone abstraction

This commit is contained in:
Flima Desktop 2025-12-07 00:41:00 +00:00
parent a8221eb90a
commit 91598ea20e
1 changed files with 15 additions and 14 deletions

View File

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