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()
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))