diff options
Diffstat (limited to 'src/solar_system.rs')
| -rw-r--r-- | src/solar_system.rs | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/solar_system.rs b/src/solar_system.rs index 913ca00..94508fd 100644 --- a/src/solar_system.rs +++ b/src/solar_system.rs @@ -1,9 +1,7 @@ pub mod body; -pub mod fleet; pub mod orbit; use self::body::*; -use self::fleet::*; use self::orbit::*; use serde::{Deserialize}; @@ -11,7 +9,7 @@ use crate::known_stars::*; use crate::timeman::Second; use std::error::Error; -const GRAVITATIONAL_CONSTANT: f64 = 6.67408e-20; +pub const GRAVITATIONAL_CONSTANT: f64 = 6.67408e-20; pub type Kilograms = f64; pub type Kilometers = f64; @@ -38,18 +36,12 @@ pub struct CSVOrbitalBody semi_major_axis: Kilometers, } -pub trait HasMass -{ - fn mass() -> Kilograms; -} - pub struct SolarSystem { id: SystemId, name: String, bodies: Vec<OrbitalBody>, - fleets: Vec<Fleet> } impl SolarSystem @@ -74,7 +66,7 @@ impl SolarSystem } None => {} } - if record.radius == 0.0 { continue; } + //if record.radius == 0.0 { continue; } println!("New body: {:?}", record); bodies.push(OrbitalBody::new_from_record(bodies.len(), record)); @@ -84,7 +76,6 @@ impl SolarSystem id: id, name: bodies[0].name().clone(), bodies: bodies, - fleets: vec![] }) } @@ -113,25 +104,34 @@ impl SolarSystem pub fn body_position( &self, - body: &OrbitalBody) + body: &OrbitalBody, + time: Second) -> cgmath::Vector3<Kilometers> { - body.absolute_position(self) + body.absolute_position(self, time) } - pub fn fleets(&self) - -> &[Fleet] - { self.fleets.as_slice() } - - pub fn tick( - &mut self, - time: Second) + /*fn tick_tickables<T: Tickable>( + to_tick: &mut [T], + time_then: Second, + time_now: Second) { - self.bodies.iter_mut().for_each(|body| { - body.tick(time); - }); - self.fleets.iter_mut().for_each(|fleet| { - fleet.tick(time); - }); - } + let tick_interval = T::subtick_interval(); + + let time_then_offset = time_then % tick_interval; + let time_now_offset = time_now % tick_interval; + + let tick_start = time_then + tick_interval - time_then_offset; + let tick_end = time_now - time_now_offset; + + let num_ticks = (tick_end - tick_start) / tick_interval; + for tick_i in 0..num_ticks+1 { + let tick_second = tick_start + tick_i * tick_interval; + to_tick.iter_mut().for_each(|v| { v.tick(tick_second); }); + } + + if !T::tick_only_on_subtick() && tick_end != time_now { + to_tick.iter_mut().for_each(|v| { v.tick(time_now); }); + } + }*/ } |
