summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs149
1 files changed, 38 insertions, 111 deletions
diff --git a/src/main.rs b/src/main.rs
index e0aa007..319eabc 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,10 @@
+mod lunar;
+mod setup;
+mod controllable;
+
use avian2d::prelude::*;
-use bevy::{ecs::bundle, prelude::*, window::WindowResolution, winit::WinitSettings};
+use bevy::{prelude::*, winit::WinitSettings};
+use controllable::Player;
fn main() {
println!("Hello, world!");
App::new()
@@ -7,98 +12,45 @@ fn main() {
.insert_resource(ClearColor(Color::srgb(0.5, 0.5, 0.9)))
.insert_resource(WinitSettings::game())
.add_plugins(PhysicsPlugins::default())
- .add_systems(Startup, setup_init)
- .add_systems(Startup, setup_stellar_body)
- .add_systems(Startup, setup_starting_planet)
- .add_systems(Update, hello_system)
- .add_systems(Update, update_gravitational_forces)
+ .add_systems(
+ Startup,
+ (
+ setup::setup_starting_planet,
+ setup::setup_init,
+ lunar::setup_moon
+ )
+ )
+ .add_systems(
+ Update,
+ (
+ update_gravitational_forces,
+ lunar::update_lunar_transform
+ )
+ )
.run();
}
-#[derive(Component)]
-struct LunarOrbitalData {
- period: f32,
-}
-fn hello_system() {
- println!("hello");
-}
-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 }
-}
-fn handle_lunar_orbit(
- 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();
-}
-#[derive(Component)]
-struct Starship {
- name: String,
- mass_kg: f32,
-}
-#[derive(Component)]
-struct StellarBody {
- name: String,
- mass_kg: f32,
-}
-enum GameLevel {
- Ground,
- Space,
- Nars,
-}
-#[derive(PartialEq, Eq)]
-enum PlanetType {
- Starting,
- Objective,
-}
-#[derive(Component)]
-struct Player {
- display_name: String,
- level: GameLevel,
-}
+/*enum GameLevel {
+ NearGround,
+ Space,
+ Moon,
+ LunarSurface,
+}*/
#[derive(Component)]
struct StartPlanet {
display_name: String,
planet_mass_kg: f32,
radius: f32,
}
-#[derive(Component)]
-struct DestPlanet {
- display_name: String,
- planet_mass_kg: f32,
- radius: f32,
-}
-fn setup_stellar_body(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;
- 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. },
- 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(30.),
- Mass(m),
- ));
-}
+
fn calculate_force_vector(
mass_actor: f32,
mass_incident: f32,
pos_actor: Vec2,
pos_incident: Vec2,
) -> Vec2 {
- let GRAV_CONST = 100.0;
- (GRAV_CONST * mass_actor * mass_incident / (pos_actor.distance_squared(pos_incident)))
+ let grav_const = 100.0;
+ (grav_const * mass_actor * mass_incident / (pos_actor.distance_squared(pos_incident)))
* Vec2 {
x: pos_actor.x - pos_incident.x,
y: pos_actor.y - pos_incident.y,
@@ -109,44 +61,19 @@ fn calculate_force_vector(
y: pos_actor.y - pos_incident.y,
}.normalize() * 50000.0*/
}
-fn update_gravitational_forces<'b>(
- mut query_start_planet: Query<(Entity, &StartPlanet, &Transform)>,
- mut query_dest_planet: Query<(Entity, &DestPlanet, &mut ExternalForce, &Transform)>,
+fn update_gravitational_forces(
+ mut query_planet: Query<(Entity, &StartPlanet, &Transform)>,
+ mut query_object: Query<(Entity, &Player, &mut ExternalForce, &Transform)>,
) {
- let (es, ps, ts) = query_start_planet.single_mut();
- let (ed, pd, mut exd, td) = query_dest_planet.single_mut();
+ let (_es, ps, ts) = query_planet.single_mut();
+ let (_ed, player, mut exd, td) = query_object.single_mut();
let f = calculate_force_vector(
ps.planet_mass_kg,
- pd.planet_mass_kg,
+ player.mass_kg,
ts.translation.xy(),
td.translation.xy(),
);
- println!("force vector: {}, transform_d: {}", f, td.translation);
+ info!("Force: {}, Transform: {}", f, td.translation);
exd.apply_force(f);
}
-fn setup_starting_planet(mut cmd: Commands) {
- let start_planet = StartPlanet {
- display_name: String::from("Earth 2"),
- planet_mass_kg: 15000.0,
- radius: 10.0,
- };
- let collider_radius = (&start_planet).radius;
- let planet_mass_kg = (&start_planet).planet_mass_kg;
- cmd.spawn((
- start_planet,
- RigidBody::Static,
- Transform::from_xyz(0.0, 0.0, 0.0),
- Sprite::from_color(Color::WHITE, Vec2 { x: 5.0, y: 5.0 }),
- Collider::circle(5.),
- Mass(planet_mass_kg),
- ));
-}
-type PlayerBundle = (Player, Sprite, Transform);
-fn setup_init(mut commands: Commands) {
- let player = Player {
- display_name: String::from("player"),
- level: GameLevel::Ground,
- };
- commands.spawn(Camera2d);
- println!("Setup initial things");
-}
+