Skip to content

Commit

Permalink
fix #16208
Browse files Browse the repository at this point in the history
  • Loading branch information
namdre committed Feb 21, 2025
1 parent 556d682 commit c122f3e
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/microsim/MSLane.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -864,7 +864,8 @@ MSLane::isInsertionSuccess(MSVehicle* aVehicle,
double dist = cfModel.brakeGap(speed) + aVehicle->getVehicleType().getMinGap();
const bool isRail = aVehicle->isRail();
if (isRail && insertionChecks != (int)InsertionCheck::NONE
&& aVehicle->getParameter().departProcedure != DepartDefinition::SPLIT) {
&& aVehicle->getParameter().departProcedure != DepartDefinition::SPLIT
&& MSRailSignalControl::isSignalized(aVehicle->getVClass())) {
const MSDriveWay* dw = MSDriveWay::getDepartureDriveway(aVehicle);
MSEdgeVector occupied;
if (dw->foeDriveWayOccupied(false, aVehicle, occupied)) {
Expand Down
2 changes: 1 addition & 1 deletion src/microsim/traffic_lights/MSRailSignal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ MSRailSignal::MSRailSignal(MSTLLogicControl& tlcontrol,
myDriveWayIndex(0) {
myDefaultCycleTime = DELTA_T;
myMovingBlock = OptionsCont::getOptions().getBool("railsignal-moving-block");
MSRailSignalControl::getInstance().addSignal(this);
mySwitchCommand->deschedule(this);
}

Expand All @@ -105,6 +104,7 @@ MSRailSignal::init(NLDetectorBuilder&) {
updateCurrentPhase();
setTrafficLightSignals(MSNet::getInstance()->getCurrentTimeStep());
myNumLinks = (int)myLinks.size();
MSRailSignalControl::getInstance().addSignal(this);
}


Expand Down
6 changes: 6 additions & 0 deletions src/microsim/traffic_lights/MSRailSignalControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
// static value definitions
// ===========================================================================
MSRailSignalControl* MSRailSignalControl::myInstance(nullptr);
SVCPermissions MSRailSignalControl::mySignalizedClasses(SVC_RAIL | SVC_RAIL_FAST | SVC_RAIL_ELECTRIC | SVC_RAIL_URBAN);

// ===========================================================================
// method definitions
Expand Down Expand Up @@ -95,6 +96,11 @@ MSRailSignalControl::vehicleStateChanged(const SUMOVehicle* const vehicle, MSNet
void
MSRailSignalControl::addSignal(MSRailSignal* signal) {
mySignals.push_back(signal);
for (const auto& links : signal->getLinks()) {
for (const MSLink* link : links) {
mySignalizedClasses |= link->getPermissions();
}
}
}


Expand Down
8 changes: 8 additions & 0 deletions src/microsim/traffic_lights/MSRailSignalControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ class MSRailSignalControl : public MSNet::VehicleStateListener {
void updateSignals(SUMOTime t);


static bool isSignalized(SUMOVehicleClass svc) {
return (mySignalizedClasses & svc) == svc;
}


protected:

void findDeadlockFoes(const MSDriveWay* dw, const std::vector<const MSRailSignal*>& others, std::vector<const MSDriveWay*> deadlockFoes);
Expand Down Expand Up @@ -132,6 +137,9 @@ class MSRailSignalControl : public MSNet::VehicleStateListener {
std::map<std::pair<int, int>, bool> myDriveWayCompatibility;
std::set<MSRailSignal*, ComparatorNumericalIdLess> myActiveSignals;

/// @brief signalized classes
static SVCPermissions mySignalizedClasses;

static MSRailSignalControl* myInstance;


Expand Down

0 comments on commit c122f3e

Please sign in to comment.