diff options
Diffstat (limited to 'src/lunar/systems.rs')
-rw-r--r-- | src/lunar/systems.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lunar/systems.rs b/src/lunar/systems.rs new file mode 100644 index 0000000..4cdebdc --- /dev/null +++ b/src/lunar/systems.rs @@ -0,0 +1,46 @@ +use bevy::prelude::*; +use avian2d::prelude::*; +use super::DestPlanet; +use super::LunarOrbitalData; +pub fn lunar_period_to_vec(angular_pos: f32, radius: f32) -> Vec2 { + let x = radius * f32::cos(angular_pos); + let y = radius * f32::sin(angular_pos); + Vec2 { x, y } +} +pub fn update_lunar_transform( + time: Res<Time>, + mut lunar_query: Query<( + &DestPlanet, + &mut LunarOrbitalData, + &mut Transform, + &RigidBody + ), With<DestPlanet>>, +) { + let (_moon_planet, mut lod, mut moon_transform, _moon_body) = lunar_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; + moon_transform.translation = Vec3 {x: new_transform.x, y: new_transform.y, z: 0.0}; + lod.period = dt * lod.orbital_velocity; +} +pub fn setup_moon(mut cmd: Commands) { + let objective_planet = DestPlanet { + // display_name: String::from("Objective Planet"), + planet_mass_kg: 50.0, + radius: 5.0, + }; + let lunar_radius = 900.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., orbital_radius: lunar_radius}, + RigidBody::Dynamic, + Transform::from_xyz(initial_transform.x, initial_transform.y, 0.0), + Sprite::from_color(Color::BLACK, Vec2 { x: 30., y: 30. }), + Collider::circle(r), + Mass(m), + )); +}
\ No newline at end of file |