summaryrefslogtreecommitdiffstats
path: root/src/solar_system.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solar_system.rs')
-rw-r--r--src/solar_system.rs54
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); });
+ }
+ }*/
}