diff options
-rw-r--r-- | src/modules/engines.rs | 13 | ||||
-rw-r--r-- | tests/tests.rs | 42 |
2 files changed, 48 insertions, 7 deletions
diff --git a/src/modules/engines.rs b/src/modules/engines.rs index ebf4e8b..9aa8297 100644 --- a/src/modules/engines.rs +++ b/src/modules/engines.rs @@ -40,14 +40,13 @@ impl Engines { self.status = Status::None; } } - match self.target_velocity.clone() { - Some(target_velocity) => { - self.acceleration += target_velocity - velocity; - if self.acceleration == Vector::default() { - self.target_velocity = None; - } + + if let Some(target_velocity) = self.target_velocity.clone() { + self.acceleration += target_velocity - velocity; + if self.acceleration == Vector::default() { + self.target_velocity = None; + self.status = Status::None; } - None => (), } } diff --git a/tests/tests.rs b/tests/tests.rs index 141cc41..ddbbaf7 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -173,4 +173,46 @@ mod test { assert!(masses.len() == 2); assert!(ship.item_count(ItemType::Iron) == 0); } + + #[test] + fn test_engines() { + let (mut ship, mut masses) = setup(); + setup_ship_target(&mut ship, &mut masses); + + let mut astroid = masses.remove("astroid").unwrap(); + astroid.velocity = Vector::new((constants::SHIP_ENGINES_ACCELERATION * 2.0, 0.0, 0.0)); + astroid.process(&mut masses); + masses.insert(String::from("astroid"), astroid); + + ship.give_received_data(ModuleType::Engines, String::from("c")); + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION); + + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION * 2.0); + + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION * 2.0); + + ship.give_received_data(ModuleType::Engines, String::from("s")); + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION); + + ship.process(&mut masses); + assert!(ship.velocity.x == 0.0); + + ship.process(&mut masses); + assert!(ship.velocity.x == 0.0); + + ship.give_received_data(ModuleType::Engines, String::from("t")); + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION * -1.0); + + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION * -1.0); + + ship.give_received_data(ModuleType::Engines, String::from("t")); + ship.process(&mut masses); + assert!(ship.velocity.x == constants::SHIP_ENGINES_ACCELERATION * -2.0); + } } |