mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-24 00:49:18 +02:00
Merge remote-tracking branch 'youby/master' into sim
This commit is contained in:
214
Driver.cpp
214
Driver.cpp
@@ -1822,8 +1822,7 @@ void TController::Activation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ra: to przełączanie poniżej jest tu bez sensu
|
// Ra: to przełączanie poniżej jest tu bez sensu
|
||||||
mvOccupied->ActiveCab =
|
mvOccupied->ActiveCab = iDirection; // aktywacja kabiny w prowadzonym pojeżdzie (silnikowy może być odwrotnie?)
|
||||||
iDirection; // aktywacja kabiny w prowadzonym pojeżdzie (silnikowy może być odwrotnie?)
|
|
||||||
// mvOccupied->CabNo=iDirection;
|
// mvOccupied->CabNo=iDirection;
|
||||||
// mvOccupied->ActiveDir=0; //żeby sam ustawił kierunek
|
// mvOccupied->ActiveDir=0; //żeby sam ustawił kierunek
|
||||||
mvOccupied->CabActivisation(); // uruchomienie kabin w członach
|
mvOccupied->CabActivisation(); // uruchomienie kabin w członach
|
||||||
@@ -1963,6 +1962,7 @@ void TController::AutoRewident()
|
|||||||
&& ( mvControlling->EngineType == TEngineType::ElectricInductionMotor ) ) {
|
&& ( mvControlling->EngineType == TEngineType::ElectricInductionMotor ) ) {
|
||||||
fAccThreshold += 0.10;
|
fAccThreshold += 0.10;
|
||||||
}
|
}
|
||||||
|
fNominalAccThreshold = fAccThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( OrderCurrentGet() & ( Obey_train | Bank ) ) {
|
if( OrderCurrentGet() & ( Obey_train | Bank ) ) {
|
||||||
@@ -2354,8 +2354,10 @@ void TController::SetVelocity(double NewVel, double NewVelNext, TStopReason r)
|
|||||||
double TController::BrakeAccFactor() const
|
double TController::BrakeAccFactor() const
|
||||||
{
|
{
|
||||||
double Factor = 1.0;
|
double Factor = 1.0;
|
||||||
if( ( ActualProximityDist > fMinProximityDist )
|
|
||||||
|| ( mvOccupied->Vel > VelDesired + fVelPlus ) ) {
|
if( ( fAccThreshold != 0.0 )
|
||||||
|
&& ( ( ActualProximityDist > fMinProximityDist )
|
||||||
|
|| ( mvOccupied->Vel > VelDesired + fVelPlus ) ) ) {
|
||||||
Factor += ( fBrakeReaction * ( /*mvOccupied->BrakeCtrlPosR*/BrakeCtrlPosition < 0.5 ? 1.5 : 1 ) ) * mvOccupied->Vel / ( std::max( 0.0, ActualProximityDist ) + 1 ) * ( ( AccDesired - AbsAccS_pub ) / fAccThreshold );
|
Factor += ( fBrakeReaction * ( /*mvOccupied->BrakeCtrlPosR*/BrakeCtrlPosition < 0.5 ? 1.5 : 1 ) ) * mvOccupied->Vel / ( std::max( 0.0, ActualProximityDist ) + 1 ) * ( ( AccDesired - AbsAccS_pub ) / fAccThreshold );
|
||||||
}
|
}
|
||||||
return Factor;
|
return Factor;
|
||||||
@@ -2520,7 +2522,15 @@ bool TController::PrepareEngine()
|
|||||||
// enable train brake if it's off
|
// enable train brake if it's off
|
||||||
if( mvOccupied->fBrakeCtrlPos == mvOccupied->Handle->GetPos( bh_NP ) ) {
|
if( mvOccupied->fBrakeCtrlPos == mvOccupied->Handle->GetPos( bh_NP ) ) {
|
||||||
mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_RP ) );
|
mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_RP ) );
|
||||||
BrakeLevelSet(gbh_RP); // GBH
|
}
|
||||||
|
// sync virtual brake state with the 'real' one
|
||||||
|
std::unordered_map<int, int> const brakepositions {
|
||||||
|
{ mvOccupied->Handle->GetPos( bh_RP ), gbh_RP },
|
||||||
|
{ mvOccupied->Handle->GetPos( bh_NP ), gbh_NP },
|
||||||
|
{ mvOccupied->Handle->GetPos( bh_FS ), gbh_FS } };
|
||||||
|
auto const lookup { brakepositions.find( static_cast<int>( mvOccupied->fBrakeCtrlPos ) ) };
|
||||||
|
if( lookup != brakepositions.end() ) {
|
||||||
|
BrakeLevelSet( lookup->second ); // GBH
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2859,7 +2869,7 @@ bool TController::DecBrake()
|
|||||||
// mvOccupied->BrakeLevelAdd(-1.0);
|
// mvOccupied->BrakeLevelAdd(-1.0);
|
||||||
/* if (mvOccupied->BrakeCtrlPosR < 0.74) GBH */
|
/* if (mvOccupied->BrakeCtrlPosR < 0.74) GBH */
|
||||||
if (BrakeCtrlPosition < 0.74)
|
if (BrakeCtrlPosition < 0.74)
|
||||||
/*mvOccupied->*/BrakeLevelSet(0.0);
|
/*mvOccupied->*/BrakeLevelSet(gbh_RP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !OK ) {
|
if( !OK ) {
|
||||||
@@ -3061,7 +3071,7 @@ bool TController::IncSpeed()
|
|||||||
if (!mvControlling->FuseFlag)
|
if (!mvControlling->FuseFlag)
|
||||||
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||||
{
|
{
|
||||||
OK = mvControlling->IncMainCtrl(std::max(1,mvOccupied->MainCtrlPosNo/10));
|
OK = IncSpeedEIM();
|
||||||
// cruise control
|
// cruise control
|
||||||
auto const SpeedCntrlVel { (
|
auto const SpeedCntrlVel { (
|
||||||
( ActualProximityDist > std::max( 50.0, fMaxProximityDist ) ) ?
|
( ActualProximityDist > std::max( 50.0, fMaxProximityDist ) ) ?
|
||||||
@@ -3163,6 +3173,34 @@ bool TController::DecSpeed(bool force)
|
|||||||
return OK;
|
return OK;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool TController::IncSpeedEIM() {
|
||||||
|
|
||||||
|
bool OK = false; // domyślnie false, aby wyszło z pętli while
|
||||||
|
switch( mvControlling->EIMCtrlType ) {
|
||||||
|
case 0:
|
||||||
|
OK = mvControlling->IncMainCtrl( std::max( 1, mvOccupied->MainCtrlPosNo / 10 ) );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
OK = mvControlling->MainCtrlPos < 6;
|
||||||
|
if( OK )
|
||||||
|
mvControlling->MainCtrlPos = 6;
|
||||||
|
/*
|
||||||
|
// TBD, TODO: set position based on desired acceleration?
|
||||||
|
OK = mvControlling->MainCtrlPos < mvControlling->MainCtrlPosNo;
|
||||||
|
if( OK ) {
|
||||||
|
mvControlling->MainCtrlPos = clamp( mvControlling->MainCtrlPos + 1, 6, mvControlling->MainCtrlPosNo );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
OK = mvControlling->MainCtrlPos < 4;
|
||||||
|
if( OK )
|
||||||
|
mvControlling->MainCtrlPos = 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
bool TController::DecSpeedEIM()
|
bool TController::DecSpeedEIM()
|
||||||
{ // zmniejszenie prędkości (ale nie hamowanie)
|
{ // zmniejszenie prędkości (ale nie hamowanie)
|
||||||
bool OK = false; // domyślnie false, aby wyszło z pętli while
|
bool OK = false; // domyślnie false, aby wyszło z pętli while
|
||||||
@@ -3210,59 +3248,59 @@ void TController::SpeedSet()
|
|||||||
if (mvControlling->MainCtrlPosNo > 0)
|
if (mvControlling->MainCtrlPosNo > 0)
|
||||||
{ // jeśli ma czym kręcić
|
{ // jeśli ma czym kręcić
|
||||||
// TODO: sprawdzanie innego czlonu //if (!FuseFlagCheck())
|
// TODO: sprawdzanie innego czlonu //if (!FuseFlagCheck())
|
||||||
if ((AccDesired < fAccGravity - 0.05) ||
|
if( ( iDrivigFlags & moveIncSpeed ) == 0 ) {
|
||||||
(mvOccupied->Vel > VelDesired)) // jeśli nie ma przyspieszać
|
// przetok rozłączać od razu (no dependency on fActionTime)
|
||||||
mvControlling->DecMainCtrl(2); // na zero
|
while( ( mvControlling->MainCtrlPos )
|
||||||
else if (fActionTime >= 0.0)
|
&& ( mvControlling->DecMainCtrl( 1 ) ) ) {
|
||||||
{ // jak już można coś poruszać, przetok rozłączać od razu
|
; // na zero
|
||||||
if (iDrivigFlags & moveIncSpeed)
|
}
|
||||||
{ // jak ma jechać
|
if( fActionTime >= 0.0 ) {
|
||||||
if (fReady < 0.4) // 0.05*Controlling->MaxBrakePress)
|
fActionTime = -5.0; // niech trochę potrzyma
|
||||||
{ // jak jest odhamowany
|
}
|
||||||
if (mvOccupied->ActiveDir > 0)
|
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
||||||
mvOccupied->DirectionForward(); //żeby EN57 jechały na drugiej nastawie
|
}
|
||||||
{
|
else {
|
||||||
if (mvControlling->MainCtrlPos &&
|
// jak ma jechać
|
||||||
!mvControlling->StLinFlag) // jak niby jedzie, ale ma rozłączone liniowe
|
if( fActionTime < 0.0 ) { break; }
|
||||||
mvControlling->DecMainCtrl(2); // to na zero i czekać na przewalenie kułakowego
|
if( fReady > 0.4 ) { break; }
|
||||||
else
|
|
||||||
switch (mvControlling->MainCtrlPos)
|
if( mvOccupied->ActiveDir > 0 ) {
|
||||||
{ // ruch nastawnika uzależniony jest od aktualnie ustawionej
|
mvOccupied->DirectionForward(); //żeby EN57 jechały na drugiej nastawie
|
||||||
// pozycji
|
}
|
||||||
case 0:
|
|
||||||
if (mvControlling->MainCtrlActualPos) // jeśli kułakowy nie jest
|
if( ( mvControlling->MainCtrlPos > 0 )
|
||||||
// wyzerowany
|
&& ( false == mvControlling->StLinFlag ) ) {
|
||||||
break; // to czekać na wyzerowanie
|
// jak niby jedzie, ale ma rozłączone liniowe to na zero i czekać na przewalenie kułakowego
|
||||||
mvControlling->IncMainCtrl(1); // przetok; bez "break", bo nie
|
mvControlling->DecMainCtrl( 2 );
|
||||||
// ma czekania na 1. pozycji
|
}
|
||||||
case 1:
|
else {
|
||||||
if (VelDesired >= 20)
|
// ruch nastawnika uzależniony jest od aktualnie ustawionej pozycji
|
||||||
mvControlling->IncMainCtrl(1); // szeregowa
|
switch( mvControlling->MainCtrlPos ) {
|
||||||
case 2:
|
case 0:
|
||||||
if (VelDesired >= 50)
|
if( mvControlling->MainCtrlActualPos ) {
|
||||||
mvControlling->IncMainCtrl(1); // równoległa
|
// jeśli kułakowy nie jest wyzerowany to czekać na wyzerowanie
|
||||||
case 3:
|
break;
|
||||||
if (VelDesired >= 80)
|
|
||||||
mvControlling->IncMainCtrl(1); // bocznik 1
|
|
||||||
case 4:
|
|
||||||
if (VelDesired >= 90)
|
|
||||||
mvControlling->IncMainCtrl(1); // bocznik 2
|
|
||||||
case 5:
|
|
||||||
if (VelDesired >= 100)
|
|
||||||
mvControlling->IncMainCtrl(1); // bocznik 3
|
|
||||||
}
|
|
||||||
if (mvControlling->MainCtrlPos) // jak załączył pozycję
|
|
||||||
{
|
|
||||||
fActionTime = -5.0; // niech trochę potrzyma
|
|
||||||
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
|
||||||
}
|
}
|
||||||
}
|
mvControlling->IncMainCtrl( 1 ); // przetok; bez "break", bo nie ma czekania na 1. pozycji
|
||||||
|
case 1:
|
||||||
|
if( VelDesired >= 20 )
|
||||||
|
mvControlling->IncMainCtrl( 1 ); // szeregowa
|
||||||
|
case 2:
|
||||||
|
if( VelDesired >= 50 )
|
||||||
|
mvControlling->IncMainCtrl( 1 ); // równoległa
|
||||||
|
case 3:
|
||||||
|
if( VelDesired >= 80 )
|
||||||
|
mvControlling->IncMainCtrl( 1 ); // bocznik 1
|
||||||
|
case 4:
|
||||||
|
if( VelDesired >= 90 )
|
||||||
|
mvControlling->IncMainCtrl( 1 ); // bocznik 2
|
||||||
|
case 5:
|
||||||
|
if( VelDesired >= 100 )
|
||||||
|
mvControlling->IncMainCtrl( 1 ); // bocznik 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
if( mvControlling->MainCtrlPos ) // jak załączył pozycję
|
||||||
{
|
{
|
||||||
while (mvControlling->MainCtrlPos)
|
|
||||||
mvControlling->DecMainCtrl(1); // na zero
|
|
||||||
fActionTime = -5.0; // niech trochę potrzyma
|
fActionTime = -5.0; // niech trochę potrzyma
|
||||||
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
||||||
}
|
}
|
||||||
@@ -3366,7 +3404,7 @@ void TController::SpeedCntrl(double DesiredSpeed)
|
|||||||
mvControlling->IncScndCtrl(1);
|
mvControlling->IncScndCtrl(1);
|
||||||
mvControlling->RunCommand("SpeedCntrl", DesiredSpeed, mvControlling->CabNo);
|
mvControlling->RunCommand("SpeedCntrl", DesiredSpeed, mvControlling->CabNo);
|
||||||
}
|
}
|
||||||
else if (mvControlling->ScndCtrlPosNo > 1)
|
else if ((mvControlling->ScndCtrlPosNo > 1) && (!mvOccupied->SpeedCtrlTypeTime))
|
||||||
{
|
{
|
||||||
int DesiredPos = 1 + mvControlling->ScndCtrlPosNo * ((DesiredSpeed - 1.0) / mvControlling->Vmax);
|
int DesiredPos = 1 + mvControlling->ScndCtrlPosNo * ((DesiredSpeed - 1.0) / mvControlling->Vmax);
|
||||||
while( ( mvControlling->ScndCtrlPos > DesiredPos ) && ( true == mvControlling->DecScndCtrl( 1 ) ) ) { ; } // all work is done in the condition loop
|
while( ( mvControlling->ScndCtrlPos > DesiredPos ) && ( true == mvControlling->DecScndCtrl( 1 ) ) ) { ; } // all work is done in the condition loop
|
||||||
@@ -3408,6 +3446,22 @@ void TController::SetTimeControllers()
|
|||||||
if (mvOccupied->LocalBrakePosA > 0.95) mvOccupied->MainCtrlPos = 1;
|
if (mvOccupied->LocalBrakePosA > 0.95) mvOccupied->MainCtrlPos = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//4. Check Speed Control System
|
||||||
|
if (mvOccupied->EngineType == TEngineType::ElectricInductionMotor && mvOccupied->ScndCtrlPosNo > 1 && mvOccupied->SpeedCtrlTypeTime)
|
||||||
|
{
|
||||||
|
double SpeedCntrlVel =
|
||||||
|
(ActualProximityDist > std::max(50.0, fMaxProximityDist)) ?
|
||||||
|
VelDesired :
|
||||||
|
min_speed(VelDesired, VelNext);
|
||||||
|
SpeedCntrlVel = 10 * std::floor(SpeedCntrlVel*0.1);
|
||||||
|
if (mvOccupied->ScndCtrlPosNo == 4)
|
||||||
|
{
|
||||||
|
if (mvOccupied->NewSpeed + 0.1 < SpeedCntrlVel)
|
||||||
|
mvOccupied->ScndCtrlPos = 3;
|
||||||
|
if (mvOccupied->NewSpeed - 0.1 > SpeedCntrlVel)
|
||||||
|
mvOccupied->ScndCtrlPos = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void TController::CheckTimeControllers()
|
void TController::CheckTimeControllers()
|
||||||
@@ -3440,6 +3494,14 @@ void TController::CheckTimeControllers()
|
|||||||
if (mvOccupied->eimic < 0) mvOccupied->MainCtrlPos = 2;
|
if (mvOccupied->eimic < 0) mvOccupied->MainCtrlPos = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//4. Check Speed Control System
|
||||||
|
if (mvOccupied->EngineType == TEngineType::ElectricInductionMotor && mvOccupied->ScndCtrlPosNo>1 && mvOccupied->SpeedCtrlTypeTime)
|
||||||
|
{
|
||||||
|
if (mvOccupied->ScndCtrlPosNo == 4)
|
||||||
|
{
|
||||||
|
mvOccupied->ScndCtrlPos = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// otwieranie/zamykanie drzwi w składzie albo (tylko AI) EZT
|
// otwieranie/zamykanie drzwi w składzie albo (tylko AI) EZT
|
||||||
@@ -3842,15 +3904,14 @@ bool TController::PutCommand( std::string NewCommand, double NewValue1, double N
|
|||||||
|
|
||||||
if( ( NewCommand == "Shunt" ) || ( NewCommand == "Loose_shunt" ) )
|
if( ( NewCommand == "Shunt" ) || ( NewCommand == "Loose_shunt" ) )
|
||||||
{ // NewValue1 - ilość wagonów (-1=wszystkie); NewValue2: 0=odczep, 1..63=dołącz, -1=bez zmian
|
{ // NewValue1 - ilość wagonów (-1=wszystkie); NewValue2: 0=odczep, 1..63=dołącz, -1=bez zmian
|
||||||
//-3,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1), zmienić kierunek i czekać w
|
//-3,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1), zmienić kierunek i czekać w trybie pociągowym
|
||||||
// trybie pociągowym
|
|
||||||
//-2,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1), zmienić kierunek i czekać
|
//-2,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1), zmienić kierunek i czekać
|
||||||
//-2, y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i czekać
|
//-2, y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i czekać
|
||||||
//-1,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i jechać w powrotną stronę
|
//-1,-y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i jechać w powrotną stronę
|
||||||
//-1, y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i jechać dalej
|
//-1, y - podłączyć do całego stojącego składu (sprzęgiem y>=1) i jechać dalej
|
||||||
//-1, 0 - tryb manewrowy bez zmian (odczepianie z pozostawieniem wagonów nie ma sensu)
|
//-1, 0 - tryb manewrowy bez zmian (odczepianie z pozostawieniem wagonów nie ma sensu)
|
||||||
// 0, 0 - odczepienie lokomotywy
|
// 0, 0 - odczepienie lokomotywy
|
||||||
// 1,-y - podłączyć się do składu (sprzęgiem y>=1), a następnie odczepić i zabrać (x) wagonów
|
// x,-y - podłączyć się do składu (sprzęgiem y>=1), a następnie odczepić i zabrać (x) wagonów
|
||||||
// 1, 0 - odczepienie lokomotywy z jednym wagonem
|
// 1, 0 - odczepienie lokomotywy z jednym wagonem
|
||||||
iDrivigFlags &= ~moveStopHere; // podjeżanie do semaforów zezwolone
|
iDrivigFlags &= ~moveStopHere; // podjeżanie do semaforów zezwolone
|
||||||
if (!iEngineActive)
|
if (!iEngineActive)
|
||||||
@@ -4137,7 +4198,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
Need_TryAgain = true; // reset jak przy wywaleniu nadmiarowego
|
Need_TryAgain = true; // reset jak przy wywaleniu nadmiarowego
|
||||||
}
|
}
|
||||||
// check door state
|
// check door state
|
||||||
auto const switchsides { p->DirectionGet() <= 0 };
|
auto const switchsides { p->DirectionGet() != iDirection };
|
||||||
IsAnyDoorOpen[ side::right ] =
|
IsAnyDoorOpen[ side::right ] =
|
||||||
IsAnyDoorOpen[ side::right ]
|
IsAnyDoorOpen[ side::right ]
|
||||||
|| ( false == vehicle->Doors.instances[ ( switchsides ? side::left : side::right ) ].is_closed );
|
|| ( false == vehicle->Doors.instances[ ( switchsides ? side::left : side::right ) ].is_closed );
|
||||||
@@ -4557,20 +4618,21 @@ TController::UpdateSituation(double dt) {
|
|||||||
auto *vehicleparameters { vehicle->MoverParameters };
|
auto *vehicleparameters { vehicle->MoverParameters };
|
||||||
int const end { ( vehicle->DirectionGet() > 0 ? end::front : end::rear ) };
|
int const end { ( vehicle->DirectionGet() > 0 ? end::front : end::rear ) };
|
||||||
auto const &neighbour { vehicleparameters->Neighbours[ end ] };
|
auto const &neighbour { vehicleparameters->Neighbours[ end ] };
|
||||||
// próba podczepienia
|
if( neighbour.vehicle != nullptr ) {
|
||||||
vehicleparameters->Attach(
|
// próba podczepienia
|
||||||
end, neighbour.vehicle_end,
|
vehicleparameters->Attach(
|
||||||
neighbour.vehicle->MoverParameters,
|
end, neighbour.vehicle_end,
|
||||||
iCoupler );
|
neighbour.vehicle->MoverParameters,
|
||||||
if( vehicleparameters->Couplers[ end ].CouplingFlag == iCoupler ) {
|
iCoupler );
|
||||||
// jeżeli został podłączony
|
if( vehicleparameters->Couplers[ end ].CouplingFlag == iCoupler ) {
|
||||||
iCoupler = 0; // dalsza jazda manewrowa już bez łączenia
|
// jeżeli został podłączony
|
||||||
iDrivigFlags &= ~moveConnect; // zdjęcie flagi doczepiania
|
iCoupler = 0; // dalsza jazda manewrowa już bez łączenia
|
||||||
SetVelocity(0, 0, stopJoin); // wyłączyć przyspieszanie
|
iDrivigFlags &= ~moveConnect; // zdjęcie flagi doczepiania
|
||||||
CheckVehicles(); // sprawdzić światła nowego składu
|
SetVelocity( 0, 0, stopJoin ); // wyłączyć przyspieszanie
|
||||||
JumpToNextOrder(); // wykonanie następnej komendy
|
CheckVehicles(); // sprawdzić światła nowego składu
|
||||||
|
JumpToNextOrder(); // wykonanie następnej komendy
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // if (AIControllFlag) //koniec zblokowania, bo była zmienna lokalna
|
} // if (AIControllFlag) //koniec zblokowania, bo była zmienna lokalna
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -5756,6 +5818,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
// przy odłączaniu nie zwalniamy tu hamulca
|
// przy odłączaniu nie zwalniamy tu hamulca
|
||||||
if( AbsAccS < AccDesired - 0.05 ) {
|
if( AbsAccS < AccDesired - 0.05 ) {
|
||||||
// jeśli opóźnienie większe od wymaganego (z histerezą) luzowanie, gdy za dużo
|
// jeśli opóźnienie większe od wymaganego (z histerezą) luzowanie, gdy za dużo
|
||||||
|
// TBD: check if the condition isn't redundant with the DecBrake() code
|
||||||
if( /*GBH mvOccupied->BrakeCtrlPos*/BrakeCtrlPosition >= 0 ) {
|
if( /*GBH mvOccupied->BrakeCtrlPos*/BrakeCtrlPosition >= 0 ) {
|
||||||
DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu
|
DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu
|
||||||
}
|
}
|
||||||
@@ -6520,6 +6583,9 @@ void TController::TakeControl(bool yes)
|
|||||||
void TController::DirectionForward(bool forward)
|
void TController::DirectionForward(bool forward)
|
||||||
{ // ustawienie jazdy do przodu dla true i do tyłu dla false (zależy od kabiny)
|
{ // ustawienie jazdy do przodu dla true i do tyłu dla false (zależy od kabiny)
|
||||||
ZeroSpeed( true ); // TODO: check if force switch is needed anymore here
|
ZeroSpeed( true ); // TODO: check if force switch is needed anymore here
|
||||||
|
// HACK: make sure the master controller isn't set in position which prevents direction change
|
||||||
|
mvControlling->MainCtrlPos = std::min( mvControlling->MainCtrlPos, mvControlling->MaxMainCtrlPosNoDirChange );
|
||||||
|
|
||||||
if( forward ) {
|
if( forward ) {
|
||||||
// do przodu w obecnej kabinie
|
// do przodu w obecnej kabinie
|
||||||
while( ( mvOccupied->ActiveDir <= 0 )
|
while( ( mvOccupied->ActiveDir <= 0 )
|
||||||
|
|||||||
10
DynObj.cpp
10
DynObj.cpp
@@ -2734,6 +2734,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
MoverParameters->eimic_real = eimic;
|
MoverParameters->eimic_real = eimic;
|
||||||
MoverParameters->SendCtrlToNext("EIMIC", Max0R(0, eimic), MoverParameters->CabNo);
|
MoverParameters->SendCtrlToNext("EIMIC", Max0R(0, eimic), MoverParameters->CabNo);
|
||||||
auto LBR = Max0R(-eimic, 0);
|
auto LBR = Max0R(-eimic, 0);
|
||||||
|
auto eim_lb = (Mechanik->AIControllFlag || !MoverParameters->LocHandleTimeTraxx ? 0 : MoverParameters->eim_localbrake);
|
||||||
|
|
||||||
// 1. ustal wymagana sile hamowania calego pociagu
|
// 1. ustal wymagana sile hamowania calego pociagu
|
||||||
// - opoznienie moze byc ustalane na podstawie charakterystyki
|
// - opoznienie moze byc ustalane na podstawie charakterystyki
|
||||||
@@ -2964,6 +2965,11 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
p->MoverParameters->LocalBrakePosAEIM = p->MoverParameters->LocalBrakePosAEIM;
|
p->MoverParameters->LocalBrakePosAEIM = p->MoverParameters->LocalBrakePosAEIM;
|
||||||
else
|
else
|
||||||
p->MoverParameters->LocalBrakePosAEIM = 0;
|
p->MoverParameters->LocalBrakePosAEIM = 0;
|
||||||
|
if (p->MoverParameters->LocHandleTimeTraxx)
|
||||||
|
{
|
||||||
|
p->MoverParameters->eim_localbrake = eim_lb;
|
||||||
|
p->MoverParameters->LocalBrakePosAEIM = std::max(p->MoverParameters->LocalBrakePosAEIM, eim_lb);
|
||||||
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6854,6 +6860,9 @@ vehicle_table::update_traction( TDynamicObject *Vehicle ) {
|
|||||||
if( pantograph->hvPowerWire != nullptr ) {
|
if( pantograph->hvPowerWire != nullptr ) {
|
||||||
// jeżeli znamy drut z poprzedniego przebiegu
|
// jeżeli znamy drut z poprzedniego przebiegu
|
||||||
for( int attempts = 0; attempts < 30; ++attempts ) {
|
for( int attempts = 0; attempts < 30; ++attempts ) {
|
||||||
|
// sanity check. shouldn't happen in theory, but did happen in practice
|
||||||
|
if( pantograph->hvPowerWire == nullptr ) { break; }
|
||||||
|
|
||||||
// powtarzane aż do znalezienia odpowiedniego odcinka na liście dwukierunkowej
|
// powtarzane aż do znalezienia odpowiedniego odcinka na liście dwukierunkowej
|
||||||
if( pantograph->hvPowerWire->iLast & 0x3 ) {
|
if( pantograph->hvPowerWire->iLast & 0x3 ) {
|
||||||
// dla ostatniego i przedostatniego przęsła wymuszamy szukanie innego
|
// dla ostatniego i przedostatniego przęsła wymuszamy szukanie innego
|
||||||
@@ -6869,6 +6878,7 @@ vehicle_table::update_traction( TDynamicObject *Vehicle ) {
|
|||||||
}
|
}
|
||||||
// obliczamy wyraz wolny równania płaszczyzny (to miejsce nie jest odpowienie)
|
// obliczamy wyraz wolny równania płaszczyzny (to miejsce nie jest odpowienie)
|
||||||
// podstawiamy równanie parametryczne drutu do równania płaszczyzny pantografu
|
// podstawiamy równanie parametryczne drutu do równania płaszczyzny pantografu
|
||||||
|
// TODO: investigate this routine with reardriver/negative speed, does it picks the right wire?
|
||||||
auto const fRaParam =
|
auto const fRaParam =
|
||||||
-( glm::dot( pantograph->hvPowerWire->pPoint1, vFront ) - glm::dot( pant0, vFront ) )
|
-( glm::dot( pantograph->hvPowerWire->pPoint1, vFront ) - glm::dot( pant0, vFront ) )
|
||||||
/ glm::dot( pantograph->hvPowerWire->vParametric, vFront );
|
/ glm::dot( pantograph->hvPowerWire->vParametric, vFront );
|
||||||
|
|||||||
@@ -906,6 +906,7 @@ public:
|
|||||||
TBrakeValve BrakeValve = TBrakeValve::NoValve;
|
TBrakeValve BrakeValve = TBrakeValve::NoValve;
|
||||||
TBrakeHandle BrakeHandle = TBrakeHandle::NoHandle;
|
TBrakeHandle BrakeHandle = TBrakeHandle::NoHandle;
|
||||||
TBrakeHandle BrakeLocHandle = TBrakeHandle::NoHandle;
|
TBrakeHandle BrakeLocHandle = TBrakeHandle::NoHandle;
|
||||||
|
bool LocHandleTimeTraxx = false; /*hamulec dodatkowy typu traxx*/
|
||||||
double MBPM = 1.0; /*masa najwiekszego cisnienia*/
|
double MBPM = 1.0; /*masa najwiekszego cisnienia*/
|
||||||
|
|
||||||
std::shared_ptr<TBrake> Hamulec;
|
std::shared_ptr<TBrake> Hamulec;
|
||||||
@@ -1145,6 +1146,7 @@ public:
|
|||||||
double AccN = 0.0; // przyspieszenie normalne w [m/s^2]
|
double AccN = 0.0; // przyspieszenie normalne w [m/s^2]
|
||||||
double AccVert = 0.0; // vertical acceleration
|
double AccVert = 0.0; // vertical acceleration
|
||||||
double nrot = 0.0;
|
double nrot = 0.0;
|
||||||
|
double nrot_eps = 0.0; //przyspieszenie kątowe kół (bez kierunku)
|
||||||
double WheelFlat = 0.0;
|
double WheelFlat = 0.0;
|
||||||
bool TruckHunting { true }; // enable/disable truck hunting calculation
|
bool TruckHunting { true }; // enable/disable truck hunting calculation
|
||||||
/*! rotacja kol [obr/s]*/
|
/*! rotacja kol [obr/s]*/
|
||||||
@@ -1320,6 +1322,7 @@ public:
|
|||||||
/*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/
|
/*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/
|
||||||
double eimic = 0; /*aktualna pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
double eimic = 0; /*aktualna pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
||||||
double eimic_real = 0; /*faktycznie uzywana pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
double eimic_real = 0; /*faktycznie uzywana pozycja zintegrowanego sterowania jazda i hamowaniem*/
|
||||||
|
double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/
|
||||||
int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/
|
int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/
|
||||||
bool SpeedCtrlTypeTime = false; /*czy tempomat sterowany czasowo*/
|
bool SpeedCtrlTypeTime = false; /*czy tempomat sterowany czasowo*/
|
||||||
double eimv_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/
|
double eimv_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/
|
||||||
|
|||||||
@@ -613,7 +613,7 @@ bool TMoverParameters::Dettach(int ConnectNo)
|
|||||||
|
|
||||||
bool TMoverParameters::DirectionForward()
|
bool TMoverParameters::DirectionForward()
|
||||||
{
|
{
|
||||||
if ((MainCtrlPosNo > 0) && (ActiveDir < 1) && (MainCtrlPos <= MaxMainCtrlPosNoDirChange) && (EIMDirectionChangeAllow()))
|
if ((MainCtrlPosNo > 0) && (ActiveDir < 1) && (EIMDirectionChangeAllow()))
|
||||||
{
|
{
|
||||||
++ActiveDir;
|
++ActiveDir;
|
||||||
DirAbsolute = ActiveDir * CabNo;
|
DirAbsolute = ActiveDir * CabNo;
|
||||||
@@ -2349,7 +2349,7 @@ bool TMoverParameters::DirectionBackward(void)
|
|||||||
DB = true; //
|
DB = true; //
|
||||||
return DB; // exit; TODO: czy dobrze przetlumaczone?
|
return DB; // exit; TODO: czy dobrze przetlumaczone?
|
||||||
}
|
}
|
||||||
if ((MainCtrlPosNo > 0) && (ActiveDir > -1) && (MainCtrlPos <= MaxMainCtrlPosNoDirChange) && (EIMDirectionChangeAllow()))
|
if ((MainCtrlPosNo > 0) && (ActiveDir > -1) && (EIMDirectionChangeAllow()))
|
||||||
{
|
{
|
||||||
if (EngineType == TEngineType::WheelsDriven)
|
if (EngineType == TEngineType::WheelsDriven)
|
||||||
CabNo--;
|
CabNo--;
|
||||||
@@ -2367,7 +2367,11 @@ bool TMoverParameters::DirectionBackward(void)
|
|||||||
bool TMoverParameters::EIMDirectionChangeAllow(void)
|
bool TMoverParameters::EIMDirectionChangeAllow(void)
|
||||||
{
|
{
|
||||||
bool OK = false;
|
bool OK = false;
|
||||||
|
/*
|
||||||
|
// NOTE: disabled while eimic variables aren't immediately synced with master controller changes inside ai module
|
||||||
OK = (EngineType != TEngineType::ElectricInductionMotor || ((eimic <= 0) && (eimic_real <= 0) && (Vel < 0.1)));
|
OK = (EngineType != TEngineType::ElectricInductionMotor || ((eimic <= 0) && (eimic_real <= 0) && (Vel < 0.1)));
|
||||||
|
*/
|
||||||
|
OK = ( MainCtrlPos <= MaxMainCtrlPosNoDirChange );
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3696,7 +3700,7 @@ void TMoverParameters::UpdatePipePressure(double dt)
|
|||||||
Pipe->Flow( temp * Hamulec->GetPF( temp * PipePress, dt, Vel ) + GetDVc( dt ) );
|
Pipe->Flow( temp * Hamulec->GetPF( temp * PipePress, dt, Vel ) + GetDVc( dt ) );
|
||||||
|
|
||||||
if (ASBType == 128)
|
if (ASBType == 128)
|
||||||
Hamulec->ASB(int(SlippingWheels));
|
Hamulec->ASB(int(SlippingWheels && (Vel>1))*(1+2*int(nrot_eps<-0.01)));
|
||||||
|
|
||||||
dpPipe = 0;
|
dpPipe = 0;
|
||||||
|
|
||||||
@@ -3944,6 +3948,7 @@ void TMoverParameters::ComputeTotalForce(double dt) {
|
|||||||
|
|
||||||
// juz zoptymalizowane:
|
// juz zoptymalizowane:
|
||||||
FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // siła oporów ruchu
|
FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // siła oporów ruchu
|
||||||
|
double old_nrot = abs(nrot);
|
||||||
nrot = v2n(); // przeliczenie prędkości liniowej na obrotową
|
nrot = v2n(); // przeliczenie prędkości liniowej na obrotową
|
||||||
|
|
||||||
if( ( true == TestFlag( BrakeMethod, bp_MHS ) )
|
if( ( true == TestFlag( BrakeMethod, bp_MHS ) )
|
||||||
@@ -4016,8 +4021,9 @@ void TMoverParameters::ComputeTotalForce(double dt) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Fb = -Fwheels*Sign(V);
|
double factor = (FTrain - Fb * Sign(V) != 0 ? Fwheels/(FTrain - Fb * Sign(V)) : 1.0);
|
||||||
FTrain = 0;
|
Fb *= factor;
|
||||||
|
FTrain *= factor;
|
||||||
}
|
}
|
||||||
if (nrot < 0.1)
|
if (nrot < 0.1)
|
||||||
{
|
{
|
||||||
@@ -4026,6 +4032,7 @@ void TMoverParameters::ComputeTotalForce(double dt) {
|
|||||||
|
|
||||||
nrot = temp_nrot;
|
nrot = temp_nrot;
|
||||||
}
|
}
|
||||||
|
nrot_eps = (abs(nrot) - (old_nrot))/dt;
|
||||||
// doliczenie sił z innych pojazdów
|
// doliczenie sił z innych pojazdów
|
||||||
for( int end = end::front; end <= end::rear; ++end ) {
|
for( int end = end::front; end <= end::rear; ++end ) {
|
||||||
if( Neighbours[ end ].vehicle != nullptr ) {
|
if( Neighbours[ end ].vehicle != nullptr ) {
|
||||||
@@ -4318,6 +4325,7 @@ double TMoverParameters::CouplerForce( int const End, double dt ) {
|
|||||||
// zderzenie
|
// zderzenie
|
||||||
coupler.CheckCollision = true;
|
coupler.CheckCollision = true;
|
||||||
if( ( coupler.CouplerType == TCouplerType::Automatic )
|
if( ( coupler.CouplerType == TCouplerType::Automatic )
|
||||||
|
&& ( coupler.CouplerType == othercoupler.CouplerType )
|
||||||
&& ( coupler.CouplingFlag == coupling::faux ) ) {
|
&& ( coupler.CouplingFlag == coupling::faux ) ) {
|
||||||
// sprzeganie wagonow z samoczynnymi sprzegami
|
// sprzeganie wagonow z samoczynnymi sprzegami
|
||||||
// EN57
|
// EN57
|
||||||
@@ -6000,6 +6008,26 @@ void TMoverParameters::CheckEIMIC(double dt)
|
|||||||
}
|
}
|
||||||
if (MainCtrlPos >= 3 && eimic < 0) eimic = 0;
|
if (MainCtrlPos >= 3 && eimic < 0) eimic = 0;
|
||||||
if (MainCtrlPos <= 3 && eimic > 0) eimic = 0;
|
if (MainCtrlPos <= 3 && eimic > 0) eimic = 0;
|
||||||
|
if (LocHandleTimeTraxx)
|
||||||
|
{
|
||||||
|
if (LocalBrakeRatio() < 0.05) //pozycja 0
|
||||||
|
{
|
||||||
|
eim_localbrake -= dt*0.17; //zmniejszanie
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LocalBrakeRatio() > 0.15) //pozycja 2
|
||||||
|
{
|
||||||
|
eim_localbrake += dt*0.17; //wzrastanie
|
||||||
|
eim_localbrake = std::max(eim_localbrake, BrakePress / MaxBrakePress[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (eim_localbrake < Hamulec->GetEDBCP() / MaxBrakePress[0])
|
||||||
|
eim_localbrake = 0;
|
||||||
|
}
|
||||||
|
eim_localbrake = clamp(eim_localbrake, 0.0, 1.0);
|
||||||
|
if (eim_localbrake > 0.04 && eimic > 0) eimic = 0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
switch (MainCtrlPos)
|
switch (MainCtrlPos)
|
||||||
@@ -8620,6 +8648,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) {
|
|||||||
extract_value( CoupledCtrl, "CoupledCtrl", line, "" );
|
extract_value( CoupledCtrl, "CoupledCtrl", line, "" );
|
||||||
extract_value( EIMCtrlType, "EIMCtrlType", line, "" );
|
extract_value( EIMCtrlType, "EIMCtrlType", line, "" );
|
||||||
clamp( EIMCtrlType, 0, 3 );
|
clamp( EIMCtrlType, 0, 3 );
|
||||||
|
LocHandleTimeTraxx = (extract_value("LocalBrakeTraxx", line) == "Yes");
|
||||||
|
|
||||||
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR
|
||||||
|
|
||||||
|
|||||||
@@ -391,7 +391,8 @@ void TBrake::SetEPS( double const nEPS )
|
|||||||
|
|
||||||
void TBrake::ASB( int const state )
|
void TBrake::ASB( int const state )
|
||||||
{ // 255-b_asb(32)
|
{ // 255-b_asb(32)
|
||||||
BrakeStatus = (BrakeStatus & ~b_asb) | ( state * b_asb );
|
BrakeStatus = (BrakeStatus & ~b_asb) | ( (state / 2) * b_asb );
|
||||||
|
BrakeStatus = (BrakeStatus & ~b_asb_unbrake) | ( (state % 2) * b_asb_unbrake);
|
||||||
}
|
}
|
||||||
|
|
||||||
int TBrake::GetStatus()
|
int TBrake::GetStatus()
|
||||||
@@ -1551,7 +1552,7 @@ double TEStED::GetPF( double const PP, double const dt, double const Vel )
|
|||||||
// powtarzacz — podwojny zawor zwrotny
|
// powtarzacz — podwojny zawor zwrotny
|
||||||
temp = Max0R(LoadC * BCP / temp * Min0R(Max0R(1 - EDFlag, 0), 1), LBP);
|
temp = Max0R(LoadC * BCP / temp * Min0R(Max0R(1 - EDFlag, 0), 1), LBP);
|
||||||
double speed = 1;
|
double speed = 1;
|
||||||
if ((ASBP < 0.1) && ((BrakeStatus & b_asb) == b_asb))
|
if ((ASBP < 0.1) && ((BrakeStatus & b_asb_unbrake) == b_asb_unbrake))
|
||||||
{
|
{
|
||||||
temp = 0;
|
temp = 0;
|
||||||
speed = 3;
|
speed = 3;
|
||||||
@@ -1559,7 +1560,7 @@ double TEStED::GetPF( double const PP, double const dt, double const Vel )
|
|||||||
|
|
||||||
if ((BrakeCyl->P() > temp))
|
if ((BrakeCyl->P() > temp))
|
||||||
dv = -PFVd(BrakeCyl->P(), 0, 0.02 * SizeBC * speed, temp) * dt;
|
dv = -PFVd(BrakeCyl->P(), 0, 0.02 * SizeBC * speed, temp) * dt;
|
||||||
else if ((BrakeCyl->P() < temp))
|
else if ((BrakeCyl->P() < temp) && ((BrakeStatus & b_asb) == 0))
|
||||||
dv = PFVa(BVP, BrakeCyl->P(), 0.02 * SizeBC, temp) * dt;
|
dv = PFVa(BVP, BrakeCyl->P(), 0.02 * SizeBC, temp) * dt;
|
||||||
else
|
else
|
||||||
dv = 0;
|
dv = 0;
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ static int const b_on = 2; //napelnianie
|
|||||||
static int const b_rfl = 4; //uzupelnianie
|
static int const b_rfl = 4; //uzupelnianie
|
||||||
static int const b_rls = 8; //odluzniacz
|
static int const b_rls = 8; //odluzniacz
|
||||||
static int const b_ep = 16; //elektropneumatyczny
|
static int const b_ep = 16; //elektropneumatyczny
|
||||||
static int const b_asb = 32; //elektropneumatyczny
|
static int const b_asb = 32; //przeciwposlizg-wstrzymanie
|
||||||
|
static int const b_asb_unbrake = 64; //przeciwposlizg-luzowanie
|
||||||
static int const b_dmg = 128; //wylaczony z dzialania
|
static int const b_dmg = 128; //wylaczony z dzialania
|
||||||
|
|
||||||
/*uszkodzenia hamulca*/
|
/*uszkodzenia hamulca*/
|
||||||
|
|||||||
@@ -5726,6 +5726,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
btLampkaMalfunction.Turn( mvControlled->dizel_heat.PA );
|
btLampkaMalfunction.Turn( mvControlled->dizel_heat.PA );
|
||||||
btLampkaMotorBlowers.Turn( ( mvControlled->MotorBlowers[ end::front ].is_active ) && ( mvControlled->MotorBlowers[ end::rear ].is_active ) );
|
btLampkaMotorBlowers.Turn( ( mvControlled->MotorBlowers[ end::front ].is_active ) && ( mvControlled->MotorBlowers[ end::rear ].is_active ) );
|
||||||
btLampkaCoolingFans.Turn( mvControlled->RventRot > 1.0 );
|
btLampkaCoolingFans.Turn( mvControlled->RventRot > 1.0 );
|
||||||
|
btLampkaTempomat.Turn( mvControlled->ScndCtrlPos > 0 );
|
||||||
// universal devices state indicators
|
// universal devices state indicators
|
||||||
for( auto idx = 0; idx < btUniversals.size(); ++idx ) {
|
for( auto idx = 0; idx < btUniversals.size(); ++idx ) {
|
||||||
btUniversals[ idx ].Turn( ggUniversals[ idx ].GetValue() > 0.5 );
|
btUniversals[ idx ].Turn( ggUniversals[ idx ].GetValue() > 0.5 );
|
||||||
@@ -5787,6 +5788,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
btLampkaMalfunction.Turn( false );
|
btLampkaMalfunction.Turn( false );
|
||||||
btLampkaMotorBlowers.Turn( false );
|
btLampkaMotorBlowers.Turn( false );
|
||||||
btLampkaCoolingFans.Turn( false );
|
btLampkaCoolingFans.Turn( false );
|
||||||
|
btLampkaTempomat.Turn( false );
|
||||||
// universal devices state indicators
|
// universal devices state indicators
|
||||||
for( auto &universal : btUniversals ) {
|
for( auto &universal : btUniversals ) {
|
||||||
universal.Turn( false );
|
universal.Turn( false );
|
||||||
@@ -7565,6 +7567,7 @@ void TTrain::clear_cab_controls()
|
|||||||
btLampkaMalfunctionB.Clear();
|
btLampkaMalfunctionB.Clear();
|
||||||
btLampkaMotorBlowers.Clear();
|
btLampkaMotorBlowers.Clear();
|
||||||
btLampkaCoolingFans.Clear();
|
btLampkaCoolingFans.Clear();
|
||||||
|
btLampkaTempomat.Clear();
|
||||||
|
|
||||||
ggLeftLightButton.Clear();
|
ggLeftLightButton.Clear();
|
||||||
ggRightLightButton.Clear();
|
ggRightLightButton.Clear();
|
||||||
@@ -7910,6 +7913,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
|
|||||||
{ "i-vent_trim:", btLampkaWentZaluzje },
|
{ "i-vent_trim:", btLampkaWentZaluzje },
|
||||||
{ "i-motorblowers:", btLampkaMotorBlowers },
|
{ "i-motorblowers:", btLampkaMotorBlowers },
|
||||||
{ "i-coolingfans:", btLampkaCoolingFans },
|
{ "i-coolingfans:", btLampkaCoolingFans },
|
||||||
|
{ "i-tempomat:", btLampkaTempomat },
|
||||||
{ "i-trainheating:", btLampkaOgrzewanieSkladu },
|
{ "i-trainheating:", btLampkaOgrzewanieSkladu },
|
||||||
{ "i-security_aware:", btLampkaCzuwaka },
|
{ "i-security_aware:", btLampkaCzuwaka },
|
||||||
{ "i-security_cabsignal:", btLampkaSHP },
|
{ "i-security_cabsignal:", btLampkaSHP },
|
||||||
|
|||||||
1
Train.h
1
Train.h
@@ -591,6 +591,7 @@ public: // reszta może by?publiczna
|
|||||||
TButton btLampkaMalfunctionB;
|
TButton btLampkaMalfunctionB;
|
||||||
TButton btLampkaMotorBlowers;
|
TButton btLampkaMotorBlowers;
|
||||||
TButton btLampkaCoolingFans;
|
TButton btLampkaCoolingFans;
|
||||||
|
TButton btLampkaTempomat;
|
||||||
|
|
||||||
TButton btCabLight; // hunter-171012: lampa oswietlajaca kabine
|
TButton btCabLight; // hunter-171012: lampa oswietlajaca kabine
|
||||||
// Ra 2013-12: wirtualne "lampki" do odbijania na haslerze w PoKeys
|
// Ra 2013-12: wirtualne "lampki" do odbijania na haslerze w PoKeys
|
||||||
|
|||||||
Reference in New Issue
Block a user