|  |  |  | @ -4,6 +4,8 @@ import math | 
			
		
	
		
			
				
					|  |  |  |  | import random | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from spritesheet import SquareSpriteSheet | 
			
		
	
		
			
				
					|  |  |  |  | from route import Route | 
			
		
	
		
			
				
					|  |  |  |  | from stop import Stop | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class DroneStatus(Enum): | 
			
		
	
		
			
				
					|  |  |  |  |     GROUNDED = 0 | 
			
		
	
	
		
			
				
					|  |  |  | @ -13,7 +15,7 @@ class DroneStatus(Enum): | 
			
		
	
		
			
				
					|  |  |  |  |     LANDING = 4 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |     def __init__(self, screen, pos = (0, 0)) -> None: | 
			
		
	
		
			
				
					|  |  |  |  |     def __init__(self, screen, pos = (0, 0), route=[]) -> None: | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |         # image | 
			
		
	
		
			
				
					|  |  |  |  |         self.screen = screen | 
			
		
	
	
		
			
				
					|  |  |  | @ -32,15 +34,17 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |         self.prev_index = 0 | 
			
		
	
		
			
				
					|  |  |  |  |         self.next_index = 1 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         self.route = [(400,400),(0,400),(400,0),(0,0),(400,0)] | 
			
		
	
		
			
				
					|  |  |  |  |         self.route = route | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         # status | 
			
		
	
		
			
				
					|  |  |  |  |         self.status = DroneStatus.TAKINGOFF | 
			
		
	
		
			
				
					|  |  |  |  |         self.status = DroneStatus.GROUNDED | 
			
		
	
		
			
				
					|  |  |  |  |         self.animate = False | 
			
		
	
		
			
				
					|  |  |  |  |         self.last_departure = 0 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         self.rate = 100/1000 #(units per second) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         self.status_message = "" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     def update(self): | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         current_time = pygame.time.get_ticks() | 
			
		
	
	
		
			
				
					|  |  |  | @ -52,20 +56,25 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |             self.scale = .25 | 
			
		
	
		
			
				
					|  |  |  |  |             self.animate = False | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             self.status_message = "On The Ground" | 
			
		
	
		
			
				
					|  |  |  |  |         elif(self.status == DroneStatus.TAKINGOFF): | 
			
		
	
		
			
				
					|  |  |  |  |             if(len(self.route.stops) >= 2): | 
			
		
	
		
			
				
					|  |  |  |  |                 self.scale += .001 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if(self.scale >= 1): | 
			
		
	
		
			
				
					|  |  |  |  |                     self.scale = 1 | 
			
		
	
		
			
				
					|  |  |  |  |                     self.status = DroneStatus.TURNING | 
			
		
	
		
			
				
					|  |  |  |  |                     print(self.status, self.scale) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 self.animate = True | 
			
		
	
		
			
				
					|  |  |  |  |             else: | 
			
		
	
		
			
				
					|  |  |  |  |                 self.status_message = "Cannot take off. No Route." | 
			
		
	
		
			
				
					|  |  |  |  |         elif(self.status == DroneStatus.TURNING): | 
			
		
	
		
			
				
					|  |  |  |  |             x1 = self.route[self.prev_index][0] | 
			
		
	
		
			
				
					|  |  |  |  |             y1 = self.route[self.prev_index][1] | 
			
		
	
		
			
				
					|  |  |  |  |             x1 = self.route.stops[self.prev_index].pos[0] | 
			
		
	
		
			
				
					|  |  |  |  |             y1 = self.route.stops[self.prev_index].pos[1] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             x2 = self.route[self.next_index][0] | 
			
		
	
		
			
				
					|  |  |  |  |             y2 = self.route[self.next_index][1] | 
			
		
	
		
			
				
					|  |  |  |  |             x2 = self.route.stops[self.next_index].pos[0] | 
			
		
	
		
			
				
					|  |  |  |  |             y2 = self.route.stops[self.next_index].pos[1] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             #https://replit.com/@Rabbid76/PyGame-RotateWithMouse#main.py | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -91,13 +100,15 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |  |             self.animate = True | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             self.status_message = "Turning." | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         elif(self.status == DroneStatus.INTHEAIR): | 
			
		
	
		
			
				
					|  |  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |  |             x1 = self.route[self.prev_index][0] | 
			
		
	
		
			
				
					|  |  |  |  |             y1 = self.route[self.prev_index][1] | 
			
		
	
		
			
				
					|  |  |  |  |             x1 = self.route.stops[self.prev_index].pos[0] | 
			
		
	
		
			
				
					|  |  |  |  |             y1 = self.route.stops[self.prev_index].pos[1] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             x2 = self.route[self.next_index][0] | 
			
		
	
		
			
				
					|  |  |  |  |             y2 = self.route[self.next_index][1] | 
			
		
	
		
			
				
					|  |  |  |  |             x2 = self.route.stops[self.next_index].pos[0] | 
			
		
	
		
			
				
					|  |  |  |  |             y2 = self.route.stops[self.next_index].pos[1] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             going_north = y2 >= y1 | 
			
		
	
		
			
				
					|  |  |  |  |             going_east = x2 >= x1 | 
			
		
	
	
		
			
				
					|  |  |  | @ -116,7 +127,7 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |             # if traveled the distance, ground the drone and update stops | 
			
		
	
		
			
				
					|  |  |  |  |             if(distance_traveled >= total_distance): | 
			
		
	
		
			
				
					|  |  |  |  |             # force position | 
			
		
	
		
			
				
					|  |  |  |  |                 self.pos = self.route[self.next_index] | 
			
		
	
		
			
				
					|  |  |  |  |                 self.pos = self.route.stops[self.next_index].pos | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 self.status = DroneStatus.LANDING | 
			
		
	
		
			
				
					|  |  |  |  |             else: | 
			
		
	
	
		
			
				
					|  |  |  | @ -151,6 +162,8 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |             self.scale = 1 | 
			
		
	
		
			
				
					|  |  |  |  |             self.animate = True | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             self.status_message = "In The Air." | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         elif(self.status == DroneStatus.LANDING): | 
			
		
	
		
			
				
					|  |  |  |  |             self.scale -= .001 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -158,10 +171,11 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  |                 self.scale = .25 | 
			
		
	
		
			
				
					|  |  |  |  |                 self.status = DroneStatus.TAKINGOFF | 
			
		
	
		
			
				
					|  |  |  |  |                 self.prev_index = self.next_index | 
			
		
	
		
			
				
					|  |  |  |  |                 self.next_index = self.prev_index + 1 if self.prev_index + 1 < len(self.route) else 0 | 
			
		
	
		
			
				
					|  |  |  |  |                 self.next_index = self.prev_index + 1 if self.prev_index + 1 < len(self.route.stops) else 0 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             self.animate = True | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             self.status_message = "Landing." | 
			
		
	
		
			
				
					|  |  |  |  |         if(self.animate): | 
			
		
	
		
			
				
					|  |  |  |  |             if current_time - self.last_update >= self.animation_cooldown: | 
			
		
	
		
			
				
					|  |  |  |  |                 self.frame += 1 | 
			
		
	
	
		
			
				
					|  |  |  | @ -170,3 +184,4 @@ class Drone: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         current_image = self.sheet.get_image_by_frame(self.frame, self.scale, self.angle) | 
			
		
	
		
			
				
					|  |  |  |  |         self.screen.blit(current_image, (self.pos)) | 
			
		
	
		
			
				
					|  |  |  |  | 
 |