use macroquad::prelude as mq; use rapier3d::prelude::*; mod engine; use engine::*; mod camera; mod rendering; mod 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, 5.0, 50.0) .restitution(0.5) .build(), None, ); add_objects(&mut world); let mut i = 0; 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(&world); println!( "Light Pos: {}, Light Front Vec{}", renderer.light.position, renderer.light.front ); } if mq::is_key_pressed(mq::KeyCode::C) { add_objects(&mut world); } if mq::is_key_pressed(mq::KeyCode::M) { renderer.apply_config(); } // Physics Simulation world.step(); renderer.draw(&mut world); mq::next_frame().await; i += 1; if i > 30 { world.clear_ofb(); renderer.update_light(&world); } } } 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(5.0, 5.0, 5.0) .restitution(0.3) .build(), body, None, ); } }