import random from mesa.visualization.ModularVisualization import ModularServer from mesa.visualization.modules import CanvasGrid from ForkliftAgent import ForkliftAgent from GameModel import GameModel from PatchAgent import PatchAgent from PatchType import PatchType from data.enum.Direction import Direction from util.PathDefinitions import GridWithWeights from visualization.DisplayAttributeElement import DisplayAttributeElement colors = [ 'blue', 'cyan', 'orange', 'yellow', 'magenta', 'purple', '#103d3e', '#9fc86c', '#b4c2ed', '#31767d', '#31a5fa', '#ba96e0', '#fef3e4', '#6237ac', '#f9cacd', '#1e8123' ] def agent_portrayal(agent): if isinstance(agent, ForkliftAgent): shape = "" if agent.current_rotation == Direction.top: shape = "img/image_top.png" elif agent.current_rotation == Direction.right: shape = "img/image_right.png" elif agent.current_rotation == Direction.down: shape = "img/image_down.png" elif agent.current_rotation == Direction.left: shape = "img/image_left.png" portrayal = {"Shape": shape, "scale": 1.0, "Layer": 0} if isinstance(agent, PatchAgent): color = colors[0] if agent.patch_type == PatchType.wall: portrayal = {"Shape": "img/brick.webp", "scale": 1.0, "Layer": 0} elif agent.patch_type == PatchType.dropOff: portrayal = {"Shape": "img/truck.png", "scale": 1.0, "Layer": 0} elif agent.patch_type == PatchType.pickUp: portrayal = {"Shape": "img/okB00mer.png", "scale": 1.0, "Layer": 0} elif agent.patch_type == PatchType.diffTerrain: portrayal = {"Shape": "img/puddle.png", "scale": 1.0, "Layer": 0} else: color = colors[random.randrange(13) + 3] portrayal = {"Shape": "rect", "Filled": "true", "Layer": 0, "Color": color, "w": 1, "h": 1} return portrayal if __name__ == '__main__': base = 512 gridWidth = 10 gridHeight = 10 scale = base / gridWidth diagram = GridWithWeights(gridWidth, gridHeight) diagram.walls = [(6, 5), (6, 6), (6, 7), (6, 8), (2, 3), (2, 4), (3, 4), (4, 4), (6, 4)] diagram.puddles = [(2, 2), (2, 5), (2, 6), (5, 4)] diagram.packingStations = [(PatchType.packingA, (4, 8)), (PatchType.packingB, (4, 6)), (PatchType.packingC, (4, 2))] grid = CanvasGrid(agent_portrayal, gridWidth, gridHeight, scale * gridWidth, scale * gridHeight) readyText = DisplayAttributeElement("phase") provided_itesm = DisplayAttributeElement("provided_items") recognised_items = DisplayAttributeElement("recognised_items") ordersText = DisplayAttributeElement("orderList") server = ModularServer(GameModel, [grid, readyText, provided_itesm, recognised_items], "Automatyczny Wózek Widłowy", {"width": gridHeight, "height": gridWidth, "graph": diagram}, ) server.port = 8888 server.launch()