marss 0.0.3

Mars celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
pub struct TimeScale {
    pub simulation_time_s: f64,
    pub real_time_s: f64,
    pub speed_multiplier: f64,
    pub paused: bool,
}

impl Default for TimeScale {
    fn default() -> Self {
        Self::new()
    }
}

impl TimeScale {
    pub fn new() -> Self {
        Self {
            simulation_time_s: 0.0,
            real_time_s: 0.0,
            speed_multiplier: crate::SOL_S,
            paused: false,
        }
    }

    pub fn realtime() -> Self {
        Self {
            simulation_time_s: 0.0,
            real_time_s: 0.0,
            speed_multiplier: 1.0,
            paused: false,
        }
    }

    pub fn fast_forward(factor: f64) -> Self {
        Self {
            simulation_time_s: 0.0,
            real_time_s: 0.0,
            speed_multiplier: factor,
            paused: false,
        }
    }

    pub fn step(&mut self, real_dt_s: f64) {
        self.real_time_s += real_dt_s;
        if !self.paused {
            self.simulation_time_s += real_dt_s * self.speed_multiplier;
        }
    }

    pub fn simulation_dt(&self, real_dt_s: f64) -> f64 {
        if self.paused {
            0.0
        } else {
            real_dt_s * self.speed_multiplier
        }
    }

    pub fn pause(&mut self) {
        self.paused = true;
    }
    pub fn resume(&mut self) {
        self.paused = false;
    }
    pub fn toggle_pause(&mut self) {
        self.paused = !self.paused;
    }
    pub fn set_speed(&mut self, multiplier: f64) {
        self.speed_multiplier = multiplier;
    }

    pub fn sim_sols(&self) -> f64 {
        self.simulation_time_s / crate::SOL_S
    }
    pub fn sim_mars_years(&self) -> f64 {
        self.simulation_time_s / crate::MARS_YEAR_S
    }
}