priorités (à peu prés) respectées
This commit is contained in:
parent
e1c7816e49
commit
c1f77a01e4
38
Car.py
38
Car.py
@ -1,5 +1,5 @@
|
|||||||
import sumolib
|
import sumolib
|
||||||
from math import dist, ceil, sqrt
|
from math import dist, ceil, sqrt, log
|
||||||
from random import randint
|
from random import randint
|
||||||
from PySide6.QtGui import QPainter
|
from PySide6.QtGui import QPainter
|
||||||
from PySide6.QtCore import QPointF, Signal, QObject
|
from PySide6.QtCore import QPointF, Signal, QObject
|
||||||
@ -99,6 +99,7 @@ class Car():
|
|||||||
def getLeader(self, maxDist):
|
def getLeader(self, maxDist):
|
||||||
shapeInd = self.laneInd
|
shapeInd = self.laneInd
|
||||||
edgeInd = self.index
|
edgeInd = self.index
|
||||||
|
prevInd = edgeInd
|
||||||
laneShape = self.laneShape
|
laneShape = self.laneShape
|
||||||
laneId = self.laneId
|
laneId = self.laneId
|
||||||
l = 0
|
l = 0
|
||||||
@ -126,6 +127,12 @@ class Car():
|
|||||||
if(shapeInd>=len(laneShape)-1):
|
if(shapeInd>=len(laneShape)-1):
|
||||||
shapeInd = 0
|
shapeInd = 0
|
||||||
edgeInd+=1
|
edgeInd+=1
|
||||||
|
carComing = self.getLeaderAtIntersection(prevInd,edgeInd)
|
||||||
|
if(carComing is not None):
|
||||||
|
self.leaderDist = l
|
||||||
|
return carComing
|
||||||
|
if(not self.route[edgeInd].isSpecial()):
|
||||||
|
prevInd = edgeInd
|
||||||
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
carsHere = self.controller.getCarsOnLane(self.route[edgeInd].getID(), laneId)
|
||||||
carsHere = list(filter(lambda c: c.id != self.id, carsHere)) # me demande pas pourquoi mais si on le convertit pas en liste ici le filter original est modifié
|
carsHere = list(filter(lambda c: c.id != self.id, carsHere)) # me demande pas pourquoi mais si on le convertit pas en liste ici le filter original est modifié
|
||||||
if(edgeInd>=len(self.route)-1):
|
if(edgeInd>=len(self.route)-1):
|
||||||
@ -145,6 +152,35 @@ class Car():
|
|||||||
return
|
return
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def getLeaderAtIntersection(self, prevInd, edgeInd):
|
||||||
|
if(self.route[edgeInd].isSpecial()):
|
||||||
|
return None
|
||||||
|
inter = self.route[edgeInd-1].getFromNode()
|
||||||
|
connection = self.route[prevInd].getConnections(self.route[edgeInd])[0]
|
||||||
|
linkInd = inter.getLinkIndex(connection)
|
||||||
|
if(linkInd == -1): # Ca devrait pas arriver, mais de toute évidence ça arrive
|
||||||
|
return;
|
||||||
|
resp = inter._prohibits[linkInd] # Si je me souvient bien les variables précédées d'un _ doivent pas être touchées?
|
||||||
|
connRaw = inter.getConnections()
|
||||||
|
conn = [0] * len(resp)
|
||||||
|
for c in connRaw:
|
||||||
|
ind = inter.getLinkIndex(c)
|
||||||
|
if(ind == -1):
|
||||||
|
continue
|
||||||
|
conn[ind] = c
|
||||||
|
cars = None
|
||||||
|
for i,f in enumerate(reversed(resp)):
|
||||||
|
if(f == '0'):
|
||||||
|
continue
|
||||||
|
edge = conn[i].getFrom()
|
||||||
|
cars = self.controller.getCarsOnLane(edge.getID(), conn[i].getFromLane().getIndex())
|
||||||
|
if(cars is None):
|
||||||
|
return
|
||||||
|
cars = list(cars)
|
||||||
|
if(len(cars) == 0):
|
||||||
|
return None
|
||||||
|
return cars[0] # TODO: récuperer la voiture la plus proche au lieu d'un au hasard
|
||||||
|
|
||||||
def draw(self,painter):
|
def draw(self,painter):
|
||||||
pt = QPointF(*self.pos)
|
pt = QPointF(*self.pos)
|
||||||
painter.drawEllipse(pt,self.size,self.size)
|
painter.drawEllipse(pt,self.size,self.size)
|
||||||
|
@ -64,7 +64,7 @@ class mainLoop(QObject):
|
|||||||
self.controller.update()
|
self.controller.update()
|
||||||
except:
|
except:
|
||||||
(type, value, traceback) = sys.exc_info()
|
(type, value, traceback) = sys.exc_info()
|
||||||
print(type, value, traceback)
|
print(type, value, traceback.print_tb())
|
||||||
|
|
||||||
@threadSafe
|
@threadSafe
|
||||||
def openNetwork(self, filename):
|
def openNetwork(self, filename):
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<!-- generated on 2022-03-13 21:05:20 by Eclipse SUMO netedit Version 1.12.0
|
<!-- generated on 2022-03-14 22:49:39 by Eclipse SUMO netedit Version 1.12.0
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
|
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
|
||||||
|
<vehicle id="v_0" depart="0.00">
|
||||||
|
<route edges="E3 E7 E6 E9 E60"/>
|
||||||
|
</vehicle>
|
||||||
<vehicle id="v_1" depart="0.00">
|
<vehicle id="v_1" depart="0.00">
|
||||||
<route edges="-E6 E8 E7 E6 E50"/>
|
<route edges="-E6 E8 E7 E6 E50"/>
|
||||||
</vehicle>
|
</vehicle>
|
||||||
<vehicle id="v_0" depart="1.00">
|
|
||||||
<route edges="E3 E7 E6 E9 E60"/>
|
|
||||||
</vehicle>
|
|
||||||
</routes>
|
</routes>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user