diff options
Diffstat (limited to 'src/lunar/systems.rs')
-rw-r--r-- | src/lunar/systems.rs | 27 |
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), |