diff options
Diffstat (limited to 'src/fleet.rs')
| -rw-r--r-- | src/fleet.rs | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/src/fleet.rs b/src/fleet.rs index 2d7dad5..f8183d4 100644 --- a/src/fleet.rs +++ b/src/fleet.rs @@ -12,7 +12,6 @@ use crate::solar_system::body::BodyId; use crate::solar_system::orbit::StaticOrbiter; use crate::solar_system::{SystemId, GRAVITATIONAL_CONSTANT, Kilometers, SolarSystem, orbit::StaticOrbit}; use crate::timeman::{HOUR, Second}; -use crate::ui::fleet_window::NewFleet; pub type FleetId = usize; @@ -31,7 +30,7 @@ pub struct Fleet angular_velocity: cgmath::Vector2<f32>, angular_acceleration: cgmath::Vector2<f32>, - system: Option<SystemId>, + system: SystemId, baked_orbit: Option<(f64, StaticOrbit)>, } @@ -65,7 +64,8 @@ impl Fleet pub fn new( id: FleetId, - name: String) + name: String, + system: SystemId) -> Self { Self { @@ -83,7 +83,7 @@ impl Fleet angular_velocity: cgmath::vec2(0.0, 0.0), angular_acceleration: cgmath::vec2(0.0, 0.0), - system: None, + system: system, baked_orbit: None } } @@ -96,7 +96,7 @@ impl Fleet { &self.offset } pub fn heading(&self) -> &cgmath::Vector2<cgmath::Rad<f32>> { &self.heading } - pub fn system(&self) -> Option<SystemId> + pub fn system(&self) -> SystemId { self.system } pub fn make_orbit( @@ -109,7 +109,7 @@ impl Fleet let sgp = body.mass() * GRAVITATIONAL_CONSTANT; self.baked_orbit = Some((sgp, StaticOrbit::new_circular(body, radius))); - self.system = Some(star_system.id()); + self.system = star_system.id(); } fn tick( @@ -118,7 +118,7 @@ impl Fleet time: &Range<Second>) { if let Some((_sgp, orbit)) = &self.baked_orbit { - let solar_system = &star_systems[self.system().unwrap()]; + let solar_system = &star_systems[self.system]; let body = solar_system.body(orbit.parent()); self.origin = body.absolute_position(solar_system, time.end); @@ -159,7 +159,7 @@ impl FleetsManager -> Vec<usize> { self.fleets.values().filter_map(|v| { - if v.system().is_some_and(|id| { id == system }) { + if v.system() == system { Some(v.id()) }else { None @@ -172,6 +172,16 @@ impl FleetsManager pub fn fleet(&self, id: FleetId) -> Option<&Fleet> { self.fleets.get(&id) } + pub fn new_fleet(&mut self, + name: String, + system: SystemId) + -> FleetId + { + let id = self.reserve_new_id(); + self.fleets.insert(id, Fleet::new(id, name, system)); + id + } + fn subtick( &mut self, star_systems: &[SolarSystem], @@ -221,25 +231,6 @@ impl FleetsManager } } // impl FleetsManager -impl GameState -{ - pub fn new_fleet_from_ui( - &mut self, - info: NewFleet) - -> Result<FleetId, Box<dyn Error>> - { - let star_system = &self.solar_systems[info.system]; - - let fleet_id = self.fleets.reserve_new_id(); - let mut fleet = Fleet::new(fleet_id, info.name); - fleet.make_orbit(star_system, info.orbiting, info.sma); - - self.fleets.fleets.insert(fleet_id, fleet); - - Ok(fleet_id) - } -} - impl SolarSystem { pub fn fleets( |
