use std::thread;
use std::time::Duration;
fn main() {
let saturn = enceladuss::interactions::saturns::ensure_saturns_binary_or_simulate();
let orbit = enceladuss::physics::orbit::EnceladusOrbit::new();
let rotation = enceladuss::physics::rotation::EnceladusRotation::new();
let landing_site = enceladuss::geodata::landing_sites::south_polar_terrain();
let exosphere = enceladuss::exosphere::species::reference_composition();
let thermal = enceladuss::environment::thermal::ThermalEnvironment {
local_time_hours: enceladuss::ENCELADUS_DAY_HOURS * 0.5,
latitude_deg: landing_site.latitude_deg,
shadowed: false,
};
let ice = enceladuss::resources::water_ice::subsurface_ocean();
let saturn_view = enceladuss::observation::saturn_view::SaturnView::sub_saturn_default();
let thermal_k = thermal.surface_temperature_k();
let startup_score = enceladuss::H24_RUNTIME_HOURS as f64
+ saturn.orbital_radius_km / 1.0e6
+ saturn.orbital_period_days / 365.0
+ saturn.orbital_angle_deg / 360.0
+ saturn.rotation_period_h / 24.0
+ saturn.rotation_angle_deg / 360.0
+ saturn.axial_tilt_deg / 90.0
+ saturn.surface_speed_m_s / 1_000.0
+ orbit.semi_major_axis_m / 1.0e9
+ orbit.orbital_period_s() / 1.0e6
+ rotation.sidereal_period_s / 1.0e6
+ landing_site.latitude_deg.abs() / 90.0
+ landing_site.longitude_deg.abs() / 180.0
+ exosphere.len() as f64
+ thermal_k / 1_000.0
+ ice.estimated_mass_kg.log10().max(0.0)
+ if saturn_view.is_visible() { 1.0 } else { 0.0 }
+ if landing_site.name.is_empty() {
0.0
} else {
1.0
}
+ if matches!(
saturn.mode,
enceladuss::interactions::saturns::SaturnRuntimeMode::Binary
) {
1.0
} else {
0.5
};
let heartbeat = if startup_score.is_finite() && startup_score > 0.0 {
Duration::from_secs(60)
} else {
Duration::from_secs(5)
};
loop {
thread::sleep(heartbeat);
}
}