16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 12:49:18 +02:00

Merge branch 'tmj-dev' into milek-dev

This commit is contained in:
milek7
2018-04-21 14:44:43 +02:00
4 changed files with 107 additions and 101 deletions

View File

@@ -814,8 +814,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
{ {
// porównuje do następnej stacji, więc trzeba przewinąć do poprzedniej // porównuje do następnej stacji, więc trzeba przewinąć do poprzedniej
// nastepnie ustawić następną na aktualną tak żeby prawidłowo ją obsłużył w następnym kroku // nastepnie ustawić następną na aktualną tak żeby prawidłowo ją obsłużył w następnym kroku
TrainParams->RewindTimeTable(sSpeedTable[i].evEvent->CommandGet()); if( true == TrainParams->RewindTimeTable( sSpeedTable[ i ].evEvent->CommandGet() ) ) {
asNextStop = TrainParams->NextStop(); asNextStop = TrainParams->NextStop();
iStationStart = TrainParams->StationIndex;
}
} }
else if( sSpeedTable[ i ].fDist < -fLength ) { else if( sSpeedTable[ i ].fDist < -fLength ) {
// jeśli został przejechany // jeśli został przejechany
@@ -995,13 +997,13 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
#endif #endif
asNextStop = TrainParams->NextStop(); // informacja o końcu trasy asNextStop = TrainParams->NextStop(); // informacja o końcu trasy
TrainParams->NewName("none"); // czyszczenie nieaktualnego rozkładu TrainParams->NewName("none"); // czyszczenie nieaktualnego rozkładu
// TableClear(); //aby od nowa sprawdziło W4 z inną nazwą już - to // ma nie podjeżdżać pod W4 i ma je pomijać
// nie jest dobry pomysł iDrivigFlags &= ~( moveStopCloser );
iDrivigFlags &= if( false == TestFlag( iDrivigFlags, movePushPull ) ) {
~(moveStopCloser | // if the consist can change direction through a simple cab change it doesn't need fiddling with recognition of passenger stops
moveStopPoint); // ma nie podjeżdżać pod W4 i ma je pomijać iDrivigFlags &= ~( moveStopPoint );
sSpeedTable[i].iFlags = }
0; // W4 nie liczy się już (nie wyśle SetVelocity) sSpeedTable[i].iFlags = 0; // W4 nie liczy się już (nie wyśle SetVelocity)
sSpeedTable[i].fVelNext = -1; // można jechać za W4 sSpeedTable[i].fVelNext = -1; // można jechać za W4
fLastStopExpDist = -1.0f; // nie ma rozkładu, nie ma usuwania stacji fLastStopExpDist = -1.0f; // nie ma rozkładu, nie ma usuwania stacji
WaitingSet(60); // tak ze 2 minuty, aż wszyscy wysiądą WaitingSet(60); // tak ze 2 minuty, aż wszyscy wysiądą
@@ -1837,6 +1839,12 @@ void TController::AutoRewident()
fAccThreshold = -fBrake_a0[BrakeAccTableSize] - 1 * fBrake_a1[BrakeAccTableSize]; fAccThreshold = -fBrake_a0[BrakeAccTableSize] - 1 * fBrake_a1[BrakeAccTableSize];
fBrakeReaction = 1.00 + fLength*0.005; fBrakeReaction = 1.00 + fLength*0.005;
} }
for (int i = 1; i <= 8; i *= 2) //ustawianie trybu pracy zadajnika hamulca, wystarczy raz po inicjalizacji AI
{
if ((mvOccupied->BrakeOpModes & i) > 0) {
mvOccupied->BrakeOpModeFlag = i;
}
}
} }
double TController::ESMVelocity(bool Main) double TController::ESMVelocity(bool Main)
@@ -2561,8 +2569,14 @@ bool TController::IncBrake()
} }
case ElectroPneumatic: { case ElectroPneumatic: {
if( mvOccupied->EngineType == ElectricInductionMotor ) { if( mvOccupied->EngineType == ElectricInductionMotor ) {
if (mvOccupied->BrakeHandle == MHZ_EN57) {
if (mvOccupied->BrakeCtrlPos < mvOccupied->Handle->GetPos(bh_FB))
OK = mvOccupied->BrakeLevelAdd(1.0);
}
else {
OK = mvOccupied->IncLocalBrakeLevel(1); OK = mvOccupied->IncLocalBrakeLevel(1);
} }
}
else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) { else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) {
mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_EPB ) ); mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_EPB ) );
if( mvOccupied->Handle->GetPos( bh_EPR ) - mvOccupied->Handle->GetPos( bh_EPN ) < 0.1 ) if( mvOccupied->Handle->GetPos( bh_EPR ) - mvOccupied->Handle->GetPos( bh_EPN ) < 0.1 )
@@ -2609,10 +2623,15 @@ bool TController::DecBrake()
Need_BrakeRelease = true; Need_BrakeRelease = true;
break; break;
case ElectroPneumatic: case ElectroPneumatic:
if (mvOccupied->EngineType == ElectricInductionMotor) if (mvOccupied->EngineType == ElectricInductionMotor) {
{ if (mvOccupied->BrakeHandle == MHZ_EN57) {
if (mvOccupied->BrakeCtrlPos > mvOccupied->Handle->GetPos(bh_MB))
OK = mvOccupied->BrakeLevelAdd(-1.0);
}
else {
OK = mvOccupied->DecLocalBrakeLevel(1); OK = mvOccupied->DecLocalBrakeLevel(1);
} }
}
else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR)) else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPR))
{ {
mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EPR)); mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EPR));
@@ -2747,12 +2766,12 @@ bool TController::IncSpeed()
OK = mvControlling->IncMainCtrl(std::max(1,mvOccupied->MainCtrlPosNo/10)); OK = mvControlling->IncMainCtrl(std::max(1,mvOccupied->MainCtrlPosNo/10));
//tutaj jeszcze powinien być tempomat //tutaj jeszcze powinien być tempomat
double SpeedCntrl = VelDesired; double SpeedCntrlVel = VelDesired;
if (fProximityDist < 50) if (fProximityDist < 50)
{ {
SpeedCntrl = std::min(SpeedCntrl, VelNext); SpeedCntrlVel = std::min(SpeedCntrlVel, VelNext);
} }
this->SpeedCntrl(SpeedCntrl); SpeedCntrl(SpeedCntrlVel);
} }
break; break;
@@ -2814,15 +2833,6 @@ bool TController::DecSpeed(bool force)
break; break;
case ElectricInductionMotor: case ElectricInductionMotor:
OK = mvControlling->DecMainCtrl(1); OK = mvControlling->DecMainCtrl(1);
if ((mvControlling->ScndCtrlPosNo > 0)&&(mvControlling->Mains)) //jeżeli tempomat
{
mvControlling->IncScndCtrl(1);
mvControlling->RunCommand("SpeedCntrl", VelDesired, mvControlling->CabNo);
}
else
{
mvControlling->DecScndCtrl(2);
}
break; break;
case WheelsDriven: case WheelsDriven:
if (!mvControlling->CabNo) if (!mvControlling->CabNo)
@@ -3270,8 +3280,7 @@ bool TController::PutCommand( std::string NewCommand, double NewValue1, double N
// CheckVehicles(); //sprawdzenie składu, AI zapali światła // CheckVehicles(); //sprawdzenie składu, AI zapali światła
TableClear(); // wyczyszczenie tabelki prędkości, bo na nowo trzeba określić kierunek i TableClear(); // wyczyszczenie tabelki prędkości, bo na nowo trzeba określić kierunek i
// sprawdzić przystanki // sprawdzić przystanki
OrdersInit( OrdersInit(fabs(NewValue1)); // ustalenie tabelki komend wg rozkładu oraz prędkości początkowej
fabs(NewValue1)); // ustalenie tabelki komend wg rozkładu oraz prędkości początkowej
// if (NewValue1!=0.0) if (!AIControllFlag) DirectionForward(NewValue1>0.0); //ustawienie // if (NewValue1!=0.0) if (!AIControllFlag) DirectionForward(NewValue1>0.0); //ustawienie
// nawrotnika użytkownikowi (propaguje się do członów) // nawrotnika użytkownikowi (propaguje się do członów)
// if (NewValue1>0) // if (NewValue1>0)
@@ -5374,8 +5383,6 @@ inline TOrders TController::OrderNextGet()
void TController::OrdersInit(double fVel) void TController::OrdersInit(double fVel)
{ // wypełnianie tabelki rozkazów na podstawie rozkładu { // wypełnianie tabelki rozkazów na podstawie rozkładu
// ustawienie kolejności komend, niezależnie kto prowadzi // ustawienie kolejności komend, niezależnie kto prowadzi
// Mechanik->OrderPush(Wait_for_orders); //czekanie na lepsze czasy
// OrderPos=OrderTop=0; //wypełniamy od pozycji 0
OrdersClear(); // usunięcie poprzedniej tabeli OrdersClear(); // usunięcie poprzedniej tabeli
OrderPush(Prepare_engine); // najpierw odpalenie silnika OrderPush(Prepare_engine); // najpierw odpalenie silnika
if (TrainParams->TrainName == "none") if (TrainParams->TrainName == "none")
@@ -5389,16 +5396,14 @@ void TController::OrdersInit(double fVel)
OrderPush(Shunt); // dla prędkości 0.01 włączamy jazdę manewrową OrderPush(Shunt); // dla prędkości 0.01 włączamy jazdę manewrową
else if (TrainParams ? else if (TrainParams ?
(TrainParams->DirectionChange() ? // jeśli obrót na pierwszym przystanku (TrainParams->DirectionChange() ? // jeśli obrót na pierwszym przystanku
((iDrivigFlags & ((iDrivigFlags & movePushPull) ? // SZT również! SN61 zależnie od wagonów...
movePushPull) ? // SZT również! SN61 zależnie od wagonów...
(TrainParams->TimeTable[1].StationName == TrainParams->Relation1) : (TrainParams->TimeTable[1].StationName == TrainParams->Relation1) :
false) : false) :
false) : false) :
true) true)
OrderPush(Shunt); // a teraz start będzie w manewrowym, a tryb pociągowy włączy W4 OrderPush(Shunt); // a teraz start będzie w manewrowym, a tryb pociągowy włączy W4
else else
// jeśli start z pierwszej stacji i jednocześnie jest na niej zmiana kierunku, to EZT ma // jeśli start z pierwszej stacji i jednocześnie jest na niej zmiana kierunku, to EZT ma mieć Shunt
// mieć Shunt
OrderPush(Obey_train); // dla starych scenerii start w trybie pociagowym OrderPush(Obey_train); // dla starych scenerii start w trybie pociagowym
if (DebugModeFlag) // normalnie nie ma po co tego wypisywać if (DebugModeFlag) // normalnie nie ma po co tego wypisywać
WriteLog("/* Timetable: " + TrainParams->ShowRelation()); WriteLog("/* Timetable: " + TrainParams->ShowRelation());
@@ -5406,10 +5411,14 @@ void TController::OrdersInit(double fVel)
for (int i = 0; i <= TrainParams->StationCount; ++i) for (int i = 0; i <= TrainParams->StationCount; ++i)
{ {
t = TrainParams->TimeTable + i; t = TrainParams->TimeTable + i;
if (DebugModeFlag) // normalnie nie ma po co tego wypisywa? if (DebugModeFlag) {
WriteLog(t->StationName + " " + std::to_string(t->Ah) + ":" + // normalnie nie ma po co tego wypisywa?
std::to_string(t->Am) + ", " + std::to_string(t->Dh) + ":" + WriteLog(
std::to_string(t->Dm) + " " + t->StationWare); t->StationName
+ " " + std::to_string(t->Ah) + ":" + std::to_string(t->Am)
+ ", " + std::to_string(t->Dh) + ":" + std::to_string(t->Dm)
+ " " + t->StationWare);
}
if (t->StationWare.find('@') != std::string::npos) if (t->StationWare.find('@') != std::string::npos)
{ // zmiana kierunku i dalsza jazda wg rozk?adu { // zmiana kierunku i dalsza jazda wg rozk?adu
if (iDrivigFlags & movePushPull) // SZT również! SN61 zależnie od wagonów... if (iDrivigFlags & movePushPull) // SZT również! SN61 zależnie od wagonów...
@@ -5420,33 +5429,34 @@ void TController::OrdersInit(double fVel)
{ // dla zwykłego składu wagonowego odczepiamy lokomotywę { // dla zwykłego składu wagonowego odczepiamy lokomotywę
OrderPush(Disconnect); // odczepienie lokomotywy OrderPush(Disconnect); // odczepienie lokomotywy
OrderPush(Shunt); // a dalej manewry OrderPush(Shunt); // a dalej manewry
if (i <= TrainParams->StationCount) // 130827: to się jednak nie sprawdza
{ //"@" na ostatniej robi tylko odpięcie
// OrderPush(Change_direction); //zmiana kierunku
// OrderPush(Shunt); //jazda na drugą stronę składu
// OrderPush(Change_direction); //zmiana kierunku
// OrderPush(Connect); //jazda pod wagony
}
} }
if (i < TrainParams->StationCount) // jak nie ostatnia stacja if (i < TrainParams->StationCount) // jak nie ostatnia stacja
OrderPush(Obey_train); // to dalej wg rozkładu OrderPush(Obey_train); // to dalej wg rozkładu
} }
} }
if (DebugModeFlag) // normalnie nie ma po co tego wypisywać if( DebugModeFlag ) {
// normalnie nie ma po co tego wypisywać
WriteLog( "*/" ); WriteLog( "*/" );
}
OrderPush(Shunt); // po wykonaniu rozkładu przełączy się na manewry OrderPush(Shunt); // po wykonaniu rozkładu przełączy się na manewry
} }
// McZapkie-100302 - to ma byc wyzwalane ze scenerii // McZapkie-100302 - to ma byc wyzwalane ze scenerii
if (fVel == 0.0) if( fVel == 0.0 ) {
SetVelocity(0, 0, stopSleep); // jeśli nie ma prędkości początkowej, to śpi // jeśli nie ma prędkości początkowej, to śpi
else SetVelocity( 0, 0, stopSleep );
{ // jeśli podana niezerowa prędkość }
if ((fVel >= 1.0) || else {
(fVel < 0.02)) // jeśli ma jechać - dla 0.01 ma podjechać manewrowo po podaniu sygnału // jeśli podana niezerowa prędkość
iDrivigFlags = (iDrivigFlags & ~moveStopHere) | if( ( fVel >= 1.0 )
moveStopCloser; // to do następnego W4 ma podjechać blisko || ( fVel < 0.02 ) ) {
else // jeśli ma jechać - dla 0.01 ma podjechać manewrowo po podaniu sygnału
iDrivigFlags |= moveStopHere; // czekać na sygnał // to do następnego W4 ma podjechać blisko
iDrivigFlags = ( iDrivigFlags & ~( moveStopHere ) ) | moveStopCloser;
}
else {
// czekać na sygnał
iDrivigFlags |= moveStopHere;
}
JumpToFirstOrder(); JumpToFirstOrder();
if (fVel >= 1.0) // jeśli ma jechać if (fVel >= 1.0) // jeśli ma jechać
SetVelocity(fVel, -1); // ma ustawić żądaną prędkość SetVelocity(fVel, -1); // ma ustawić żądaną prędkość

View File

@@ -1477,6 +1477,7 @@ void TMoverParameters::compute_movement_( double const Deltatime ) {
} }
} }
// uklady hamulcowe: // uklady hamulcowe:
ConverterCheck( Deltatime );
if (VeselVolume > 0) if (VeselVolume > 0)
Compressor = CompressedVolume / VeselVolume; Compressor = CompressedVolume / VeselVolume;
else else
@@ -1484,7 +1485,6 @@ void TMoverParameters::compute_movement_( double const Deltatime ) {
Compressor = 0; Compressor = 0;
CompressorFlag = false; CompressorFlag = false;
}; };
ConverterCheck(Deltatime);
if( CompressorSpeed > 0.0 ) { if( CompressorSpeed > 0.0 ) {
// sprężarka musi mieć jakąś niezerową wydajność żeby rozważać jej załączenie i pracę // sprężarka musi mieć jakąś niezerową wydajność żeby rozważać jej załączenie i pracę
CompressorCheck( Deltatime ); CompressorCheck( Deltatime );
@@ -3789,17 +3789,12 @@ void TMoverParameters::UpdateScndPipePressure(double dt)
} }
Pipe2->Flow(Hamulec->GetHPFlow(ScndPipePress, dt)); Pipe2->Flow(Hamulec->GetHPFlow(ScndPipePress, dt));
/*
// NOTE: condition disabled to allow the air flow from the main hose to the main tank as well // NOTE: condition disabled to allow the air flow from the main hose to the main tank as well
if (((Compressor > ScndPipePress) && (CompressorSpeed > 0.0001)) || (TrainType == dt_EZT)) if( /* ( ( Compressor > ScndPipePress ) && ( */ VeselVolume > 0.0 /* ) ) || ( TrainType == dt_EZT ) || ( TrainType == dt_DMU ) */ ) {
{
*/
dV = PF(Compressor, ScndPipePress, Spz) * dt; dV = PF(Compressor, ScndPipePress, Spz) * dt;
CompressedVolume += dV / 1000.0; CompressedVolume += dV / 1000.0;
Pipe2->Flow(-dV); Pipe2->Flow(-dV);
/*
} }
*/
Pipe2->Flow(dv1 + dv2); Pipe2->Flow(dv1 + dv2);
Pipe2->Act(); Pipe2->Act();
ScndPipePress = Pipe2->P(); ScndPipePress = Pipe2->P();
@@ -8862,8 +8857,9 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
WriteLog( "Ready to depart" ); WriteLog( "Ready to depart" );
CompressedVolume = VeselVolume * MinCompressor * ( 9.8 ) / 10.0; CompressedVolume = VeselVolume * MinCompressor * ( 9.8 ) / 10.0;
ScndPipePress = ( ScndPipePress = (
VeselVolume > 0.0 ? VeselVolume > 0.0 ? CompressedVolume / VeselVolume :
CompressedVolume / VeselVolume : ( Couplers[ side::front ].AllowedFlag & coupling::mainhose ) != 0 ? 5.0 :
( Couplers[ side::rear ].AllowedFlag & coupling::mainhose ) != 0 ? 5.0 :
0.0 ); 0.0 );
PipePress = CntrlPipePress; PipePress = CntrlPipePress;
BrakePress = 0.0; BrakePress = 0.0;
@@ -8887,7 +8883,14 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
WriteLog( "Braked" ); WriteLog( "Braked" );
Volume = BrakeVVolume * MaxBrakePress[ 3 ]; Volume = BrakeVVolume * MaxBrakePress[ 3 ];
CompressedVolume = VeselVolume * MinCompressor * 0.55; CompressedVolume = VeselVolume * MinCompressor * 0.55;
/*
ScndPipePress = 5.1; ScndPipePress = 5.1;
*/
ScndPipePress = (
VeselVolume > 0.0 ? CompressedVolume / VeselVolume :
( Couplers[ side::front ].AllowedFlag & coupling::mainhose ) != 0 ? 5.1 :
( Couplers[ side::rear ].AllowedFlag & coupling::mainhose ) != 0 ? 5.1 :
0.0 );
PipePress = LowPipePress; PipePress = LowPipePress;
PipeBrakePress = MaxBrakePress[ 3 ] * 0.5; PipeBrakePress = MaxBrakePress[ 3 ] * 0.5;
BrakePress = MaxBrakePress[ 3 ] * 0.5; BrakePress = MaxBrakePress[ 3 ] * 0.5;
@@ -8955,9 +8958,9 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
CompressorPower = 0; CompressorPower = 0;
Hamulec->Init(PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag); Hamulec->Init(PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
/*
ScndPipePress = Compressor; ScndPipePress = Compressor;
*/
// WriteLogSS("OK=", BoolTo10(OK)); // WriteLogSS("OK=", BoolTo10(OK));
// WriteLog(""); // WriteLog("");

View File

@@ -82,8 +82,7 @@ bool TTrainParameters::UpdateMTable(double hh, double mm, std::string const &New
{ {
if (NewName == NextStationName) // jeśli dojechane do następnego if (NewName == NextStationName) // jeśli dojechane do następnego
{ // Ra: wywołanie może być powtarzane, jak stoi na W4 { // Ra: wywołanie może być powtarzane, jak stoi na W4
if (TimeTable[StationIndex + 1].km - TimeTable[StationIndex].km < if (TimeTable[StationIndex + 1].km - TimeTable[StationIndex].km < 0) // to jest bez sensu
0) // to jest bez sensu
Direction = -1; Direction = -1;
else else
Direction = 1; // prowizorka bo moze byc zmiana kilometrazu Direction = 1; // prowizorka bo moze byc zmiana kilometrazu
@@ -91,46 +90,40 @@ bool TTrainParameters::UpdateMTable(double hh, double mm, std::string const &New
LastStationLatency = LastStationLatency =
CompareTime(hh, mm, TimeTable[StationIndex].Dh, TimeTable[StationIndex].Dm); CompareTime(hh, mm, TimeTable[StationIndex].Dh, TimeTable[StationIndex].Dm);
// inc(StationIndex); //przejście do następnej pozycji StationIndex<=StationCount // inc(StationIndex); //przejście do następnej pozycji StationIndex<=StationCount
if (StationIndex < // Ra: "<", bo dodaje 1 przy przejściu do następnej stacji
StationCount) // Ra: "<", bo dodaje 1 przy przejściu do następnej stacji if (StationIndex < StationCount) {
{ // jeśli nie ostatnia stacja // jeśli nie ostatnia stacja
NextStationName = TimeTable[StationIndex + 1].StationName; // zapamiętanie nazwy NextStationName = TimeTable[StationIndex + 1].StationName; // zapamiętanie nazwy
TTVmax = TimeTable[StationIndex + 1] // Ra: nowa prędkość rozkładowa na kolejnym odcinku
.vmax; // Ra: nowa prędkość rozkładowa na kolejnym odcinku TTVmax = TimeTable[StationIndex + 1].vmax;
}
else {
// gdy ostatnia stacja, nie ma następnej stacji
NextStationName = "";
} }
else // gdy ostatnia stacja
NextStationName = ""; // nie ma następnej stacji
OK = true; OK = true;
} }
} }
return OK; /*czy jest nastepna stacja*/ return OK; /*czy jest nastepna stacja*/
} }
void Mtable::TTrainParameters::RewindTimeTable(std::string actualStationName) bool Mtable::TTrainParameters::RewindTimeTable(std::string actualStationName) {
{
//actualStationName = ToLower(actualStationName); // na małe znaki if( actualStationName.compare( 0, 19, "PassengerStopPoint:" ) == 0 ) {
if (int s = actualStationName.find("PassengerStopPoint:") != std::string::npos) actualStationName = ToLower( actualStationName.substr( 19 ) );
{
actualStationName = ToLower(actualStationName.substr(s + 19));
} }
for (int i = 1; i <= StationCount; i++) for( auto i = 1; i <= StationCount; ++i ) {
{ // przechodzimy po całej tabelce i sprawdzamy nazwy stacji (bez pierwszej) // przechodzimy po całej tabelce i sprawdzamy nazwy stacji (bez pierwszej)
if (ToLower(TimeTable[i].StationName) == actualStationName) if (ToLower(TimeTable[i].StationName) == actualStationName) {
{ // nazwa stacji zgodna // nazwa stacji zgodna więc ustawiamy na poprzednią, żeby w następnym kroku poprawnie obsłużyć
// więc ustawiamy na poprzednią, żeby w następnym kroku poprawnie obsłużyć StationIndex = i;
StationIndex = i - 1; NextStationName = TimeTable[ i ].StationName;
if (StationIndex < TTVmax = TimeTable[ i ].vmax;
StationCount) // Ra: "<", bo dodaje 1 przy przejściu do następnej stacji return true; // znaleźliśmy więc kończymy
{ // jeśli nie ostatnia stacja
NextStationName = TimeTable[StationIndex + 1].StationName; // zapamiętanie nazwy
TTVmax = TimeTable[StationIndex + 1]
.vmax; // Ra: nowa prędkość rozkładowa na kolejnym odcinku
}
else // gdy ostatnia stacja
NextStationName = ""; // nie ma następnej stacji
break; // znaleźliśmy więc kończymy
} }
} }
// failed to find a match
return false;
} }
void TTrainParameters::StationIndexInc() void TTrainParameters::StationIndexInc()

View File

@@ -76,7 +76,7 @@ class TTrainParameters
bool IsTimeToGo(double hh, double mm); bool IsTimeToGo(double hh, double mm);
bool UpdateMTable(double hh, double mm, std::string const &NewName); bool UpdateMTable(double hh, double mm, std::string const &NewName);
bool UpdateMTable( simulation_time const &Time, std::string const &NewName ); bool UpdateMTable( simulation_time const &Time, std::string const &NewName );
void RewindTimeTable( std::string actualStationName ); bool RewindTimeTable( std::string actualStationName );
TTrainParameters( std::string const &NewTrainName ); TTrainParameters( std::string const &NewTrainName );
void NewName(std::string const &NewTrainName); void NewName(std::string const &NewTrainName);
void UpdateVelocity(int StationCount, double vActual); void UpdateVelocity(int StationCount, double vActual);