diff --git a/Driver.cpp b/Driver.cpp index 7da14c41..b36230e5 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -1029,8 +1029,11 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN if (TrainParams.StationIndex < TrainParams.StationCount) { // jeśli są dalsze stacje, czekamy do godziny odjazdu - if (TrainParams.IsTimeToGo(simulation::Time.data().wHour, simulation::Time.data().wMinute + simulation::Time.data().wSecond*0.0167 )) { + if ( ( true == IsCargoTrain ) + || ( true == TrainParams.IsMaintenance() ) + || ( TrainParams.IsTimeToGo( simulation::Time.data().wHour, simulation::Time.data().wMinute + simulation::Time.data().wSecond*0.0167 ) ) ) { // z dalszą akcją czekamy do godziny odjazdu + // cargo trains and passenger trains at maintenance stop don't need to wait IsAtPassengerStop = false; // przy jakim dystansie (stanie licznika) ma przesunąć na następny postój fLastStopExpDist = mvOccupied->DistCounter + 0.050 + 0.001 * fLength; diff --git a/Train.cpp b/Train.cpp index ab798566..03f90e89 100644 --- a/Train.cpp +++ b/Train.cpp @@ -8363,6 +8363,8 @@ void TTrain::set_cab_controls( int const Cab ) { 1.f : 0.f ); } + // radio + ggRadioVolumeSelector.PutValue( Global.RadioVolume ); // we reset all indicators, as they're set during the update pass // TODO: when cleaning up break setting indicator state into a separate function, so we can reuse it diff --git a/driverkeyboardinput.cpp b/driverkeyboardinput.cpp index 450c7793..f13a2f31 100644 --- a/driverkeyboardinput.cpp +++ b/driverkeyboardinput.cpp @@ -138,6 +138,8 @@ driverkeyboard_input::default_bindings() { { user_command::radiostopsend, GLFW_KEY_PAUSE | keymodifier::shift | keymodifier::control }, { user_command::radiostoptest, GLFW_KEY_R | keymodifier::shift | keymodifier::control }, { user_command::radiocall3send, GLFW_KEY_BACKSPACE }, + // radiovolumeincrease, + // radiovolumedecrease, { user_command::cabchangeforward, GLFW_KEY_HOME }, { user_command::cabchangebackward, GLFW_KEY_END }, // viewturn, diff --git a/mtable.cpp b/mtable.cpp index b1749f87..c0fccfdb 100644 --- a/mtable.cpp +++ b/mtable.cpp @@ -50,6 +50,13 @@ bool TTrainParameters::IsStop() const return true; // na ostatnim się zatrzymać zawsze } +bool TTrainParameters::IsMaintenance() const { + if( ( StationIndex < StationCount ) ) + return TimeTable[ StationIndex ].is_maintenance; + else + return false; +} + bool TTrainParameters::UpdateMTable( scenario_time const &Time, std::string const &NewName ) { return UpdateMTable( Time.data().wHour, Time.data().wMinute + Time.data().wSecond * 0.0167, NewName ); @@ -399,6 +406,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax) || ( s == "2" ) || fin.bad() ) ) { record->StationWare += s; + record->is_maintenance = ( s.find( "pt" ) != std::string::npos ); fin >> s; } record->TrackNo = atoi(s.c_str()); diff --git a/mtable.h b/mtable.h index 8a95d074..1c13772e 100644 --- a/mtable.h +++ b/mtable.h @@ -24,27 +24,19 @@ static char const *hrsd = "."; struct TMTableLine { - float km; // kilometraz linii - float vmax; // predkosc rozkladowa przed przystankiem + float km{ 0.f }; // kilometraz linii + float vmax{ -1.f }; // predkosc rozkladowa przed przystankiem // StationName:string[32]; //nazwa stacji ('_' zamiast spacji) // StationWare:string[32]; //typ i wyposazenie stacji, oddz. przecinkami} - std::string StationName; // nazwa stacji ('_' zamiast spacji) + std::string StationName{ "nowhere" }; // nazwa stacji ('_' zamiast spacji) std::string StationWare; // typ i wyposazenie stacji, oddz. przecinkami} - int TrackNo; // ilosc torow szlakowych - int Ah; - float Am; // godz. i min. przyjazdu, -1 gdy bez postoju - int Dh; - float Dm; // godz. i min. odjazdu - float tm; // czas jazdy do tej stacji w min. (z kolumny) - TMTableLine() - { - km = 0; - vmax = -1; - StationName = "nowhere", StationWare = ""; - TrackNo = 1; - Ah = Am = Dh = Dm = -1; - tm = 0; - } + int TrackNo{ 1 }; // ilosc torow szlakowych + int Ah{ -1 }; + float Am{ -1.f }; // godz. i min. przyjazdu, -1 gdy bez postoju + int Dh{ -1 }; + float Dm{ -1.f }; // godz. i min. odjazdu + float tm{ 0.f }; // czas jazdy do tej stacji w min. (z kolumny) + bool is_maintenance{ false }; }; typedef TMTableLine TMTable[MaxTTableSize + 1]; @@ -73,6 +65,7 @@ class TTrainParameters double WatchMTable(double DistCounter); std::string NextStop() const; bool IsStop() const; + bool IsMaintenance() const; bool IsTimeToGo(double hh, double mm); bool UpdateMTable(double hh, double mm, std::string const &NewName); bool UpdateMTable( scenario_time const &Time, std::string const &NewName );