Exemplo n.º 1
0
 def _dampen(self, previous_conf):
     '''
     Prevent the aeroplane to "overshoot" its target configuration.
     '''
     pl = self.plane
     p_alt = previous_conf['altitude']
     p_head = previous_conf['heading']
     p_speed = previous_conf['speed']
     # Heading dampener (act on velocity vector)
     t_head = self.target_conf.heading
     if U.heading_in_between((p_head, pl.heading), t_head):
         mag = abs(Vector2(*pl.velocity.xy))
         theta = radians(90-t_head)
         pl.velocity.x = cos(theta)*mag
         pl.velocity.y = sin(theta)*mag
         self.target_conf.heading = pl.heading  #Fixes decimal approx.
     # Speed dampener (act on velocity vector)
     t_speed = self.target_conf.speed
     if U.in_between((p_speed, pl.speed), t_speed) and pl.fuel:
         mag = t_speed
         # this is ground speed, so we want to normalise that without
         # affecting the z component...
         saved_z = pl.velocity.z
         pl.velocity = Vector3(*pl.velocity.xy).normalized() * t_speed
         pl.velocity.z = saved_z
         self.target_conf.speed = pl.speed  #Fixes decimal approx.
     # Update onboard instruments, as the following dampener will modify
     # the data they would access
     pl.update_instruments()
     # Altitude dampener (act on position vector)
     t_alt = self.target_conf.altitude
     if U.in_between((p_alt, pl.altitude), t_alt) and pl.fuel:
         pl.position.z = t_alt
         pl.velocity.z = 0
     # Actions to be performed if all orders have been executed
     if self.target_conf.is_reached() and not self.status['procedure']:
         pl.flags.busy = False
         self.order_being_processed = ''
         self._reset_status()
Exemplo n.º 2
0
 def testInBetween(self):
     '''
     in_between - number comprised between two?
     '''
     # Positive range
     self.assertTrue(U.in_between((0, 10), 5))
     self.assertTrue(U.in_between((10, 0), 5))
     self.assertFalse(U.in_between((0, 10), 15))
     self.assertFalse(U.in_between((10, 0), 15))
     # Negative range
     self.assertTrue(U.in_between((0, -10), -5))
     self.assertTrue(U.in_between((-10, 0), -5))
     self.assertFalse(U.in_between((0, -10), -15))
     self.assertFalse(U.in_between((-10, 0), -15))
     # Spanning range
     self.assertTrue(U.in_between((10, -10), 5))
     self.assertTrue(U.in_between((-10, 10), 5))
     self.assertTrue(U.in_between((10, -10), -5))
     self.assertTrue(U.in_between((-10, 10), -5))
     self.assertFalse(U.in_between((10, -10), 15))
     self.assertFalse(U.in_between((-10, 10), 15))
     self.assertFalse(U.in_between((10, -10), -15))
     self.assertFalse(U.in_between((-10, 10), -15))
     # Edges
     self.assertTrue(U.in_between((-10, 10), 10))
     self.assertTrue(U.in_between((-10, 10), -10))
     # Punctiform
     self.assertTrue(U.in_between((10, 10), 10))