summaryrefslogtreecommitdiff
path: root/src/lunar/systems.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lunar/systems.rs')
-rw-r--r--src/lunar/systems.rs27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/lunar/systems.rs b/src/lunar/systems.rs
index 81fbbf2..e9aed52 100644
--- a/src/lunar/systems.rs
+++ b/src/lunar/systems.rs
@@ -2,6 +2,10 @@ use core::f32;
use bevy::prelude::*;
use avian2d::prelude::*;
+use crate::StartPlanet;
+use crate::Stickable;
+use crate::TouchdownGoal;
+
use super::DestPlanet;
use super::LunarOrbitalData;
pub fn lunar_period_to_vec(angular_pos: f32, radius: f32) -> Vec2 {
@@ -11,20 +15,28 @@ pub fn lunar_period_to_vec(angular_pos: f32, radius: f32) -> Vec2 {
}
pub fn update_lunar_transform(
time: Res<Time>,
+ goal: Res<TouchdownGoal>,
mut lunar_query: Query<(
&DestPlanet,
&mut LunarOrbitalData,
&mut Transform,
+ &mut LinearVelocity,
&RigidBody
- ), With<DestPlanet>>,
+ ), (With<DestPlanet>, Without<StartPlanet>)>,
+ mut solar_query: Query<(
+ &Transform
+ ), (With<StartPlanet>, Without<DestPlanet>)>,
) {
- let (_moon_planet, mut lod, mut moon_transform, _moon_body) = lunar_query.single_mut();
+ if goal.reached {return;}
+ let (_moon_planet, mut lod, mut moon_transform, mut moon_vel, _moon_body) = lunar_query.single_mut();
+ let (solar_transform) = solar_query.single_mut();
let dt = time.delta_secs();
let new_transform = lunar_period_to_vec(
lod.period,
lod.orbital_radius).normalize_or_zero() * lod.orbital_radius;
- // println!("lunar transform: {}", new_transform);
- moon_transform.translation = Vec3 {x: new_transform.x, y: new_transform.y, z: 0.0};
+ // moon_transform.translation = Vec3 {x: new_transform.x, y: new_transform.y, z: 0.0};
+ moon_vel.0 = (new_transform - moon_transform.translation.xy() + solar_transform.translation.xy()) * 100.0 * dt;
+ println!("lunar transform: {}", moon_transform.translation);
lod.period += dt * lod.orbital_velocity;
lod.period = if lod.period <= 2. * f32::consts::PI { lod.period } else { 0. }
}
@@ -34,15 +46,18 @@ pub fn setup_moon(mut cmd: Commands) {
planet_mass_kg: 50000.0,
radius: 30.0,
};
- let lunar_radius = 225.0;
+ let lunar_radius = 300.0;
let r = (&objective_planet).radius;
let m = (&objective_planet).planet_mass_kg;
let initial_transform = lunar_period_to_vec(0., 100.);
cmd.spawn((
objective_planet,
LunarOrbitalData { period: 0., orbital_velocity: 1.0, orbital_radius: lunar_radius},
- RigidBody::Static,
+ RigidBody::Dynamic,
Transform::from_xyz(initial_transform.x, initial_transform.y, 0.0),
+ LockedAxes::ROTATION_LOCKED,
+ LinearVelocity::ZERO,
+ Stickable {},
Sprite::from_color(Color::BLACK, Vec2 { x: 30., y: 30. }),
Collider::rectangle(r, r),
Mass(m),