mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 03:09:18 +02:00
Merge branch 'tmj-dev' into milek-dev
This commit is contained in:
90
Driver.cpp
90
Driver.cpp
@@ -235,9 +235,16 @@ void TSpeedPos::CommandCheck()
|
||||
case TCommandType::cm_PassengerStopPoint:
|
||||
// nie ma dostępu do rozkładu
|
||||
// przystanek, najwyżej AI zignoruje przy analizie tabelki
|
||||
// if ((iFlags & spPassengerStopPoint) == 0)
|
||||
fVelNext = 0.0; // TrainParams->IsStop()?0.0:-1.0; //na razie tak
|
||||
fVelNext = 0.0;
|
||||
iFlags |= spPassengerStopPoint; // niestety nie da się w tym miejscu współpracować z rozkładem
|
||||
/*
|
||||
// NOTE: not used for now as it might be unnecessary
|
||||
// special case, potentially override any set speed limits if requested
|
||||
// NOTE: we test it here because for the time being it's only used for passenger stops
|
||||
if( TestFlag( iFlags, spDontApplySpeedLimit ) ) {
|
||||
fVelNext = -1;
|
||||
}
|
||||
*/
|
||||
break;
|
||||
case TCommandType::cm_SetProximityVelocity:
|
||||
// musi zostać gdyż inaczej nie działają manewry
|
||||
@@ -876,7 +883,6 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
// TableClear(); //aby od nowa sprawdziło W4 z inną nazwą już - to nie
|
||||
// jest dobry pomysł
|
||||
sSpeedTable[i].iFlags = 0; // nie liczy się już
|
||||
sSpeedTable[i].fVelNext = -1; // jechać
|
||||
continue; // nie analizować prędkości
|
||||
}
|
||||
} // koniec obsługi przelotu na W4
|
||||
@@ -953,7 +959,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
|
||||
// perform loading/unloading
|
||||
auto const platformside = static_cast<int>( std::floor( std::abs( sSpeedTable[ i ].evEvent->input_value( 2 ) ) ) ) % 10;
|
||||
auto const exchangetime = simulation::Station.update_load( pVehicles[ 0 ], *TrainParams, platformside );
|
||||
auto const exchangetime = std::max( 5.0, simulation::Station.update_load( pVehicles[ 0 ], *TrainParams, platformside ) );
|
||||
WaitingSet( std::max( -fStopTime, exchangetime ) ); // na końcu rozkładu się ustawia 60s i tu by było skrócenie
|
||||
|
||||
if( TrainParams->CheckTrainLatency() < 0.0 ) {
|
||||
@@ -1032,9 +1038,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
iDrivigFlags |= moveStopCloser; // do następnego W4 podjechać blisko (z dociąganiem)
|
||||
sSpeedTable[i].iFlags = 0; // nie liczy się już zupełnie (nie wyśle SetVelocity)
|
||||
sSpeedTable[i].fVelNext = -1; // można jechać za W4
|
||||
if( ( sSpeedTable[ i ].fDist <= 0.0 ) && ( eSignNext == sSpeedTable[ i ].evEvent ) ) {
|
||||
// sanity check, if we're held by this stop point, let us go
|
||||
VelSignalLast = -1;
|
||||
}
|
||||
if (go == TCommandType::cm_Unknown) // jeśli nie było komendy wcześniej
|
||||
go = TCommandType::cm_Ready; // gotów do odjazdu z W4 (semafor może
|
||||
// zatrzymać)
|
||||
go = TCommandType::cm_Ready; // gotów do odjazdu z W4 (semafor może zatrzymać)
|
||||
if( false == tsGuardSignal.empty() ) {
|
||||
// jeśli mamy głos kierownika, to odegrać
|
||||
iDrivigFlags |= moveGuardSignal;
|
||||
@@ -1058,14 +1067,15 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
// if the consist can change direction through a simple cab change it doesn't need fiddling with recognition of passenger stops
|
||||
iDrivigFlags &= ~( moveStopPoint );
|
||||
}
|
||||
fLastStopExpDist = -1.0f; // nie ma rozkładu, nie ma usuwania stacji
|
||||
sSpeedTable[i].iFlags = 0; // W4 nie liczy się już (nie wyśle SetVelocity)
|
||||
sSpeedTable[i].fVelNext = -1; // można jechać za W4
|
||||
fLastStopExpDist = -1.0f; // nie ma rozkładu, nie ma usuwania stacji
|
||||
// wykonanie kolejnego rozkazu (Change_direction albo Shunt)
|
||||
// FIX: don't automatically advance if there's disconnect procedure in progress
|
||||
if( false == TestFlag( OrderCurrentGet(), Disconnect ) ) {
|
||||
JumpToNextOrder();
|
||||
if( ( sSpeedTable[ i ].fDist <= 0.0 ) && ( eSignNext == sSpeedTable[ i ].evEvent ) ) {
|
||||
// sanity check, if we're held by this stop point, let us go
|
||||
VelSignalLast = -1;
|
||||
}
|
||||
// wykonanie kolejnego rozkazu (Change_direction albo Shunt)
|
||||
JumpToNextOrder();
|
||||
// ma się nie ruszać aż do momentu podania sygnału
|
||||
iDrivigFlags |= moveStopHere | moveStartHorn;
|
||||
continue; // nie analizować prędkości
|
||||
@@ -1091,36 +1101,42 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
}
|
||||
else if (sSpeedTable[i].iFlags & spEvent) // W4 może się deaktywować
|
||||
{ // jeżeli event, może być potrzeba wysłania komendy, aby ruszył
|
||||
// sprawdzanie eventów pasywnych miniętych
|
||||
if( (sSpeedTable[ i ].fDist < 0.0) && (SemNextIndex == i) )
|
||||
{
|
||||
if( Global.iWriteLogEnabled & 8 ) {
|
||||
WriteLog( "Speed table update for " + OwnerName() + ", passed semaphor " + sSpeedTable[ SemNextIndex ].GetName() );
|
||||
if( sSpeedTable[ i ].fDist < 0.0 ) {
|
||||
// sprawdzanie eventów pasywnych miniętych
|
||||
/*
|
||||
if( ( eSignNext != nullptr ) && ( sSpeedTable[ i ].evEvent == eSignNext ) ) {
|
||||
VelSignalLast = sSpeedTable[ i ].fVelNext;
|
||||
}
|
||||
SemNextIndex = -1; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze zmiennej sprawdzającej dla skanowania w przód
|
||||
}
|
||||
if( (sSpeedTable[ i ].fDist < 0.0) && (SemNextStopIndex == i) )
|
||||
{
|
||||
if( Global.iWriteLogEnabled & 8 ) {
|
||||
WriteLog( "Speed table update for " + OwnerName() + ", passed semaphor " + sSpeedTable[ SemNextStopIndex ].GetName() );
|
||||
}
|
||||
SemNextStopIndex = -1; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze zmiennej sprawdzającej dla skanowania w przód
|
||||
}
|
||||
if (sSpeedTable[i].fDist > 0.0 &&
|
||||
sSpeedTable[i].IsProperSemaphor(OrderCurrentGet()))
|
||||
{
|
||||
if( SemNextIndex == -1 ) {
|
||||
// jeśli jest mienięty poprzedni semafor a wcześniej
|
||||
// byl nowy to go dorzucamy do zmiennej, żeby cały czas widział najbliższy
|
||||
SemNextIndex = i;
|
||||
*/
|
||||
if( SemNextIndex == i ) {
|
||||
if( Global.iWriteLogEnabled & 8 ) {
|
||||
WriteLog( "Speed table update for " + OwnerName() + ", next semaphor is " + sSpeedTable[ SemNextIndex ].GetName() );
|
||||
WriteLog( "Speed table update for " + OwnerName() + ", passed semaphor " + sSpeedTable[ SemNextIndex ].GetName() );
|
||||
}
|
||||
SemNextIndex = -1; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze zmiennej sprawdzającej dla skanowania w przód
|
||||
}
|
||||
if( ( SemNextStopIndex == -1 )
|
||||
|| ( ( sSpeedTable[SemNextStopIndex].fVelNext != 0 )
|
||||
&& ( sSpeedTable[ i ].fVelNext == 0 ) ) ) {
|
||||
SemNextStopIndex = i;
|
||||
if( SemNextStopIndex == i ) {
|
||||
if( Global.iWriteLogEnabled & 8 ) {
|
||||
WriteLog( "Speed table update for " + OwnerName() + ", passed semaphor " + sSpeedTable[ SemNextStopIndex ].GetName() );
|
||||
}
|
||||
SemNextStopIndex = -1; // jeśli minęliśmy semafor od ograniczenia to go kasujemy ze zmiennej sprawdzającej dla skanowania w przód
|
||||
}
|
||||
}
|
||||
if( sSpeedTable[ i ].fDist > 0.0 ) {
|
||||
// check signals ahead
|
||||
if( sSpeedTable[ i ].IsProperSemaphor( OrderCurrentGet() ) ) {
|
||||
if( SemNextIndex == -1 ) {
|
||||
// jeśli jest mienięty poprzedni semafor a wcześniej
|
||||
// byl nowy to go dorzucamy do zmiennej, żeby cały czas widział najbliższy
|
||||
SemNextIndex = i;
|
||||
if( Global.iWriteLogEnabled & 8 ) {
|
||||
WriteLog( "Speed table update for " + OwnerName() + ", next semaphor is " + sSpeedTable[ SemNextIndex ].GetName() );
|
||||
}
|
||||
}
|
||||
if( ( SemNextStopIndex == -1 )
|
||||
|| ( ( sSpeedTable[ SemNextStopIndex ].fVelNext != 0 )
|
||||
&& ( sSpeedTable[ i ].fVelNext == 0 ) ) ) {
|
||||
SemNextStopIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sSpeedTable[i].iFlags & spOutsideStation)
|
||||
|
||||
Reference in New Issue
Block a user