earths 0.0.4

High-fidelity Earth simulation engine — orbit, atmosphere, geology, hydrology, biosphere, terrain, lighting, rendering, satellites, and temporal systems with full scientific coupling
Documentation
use super::calendar::SECONDSPERDAY;
pub struct TimeScale {
    pub simulationtimes: f64,
    pub realtimes: f64,
    pub speedmultiplier: f64,
    pub paused: bool,
}
impl TimeScale {
    pub fn new(speedmultiplier: f64) -> Self {
        Self {
            simulationtimes: 0.0,
            realtimes: 0.0,
            speedmultiplier,
            paused: false,
        }
    }
    pub fn realtime() -> Self {
        Self::new(1.0)
    }
    pub fn fastforward(factor: f64) -> Self {
        Self::new(factor)
    }
    pub fn slowmotion(factor: f64) -> Self {
        Self::new(1.0 / factor)
    }
    pub fn step(&mut self, realdts: f64) {
        self.realtimes += realdts;
        if !self.paused {
            self.simulationtimes += realdts * self.speedmultiplier;
        }
    }
    pub fn pause(&mut self) {
        self.paused = true;
    }
    pub fn resume(&mut self) {
        self.paused = false;
    }
    pub fn togglepause(&mut self) {
        self.paused = !self.paused;
    }
    pub fn setspeed(&mut self, multiplier: f64) {
        self.speedmultiplier = multiplier;
    }
    pub fn simulationdt(&self, realdts: f64) -> f64 {
        if self.paused {
            0.0
        } else {
            realdts * self.speedmultiplier
        }
    }
    pub fn simhours(&self) -> f64 {
        self.simulationtimes / 3600.0
    }
    pub fn simdays(&self) -> f64 {
        self.simulationtimes / SECONDSPERDAY
    }
    pub fn simyears(&self) -> f64 {
        self.simulationtimes / (SECONDSPERDAY * 365.2422)
    }
}