import sumolib from Car import Car from carInfo import Ui_carInfo from PySide6.QtWidgets import QWidget, QLabel from PySide6.QtCore import Qt class carInfo(QWidget): def __init__(self): super(carInfo,self).__init__() self.ui = Ui_carInfo() self.ui.setupUi(self) def setVal(self,key,val): obj = self.findChild(QLabel,key) if(obj is None): return obj.setText(f"{key} : {val}") obj.update() class CarController: def __init__(self,parentMap): self.map=parentMap self.cars=[] def fromPath(self,path): self.cars=[] while(self.infoWidget.count() != 0): self.infoWidget.removeItem(0) for vehicle in sumolib.xml.parse(path,"vehicle"): route=vehicle.route[0].edges.split() wId=self.infoWidget.addItem(carInfo(), vehicle.id) self.cars.append(Car(vehicle.id,route,self.map,self,self.infoWidget.widget(wId))) def prepareRoute(self): for car in self.cars: car.prepareRoute() def getCarsOnEdge(self,edgeID): # on devrai probablement utiliser une map ici (dict en python?) mais flemme res=[] for car in self.cars: cid=car.route[car.index].getID() if(cid==edgeID): res.append(car) return res def update(self): if(self.map.net is None): return for car in self.cars: car.update(1.0/60) def draw(self,painter): for ind,car in enumerate(self.cars): selectedId = self.infoWidget.currentIndex() selectedCar = self.cars[selectedId] if(ind == selectedId): painter.setPen(Qt.green) elif(selectedCar.leader is not None and selectedCar.leader.id == car.id): painter.setPen(Qt.red) else: painter.setPen(Qt.white) car.draw(painter) def setInfoWidget(self, widget): self.infoWidget = widget