summaryrefslogtreecommitdiffstats
path: root/src/fleet.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/fleet.rs')
-rw-r--r--src/fleet.rs45
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(