use astrodyn_gravity::{GravityControl, GravityGradient};
use astrodyn_quantities::ext::Vec3Ext;
use glam::DVec3;
use crate::recipes::{epoch, mars, sun, vehicle};
use crate::vehicle_builder::VehicleBuilder;
use crate::SimulationBuilder;
pub fn mars_orbit() -> SimulationBuilder {
let mut sb = SimulationBuilder::new(epoch::dawn_mars_2009(), 10.0);
let mars_idx = sb.add_source("Mars", mars::point_mass());
let sun_idx = sb.add_source(
"Sun",
sun::third_body(
DVec3::new(2.27e11, 0.0, 0.0).m_at::<astrodyn_quantities::frame::RootInertial>(),
),
);
sb = sb.sun(sun_idx);
use astrodyn_dynamics::state::TranslationalStateTyped;
use astrodyn_quantities::frame::RootInertial;
let trans = TranslationalStateTyped::<RootInertial> {
position: DVec3::new(11_563_355.680_2, -14_356_668.897_7, 6_293_704.616_9)
.m_at::<RootInertial>(),
velocity: DVec3::new(-2_273.107_8, 2_380.132_4, -22.911).m_per_s_at::<RootInertial>(),
};
let vehicle = VehicleBuilder::new()
.with_translational(trans)
.three_dof_point_mass(vehicle::dawn_mass())
.rk4()
.gravity(GravityControl::new_spherical(
mars_idx,
GravityGradient::Skip,
))
.gravity(GravityControl::new_third_body(sun_idx))
.build();
sb.add_body(vehicle);
sb
}