diff --git a/src/gui/GUIApplicationWindow.cpp b/src/gui/GUIApplicationWindow.cpp index d9734fc50b5f..0c6935d4e723 100644 --- a/src/gui/GUIApplicationWindow.cpp +++ b/src/gui/GUIApplicationWindow.cpp @@ -1392,6 +1392,16 @@ GUIApplicationWindow::handleEvent_SimulationLoaded(GUIEvent* e) { myRunThread->getBreakpoints().assign(settings.getBreakpoints().begin(), settings.getBreakpoints().end()); myRunThread->getBreakpointLock().unlock(); } + if (!OptionsCont::getOptions().isDefault("breakpoints")) { + std::vector breakpoints; + for (const std::string& val : OptionsCont::getOptions().getStringVector("breakpoints")) { + breakpoints.push_back(string2time(val)); + } + std::sort(breakpoints.begin(), breakpoints.end()); + myRunThread->getBreakpointLock().lock(); + myRunThread->getBreakpoints().assign(breakpoints.begin(), breakpoints.end()); + myRunThread->getBreakpointLock().unlock(); + } myJamSounds = settings.getEventDistribution("jam"); myCollisionSounds = settings.getEventDistribution("collision"); if (settings.getJamSoundTime() > 0) { diff --git a/src/microsim/MSFrame.cpp b/src/microsim/MSFrame.cpp index 949cfcb5b3f8..216ddb26e1bd 100644 --- a/src/microsim/MSFrame.cpp +++ b/src/microsim/MSFrame.cpp @@ -458,6 +458,9 @@ MSFrame::fillOptions() { oc.doRegister("start", 'S', new Option_Bool(false)); oc.addDescription("start", "GUI Only", "Start the simulation after loading"); + oc.doRegister("breakpoints", new Option_String()); + oc.addDescription("breakpoints", "Output", "Use TIME[] as times when the simulation should halt"); + oc.doRegister("demo", 'D', new Option_Bool(false)); oc.addDescription("demo", "GUI Only", "Restart the simulation after ending (demo mode)"); @@ -627,6 +630,15 @@ MSFrame::checkOptions() { } } } + for (const std::string& val : oc.getStringVector("breakpoints")) { + try { + string2time(val); + } catch (ProcessError& e) { + WRITE_ERROR("Invalid time '" + val + "' for option 'breakpoints'. Must be a FLOAT or human-readable time"); + ok = false; + } + }; + ok &= MSDevice::checkOptions(oc); ok &= SystemFrame::checkOptions(); @@ -689,7 +701,7 @@ MSFrame::setMSGlobals(OptionsCont& oc) { } MSGlobals::gEmergencyDecelWarningThreshold = oc.getFloat("emergencydecel.warning-threshold"); - + #ifdef _DEBUG if (oc.isSet("movereminder-output")) { MSBaseVehicle::initMoveReminderOutput(oc);