from typing import Tuple from mesa import Agent from data.Direction import Direction class ForkliftAgent(Agent): def __init__(self, unique_id, model): super().__init__(unique_id, model) self.movement_queue = [Tuple[int, int]] self.current_position = Tuple[int, int] self.current_rotation = Direction.right print("Created forklift Agent with ID: {}".format(unique_id)) def assign_new_movement_task(self, movement_list): self.movement_queue = [] for m in movement_list: self.movement_queue.append(m) print("Assigned new movement queue to forklift agent") def get_proper_rotation(self, next_pos: Tuple[int, int]) -> Direction: if next_pos[0] < self.current_position[0]: return Direction.left elif next_pos[0] > self.current_position[0]: return Direction.right elif next_pos[1] > self.current_position[1]: return Direction.top elif next_pos[1] < self.current_position[1]: return Direction.down elif next_pos == self.current_position: return self.current_rotation def move(self): if len(self.movement_queue) > 0: next_pos = self.movement_queue.pop(0) dir = self.get_proper_rotation(next_pos) if dir == self.current_rotation: print("move {} --> {}".format(self.current_position, next_pos)) self.current_position = next_pos else: print("rotate {} --> {}".format(self.current_rotation, dir)) self.current_rotation = dir self.movement_queue.insert(0, next_pos) def step(self) -> None: print("forklift step") self.move()