From cefbca4400d4ac2c0f8a53b4bd66897dc57e0f3a Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Sun, 17 Sep 2023 20:53:00 +0200 Subject: [PATCH] spheres --- Cargo.lock | 9 --------- Cargo.toml | 1 - src/main.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4f04066..ed908c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2602,14 +2602,6 @@ dependencies = [ "redox_syscall", ] -[[package]] -name = "orbital" -version = "0.1.0" -source = "git+https://github.com/oli-obk/solar_sailors.git?rev=2fabdd044f0f362595494dcad5102c50ae9572f7#2fabdd044f0f362595494dcad5102c50ae9572f7" -dependencies = [ - "tracing", -] - [[package]] name = "overload" version = "0.1.1" @@ -3071,7 +3063,6 @@ dependencies = [ "bevy", "bevy_rapier3d", "glam", - "orbital", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a609b61..e5ab4a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,4 +19,3 @@ bevy_rapier3d = { version = "0.22.0", features = [ "debug-render-3d", ] } glam = { version = "0.24.1", features = ["debug-glam-assert"] } -orbital = { git = "https://github.com/oli-obk/solar_sailors.git", rev = "2fabdd044f0f362595494dcad5102c50ae9572f7" } diff --git a/src/main.rs b/src/main.rs index 0704781..328c601 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,6 +69,8 @@ struct OrbitCamera { #[derive(Component)] struct ThrusterSound; +const AMOUNT_OF_FUNNY_ORBIT_SPHERES: u32 = 1000; + fn fire_thrusters( mut commands: Commands, keyboard_input: Res>, @@ -148,7 +150,7 @@ fn apply_gravity( .translation .distance(body_transform.translation) as f64; - let fg = (orbit::G * (gravity.mass as f64)) / (distance * distance); + let fg = (orbit::G * gravity.mass) / (distance * distance); let direction = (body_transform.translation - ship_transform.translation).normalize(); let fg = ExternalForce { @@ -168,6 +170,15 @@ fn debug_spaceship_orbit( body_query: Query<(&Transform, &GravityAttractor), Without>, mut text_query: Query<&mut Text, With>, mut gizmos: Gizmos, + mut query_sphere: Query< + &mut Transform, + ( + With, + Without, + Without, + Without, + ), + >, ) { let mut text = text_query.single_mut(); let (ship_transform, &v) = query.single(); @@ -204,7 +215,7 @@ fn debug_spaceship_orbit( ); let orbit = orbit::Orbit::from_pos_dir( - body_gravity.mass.into(), + body_gravity.mass, DVec2::new(rotated_pos.x.into(), rotated_pos.z.into()), DVec2::new(rotated_vel.x.into(), rotated_vel.z.into()), ); @@ -216,6 +227,17 @@ fn debug_spaceship_orbit( gizmos.ray_gradient(ship_pos, translation, Color::BLUE, Color::GREEN); gizmos.line(body_transform.translation, ship_pos, Color::WHITE); + + let base_pos = body_pos; + let distance = (orbit.semi_major_axis as f32) * 2.0; + for (i, mut sphere) in query_sphere.iter_mut().enumerate() { + let angle = std::f32::consts::TAU / (AMOUNT_OF_FUNNY_ORBIT_SPHERES as f32) * (i as f32); + + let pos = Vec3::new(angle.cos(), 0.0, angle.sin()) * distance; + let rotated = base_pos + -orbital_plane_rot * (pos - base_pos); + + sphere.translation = base_pos + rotated; + } } // adapted from https://bevy-cheatbook.github.io/cookbook/pan-orbit-camera.html @@ -252,6 +274,9 @@ fn orbit_camera( } } +#[derive(Component)] +struct FunnyOrbitalSphere; + /// set up a simple 3D scene fn setup( // mut windows: Query<&mut Window>, @@ -260,10 +285,11 @@ fn setup( mut materials: ResMut>, asset_server: Res, ) { - let mut rapier = RapierConfiguration::default(); // We ain't a normal game, we do our own gravity. - rapier.gravity = Vec3::new(0.0, 0.0, 0.0); - commands.insert_resource(rapier); + commands.insert_resource(RapierConfiguration { + gravity: Vec3::ZERO, + ..default() + }); commands.spawn(PlanetBundle::new( &mut meshes, @@ -279,6 +305,22 @@ fn setup( Vec3::new(0.0, 100.0, 0.0), )); + for _ in 0..AMOUNT_OF_FUNNY_ORBIT_SPHERES { + commands.spawn(( + FunnyOrbitalSphere, + PbrBundle { + mesh: meshes.add( + shape::UVSphere { + radius: 100.0, + ..default() + } + .into(), + ), + ..default() + }, + )); + } + // light commands.insert_resource(AmbientLight { color: Color::WHITE, @@ -423,7 +465,7 @@ impl PlanetBundle { } .into(), ), - material: material, + material, transform: position, ..default() },