summaryrefslogtreecommitdiff
path: root/src/lunar/systems.rs
diff options
context:
space:
mode:
authorstvnliu@homelab <stvnliu.lab@gmail.com>2025-03-20 15:20:36 +0200
committerstvnliu@homelab <stvnliu.lab@gmail.com>2025-03-20 15:20:36 +0200
commit221434eafec46c6e1974d40f17893fee379cead8 (patch)
treeceeee167f3dc341b92a10d49664e02894d8813f4 /src/lunar/systems.rs
parentb363b791696a045400a8e1f9fd58637ff7e7f4e2 (diff)
downloadmartian-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.rs46
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