diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 149 |
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"); -} + |