From c4c1e868ff9dc7892c1786e45ce7fd475f0f7812 Mon Sep 17 00:00:00 2001 From: namdre Date: Mon, 17 Dec 2018 15:05:57 +0100 Subject: [PATCH] addendum refs #4865, fix #4931 --- src/microsim/pedestrians/MSPModel_Striping.cpp | 11 ++++++----- src/microsim/pedestrians/MSPModel_Striping.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/microsim/pedestrians/MSPModel_Striping.cpp b/src/microsim/pedestrians/MSPModel_Striping.cpp index 847e7b795e49..7d6ffb078436 100644 --- a/src/microsim/pedestrians/MSPModel_Striping.cpp +++ b/src/microsim/pedestrians/MSPModel_Striping.cpp @@ -710,7 +710,9 @@ MSPModel_Striping::getNextLaneObstacles(NextLanesObstacles& nextLanesObs, const } if (nextLane->getEdge().isCrossing()) { // add vehicle obstacles - addCrossingVehs(nextLane, stripes, offset, nextDir, obs); + const MSLink* crossingEntryLink = nextLane->getIncomingLanes().front().viaLink; + const bool prio = crossingEntryLink->havePriority() || crossingEntryLink->getTLLogic() != nullptr; + addCrossingVehs(nextLane, stripes, offset, nextDir, obs, prio); } if (nextLane->getVehicleNumberWithPartials() > 0) { Obstacles vehObs = getVehicleObstacles(nextLane, nextDir); @@ -874,7 +876,8 @@ MSPModel_Striping::moveInDirectionOnLane(Pedestrians& pedestrians, const MSLane* Obstacles crossingVehs(stripes, Obstacle(dir)); bool hasCrossingVehObs = false; if (lane->getEdge().isCrossing()) { - hasCrossingVehObs = addCrossingVehs(lane, stripes, 0, dir, crossingVehs); + // assume that vehicles will brake when already on the crossing + hasCrossingVehObs = addCrossingVehs(lane, stripes, 0, dir, crossingVehs, true); } for (int ii = 0; ii < (int)pedestrians.size(); ++ii) { @@ -1006,11 +1009,9 @@ MSPModel_Striping::moveInDirectionOnLane(Pedestrians& pedestrians, const MSLane* } bool -MSPModel_Striping::addCrossingVehs(const MSLane* crossing, int stripes, double lateral_offset, int dir, Obstacles& obs) { +MSPModel_Striping::addCrossingVehs(const MSLane* crossing, int stripes, double lateral_offset, int dir, Obstacles& obs, bool prio) { bool hasCrossingVehObs = false; const MSLink* crossingExitLink = crossing->getLinkCont().front(); - const MSLink* crossingEntryLink = crossing->getIncomingLanes().front().viaLink; - const bool prio = crossingEntryLink->havePriority() || crossingEntryLink->getTLLogic() != nullptr; gDebugFlag1 = DEBUGCOND2(crossing); const MSLink::LinkLeaders linkLeaders = crossingExitLink->getLeaderInfo(nullptr, crossing->getLength()); gDebugFlag1 = false; diff --git a/src/microsim/pedestrians/MSPModel_Striping.h b/src/microsim/pedestrians/MSPModel_Striping.h index a8e2524192d5..5e636592693f 100644 --- a/src/microsim/pedestrians/MSPModel_Striping.h +++ b/src/microsim/pedestrians/MSPModel_Striping.h @@ -448,7 +448,7 @@ class MSPModel_Striping : public MSPModel { static int getStripeOffset(int origStripes, int destStripes, bool addRemainder); ///@brief add vehicles driving across - static bool addCrossingVehs(const MSLane* crossing, int stripes, double lateral_offset, int dir, Obstacles& crossingVehs); + static bool addCrossingVehs(const MSLane* crossing, int stripes, double lateral_offset, int dir, Obstacles& crossingVehs, bool prio); ///@brief retrieve vehicle obstacles on the given lane static Obstacles getVehicleObstacles(const MSLane* lane, int dir, PState* ped = 0);