summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/engines.rs13
-rw-r--r--tests/tests.rs42
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);
+ }
}