diff options
author | stvnliu@homelab <stvnliu.lab@gmail.com> | 2025-03-20 15:20:36 +0200 |
---|---|---|
committer | stvnliu@homelab <stvnliu.lab@gmail.com> | 2025-03-20 15:20:36 +0200 |
commit | 221434eafec46c6e1974d40f17893fee379cead8 (patch) | |
tree | ceeee167f3dc341b92a10d49664e02894d8813f4 /src/lunar/systems.rs | |
parent | b363b791696a045400a8e1f9fd58637ff7e7f4e2 (diff) | |
download | martian-rescue-rs-221434eafec46c6e1974d40f17893fee379cead8.tar.gz martian-rescue-rs-221434eafec46c6e1974d40f17893fee379cead8.tar.bz2 martian-rescue-rs-221434eafec46c6e1974d40f17893fee379cead8.zip |
refactor: updated project structure, set up PLAN
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 |