import time from Empty import Empty from Finding_fields import Finding_fields from Moving_truck import Moving_truck from Package import Package from Package_types import Package_types from Packages_spawner import Packages_spawner from Shelf import Shelf import pygame import random from Grid import Grid from Truck import Truck from Global_variables import Global_variables as G_var from pygame.constants import * from Astar import Pathfinding, State class Environment: def __init__(self, window): self.window = window self.grid = Grid(window) self.initialize_eviroment_2d() self.add_shelfs_to_enviroment_2d() # TEST CREATE PACKAGE self.package_spawner = Packages_spawner(window,self.enviroment_2d) self.package_spawner.spawn_package() new_truck = Truck(window, 14, 7) self.enviroment_2d[14][7] = new_truck self.truck = new_truck self.moving_truck = Moving_truck( self.window, self.enviroment_2d, self.truck, self.package_spawner) self.astar = Pathfinding(self.enviroment_2d) self.finding_fields = Finding_fields(self.enviroment_2d) def draw_all_elements(self): for row in self.enviroment_2d: for field in row: field.draw() self.grid.draw_grid() # self.astar.draw_path(self.window) pygame.display.flip() def update_all_elements(self,event): self.use_astar() # wywyoływanie za każdym razem astar jest bardzo zasobożerne. Lepiej raz na przejście self.update_truck() time.sleep(0.5) def use_astar(self): start_state = State(1,self.truck.x,self.truck.y) # sprawić aby paczka i shelf były wyszukiwane raz if self.truck.has_package: end_position = self.finding_fields.find_closest_shelf(self.truck,self.truck.package_type) else: end_position = self.finding_fields.find_package() end_state = State(1,end_position.x, end_position.y) self.astar.find_path(start_state,end_state) def update_truck(self): next_field_to_move = self.astar.path[0].state next_field_x = next_field_to_move.x - self.truck.x next_field_y = next_field_to_move.y - self.truck.y self.moving_truck.move(next_field_x,next_field_y) def gen_shelf_type(self): shelve_types = list(Package_types) while True: yield random.choice(shelve_types) def initialize_eviroment_2d(self): self.enviroment_2d = [[ Empty(self.window, j, i) for i in range(G_var().DIMENSION_Y)] for j in range(G_var().DIMENSION_X) ] def add_shelfs_to_enviroment_2d(self): shelf_2_offset = 9 avaiable_types = self.gen_shelf_type() for x in range(2, 22, 3): type_of_new_shelf_1 = next(avaiable_types) type_of_new_shelf_2 = next(avaiable_types) for y in range(0, 6): self.enviroment_2d[x][y] = Shelf( self.window, x, y, type_of_new_shelf_1 ) self.enviroment_2d[x][y + shelf_2_offset] = Shelf( self.window, x, (y + shelf_2_offset), type_of_new_shelf_2 )