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()
},