|
|
|
@ -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): |
|
|
|
|
self.scale += .001 |
|
|
|
|
if(len(self.route.stops) >= 2): |
|
|
|
|
self.scale += .001 |
|
|
|
|
|
|
|
|
|
if(self.scale >= 1): |
|
|
|
|
self.scale = 1 |
|
|
|
|
self.status = DroneStatus.TURNING |
|
|
|
|
if(self.scale >= 1): |
|
|
|
|
self.scale = 1 |
|
|
|
|
self.status = DroneStatus.TURNING |
|
|
|
|
print(self.status, self.scale) |
|
|
|
|
|
|
|
|
|
self.animate = True |
|
|
|
|
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)) |
|
|
|
|
|