use macroquad::prelude as mq; use rapier3d::prelude::*; mod engine; use engine::*; mod camera; mod rendering; mod graphics_util; use graphics_util::*; use crate::rendering::Renderer; #[macroquad::main("3D")] async fn main() { let mut world = World::default(); let mut renderer = Renderer::new(); // Physics Initialization world.register_free_collider( ColliderBuilder::cuboid(50.0, 10.0, 50.0) .restitution(0.2) .build(), None, ); add_objects(&mut world); loop { renderer.update_camera(); if mq::is_key_pressed(mq::KeyCode::L) { renderer .light .set_location(renderer.camera.position, renderer.camera.front); renderer.update_light(); println!( "Light Pos: {}, Light Front Vec{}", renderer.light.position, renderer.light.front ); } if mq::is_key_pressed(mq::KeyCode::C) { add_objects(&mut world); } // Physics Simulation world.step(); renderer.draw(&mut world); mq::next_frame().await } } fn add_objects(world: &mut World) { for i in 0..1 { let body = world.register_body( RigidBodyBuilder::dynamic() .translation(vector![0.0, 50.0 + i as f32, 0.0]) .rotation(vector![std::f32::consts::PI / 4.2, i as f32, i as f32]) .build(), ); world.register_collider( ColliderBuilder::cuboid(3.0, 3.0, 3.0) .restitution(1.0) .build(), body, None, ); } }