diff --git a/Driver.cpp b/Driver.cpp index b032d8e4..6cde0078 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -226,6 +226,15 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len) } } } + else { + if( fDist < 50.0 ) { + // old sceneries use trick of placing 'helper' semaphores underground, which can lead to vehicles running over them instead of stopping in front of them + // to account for it at short distances we redo distance calculation on 2d plane + fDist = glm::dot( + glm::vec3( v.x, 0.0, v.z ), + glm::vec3( dir->x, 0.0, dir->z ) ); + } + } } if (fDist > 0.0) // nie może być 0.0, a przypadkiem mogło by się trafić i było by źle @@ -391,6 +400,8 @@ void TController::TableClear() iTableDirection = 0; // nieznany tLast = nullptr; fLastVel = -1.0; + SemNextIndex = -1; + SemNextStopIndex = -1; eSignSkip = nullptr; // nic nie pomijamy }; diff --git a/DynObj.cpp b/DynObj.cpp index c0b3345d..28336bae 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -2943,8 +2943,11 @@ bool TDynamicObject::Update(double dt, double dt1) // drop pantographs // NOTE: this isn't universal behaviour // TODO: have this dependant on .fiz-driven flag + // NOTE: moved to pantspeed calculation part a little later in the function. all remarks and todo still apply +/* MoverParameters->PantFront( false, ( MoverParameters->TrainType == dt_EZT ? command_range::unit : command_range::local ) ); MoverParameters->PantRear( false, ( MoverParameters->TrainType == dt_EZT ? command_range::unit : command_range::local ) ); +*/ } } @@ -3226,6 +3229,10 @@ bool TDynamicObject::Update(double dt, double dt1) else { pantspeedfactor = 0.0; } + if( ( false == MoverParameters->Battery ) + && ( false == MoverParameters->ConverterFlag ) ) { + pantspeedfactor = 0.0; + } pantspeedfactor = std::max( 0.0, pantspeedfactor ); k = p->fAngleL; if( ( pantspeedfactor > 0.0 )