mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-17 23:39:18 +02:00
build 170831. scan table fixes, emergency brake control, mouse support for manual brake
This commit is contained in:
51
Driver.cpp
51
Driver.cpp
@@ -376,9 +376,15 @@ void TSpeedPos::Set(TTrack *track, double dist, int flag)
|
||||
fVelNext = (trTrack->iCategoryFlag & 1) ?
|
||||
0.0 :
|
||||
20.0; // jeśli koniec, to pociąg stój, a samochód zwolnij
|
||||
/*
|
||||
vPos = (((iFlags & spReverse) != 0) != ((iFlags & spEnd) != 0)) ?
|
||||
trTrack->CurrentSegment()->FastGetPoint_1() :
|
||||
trTrack->CurrentSegment()->FastGetPoint_0();
|
||||
*/
|
||||
vPos =
|
||||
( iFlags & spReverse ) ?
|
||||
trTrack->CurrentSegment()->FastGetPoint_1() :
|
||||
trTrack->CurrentSegment()->FastGetPoint_0();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -648,8 +654,9 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
|
||||
else
|
||||
{ // definitywny koniec skanowania, chyba że dalej puszczamy samochód po gruncie...
|
||||
if( ( iLast == -1 )
|
||||
|| ( false == TestFlag( sSpeedTable[iLast].iFlags, spEnabled | spEnd ) ) ) {
|
||||
// only if we haven't already marked end of the track
|
||||
|| ( ( false == TestFlag( sSpeedTable[iLast].iFlags, spEnabled | spEnd ) )
|
||||
&& ( sSpeedTable[iLast].trTrack != tLast ) ) ) {
|
||||
// only if we haven't already marked end of the track and if the new track doesn't duplicate last one
|
||||
if( TableAddNew() ) {
|
||||
// zapisanie ostatniego sprawdzonego toru
|
||||
sSpeedTable[iLast].Set(
|
||||
@@ -659,6 +666,11 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
|
||||
spEnabled | spEnd ));
|
||||
}
|
||||
}
|
||||
else if( sSpeedTable[ iLast ].trTrack == tLast ) {
|
||||
// otherwise just mark the last added track as the final one
|
||||
// TODO: investigate exactly how we can wind up not marking the last existing track as actual end
|
||||
sSpeedTable[ iLast ].iFlags |= spEnd;
|
||||
}
|
||||
// to ostatnia pozycja, bo NULL nic nie da, a może się podpiąć obrotnica, czy jakieś transportery
|
||||
return;
|
||||
}
|
||||
@@ -703,7 +715,7 @@ void TController::TableCheck(double fDistance)
|
||||
}
|
||||
if (sSpeedTable[i].iFlags & spTrack) // jeśli odcinek
|
||||
{
|
||||
if (sSpeedTable[i].fDist < -fLength) // a skład wyjechał całą długością poza
|
||||
if (sSpeedTable[i].fDist + sSpeedTable[i].trTrack->Length() < -fLength) // a skład wyjechał całą długością poza
|
||||
{ // degradacja pozycji
|
||||
sSpeedTable[i].iFlags &= ~spEnabled; // nie liczy się
|
||||
}
|
||||
@@ -996,10 +1008,10 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
}
|
||||
} // koniec obsługi W4
|
||||
v = sSpeedTable[i].fVelNext; // odczyt prędkości do zmiennej pomocniczej
|
||||
if (sSpeedTable[i].iFlags &
|
||||
spSwitch) // zwrotnice są usuwane z tabelki dopiero po zjechaniu z nich
|
||||
iDrivigFlags |=
|
||||
moveSwitchFound; // rozjazd z przodu/pod ogranicza np. sens skanowania wstecz
|
||||
if( sSpeedTable[ i ].iFlags & spSwitch ) {
|
||||
// zwrotnice są usuwane z tabelki dopiero po zjechaniu z nich
|
||||
iDrivigFlags |= moveSwitchFound; // rozjazd z przodu/pod ogranicza np. sens skanowania wstecz
|
||||
}
|
||||
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
|
||||
@@ -1270,12 +1282,13 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
else if (sSpeedTable[i].iFlags & spTrack) // jeśli tor
|
||||
{ // tor ogranicza prędkość, dopóki cały skład nie przejedzie,
|
||||
// d=fLength+d; //zamiana na długość liczoną do przodu
|
||||
if (v >= 1.0) // EU06 się zawieszało po dojechaniu na koniec toru postojowego
|
||||
if (d < -fLength)
|
||||
if( v >= 1.0 ) // EU06 się zawieszało po dojechaniu na koniec toru postojowego
|
||||
if( d + sSpeedTable[ i ].trTrack->Length() < -fLength )
|
||||
continue; // zapętlenie, jeśli już wyjechał za ten odcinek
|
||||
if (v < fVelDes)
|
||||
fVelDes =
|
||||
v; // ograniczenie aktualnej prędkości aż do wyjechania za ograniczenie
|
||||
if( v < fVelDes ) {
|
||||
// ograniczenie aktualnej prędkości aż do wyjechania za ograniczenie
|
||||
fVelDes = v;
|
||||
}
|
||||
// if (v==0.0) fAcc=-0.9; //hamowanie jeśli stop
|
||||
continue; // i tyle wystarczy
|
||||
}
|
||||
@@ -1298,8 +1311,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
||||
} // if (v>=0.0)
|
||||
if (fNext >= 0.0)
|
||||
{ // jeśli ograniczenie
|
||||
if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) ==
|
||||
(spEnabled | spEvent)) // tylko sygnał przypisujemy
|
||||
if ((sSpeedTable[i].iFlags & (spEnabled | spEvent)) == (spEnabled | spEvent)) // tylko sygnał przypisujemy
|
||||
if (!eSignNext) // jeśli jeszcze nic nie zapisane tam
|
||||
eSignNext = sSpeedTable[i].evEvent; // dla informacji
|
||||
if (fNext == 0.0)
|
||||
@@ -3590,7 +3602,7 @@ TController::UpdateSituation(double dt) {
|
||||
// czy stan się nie zmienił.
|
||||
// 4. Ewentualnie uzupełnić tabelkę informacjami o sygnałach i ograniczeniach, jeśli się
|
||||
// "zużyła".
|
||||
TableCheck(routescanrange); // wypełnianie tabelki i aktualizacja odległości
|
||||
TableCheck( routescanrange ); // wypełnianie tabelki i aktualizacja odległości
|
||||
// 5. Sprawdzić stany sygnalizacji zapisanej w tabelce, wyznaczyć prędkości.
|
||||
// 6. Z tabelki wyznaczyć krytyczną odległość i prędkość (najmniejsze przyspieszenie).
|
||||
// 7. Jeśli jest inny pojazd z przodu, ewentualnie skorygować odległość i prędkość.
|
||||
@@ -4664,9 +4676,12 @@ TController::UpdateSituation(double dt) {
|
||||
// Ra 2F1H: jest konflikt histerezy pomiędzy nastawioną pozycją a uzyskiwanym
|
||||
// przyspieszeniem - utrzymanie pozycji powoduje przekroczenie przyspieszenia
|
||||
if( AbsAccS < AccDesired ) {
|
||||
// jeśli przyspieszenie pojazdu jest mniejsze niż żądane oraz
|
||||
if( vel < VelDesired - fVelMinus ) {
|
||||
// jeśli prędkość w kierunku czoła jest mniejsza od dozwolonej o margines
|
||||
// jeśli przyspieszenie pojazdu jest mniejsze niż żądane oraz...
|
||||
if( vel < (
|
||||
VelDesired == 1.0 ? // work around for trains getting stuck on tracks with speed limit = 1
|
||||
VelDesired :
|
||||
VelDesired - fVelMinus ) ) {
|
||||
// ...jeśli prędkość w kierunku czoła jest mniejsza od dozwolonej o margines
|
||||
if( ( ActualProximityDist > (
|
||||
mvOccupied->CategoryFlag & 2 ?
|
||||
fMinProximityDist : // cars are allowed to move within min proximity distance
|
||||
|
||||
@@ -867,7 +867,7 @@ public:
|
||||
/*
|
||||
int BrakeStatus = b_off; //0 - odham, 1 - ham., 2 - uszk., 4 - odluzniacz, 8 - antyposlizg, 16 - uzyte EP, 32 - pozycja R, 64 - powrot z R
|
||||
*/
|
||||
bool EmergencyBrakeFlag = false; // manual emergency brake
|
||||
bool AlarmChainFlag = false; // manual emergency brake
|
||||
bool RadioStopFlag = false; /*hamowanie nagle*/
|
||||
int BrakeDelayFlag = 0; /*nastawa opoznienia ham. osob/towar/posp/exp 0/1/2/4*/
|
||||
int BrakeDelays = 0; /*nastawy mozliwe do uzyskania*/
|
||||
@@ -1084,6 +1084,7 @@ public:
|
||||
bool DecManualBrakeLevel(int CtrlSpeed);
|
||||
bool DynamicBrakeSwitch(bool Switch);
|
||||
bool RadiostopSwitch(bool Switch);
|
||||
bool AlarmChainSwitch( bool const State );
|
||||
bool AntiSlippingBrake(void);
|
||||
bool BrakeReleaser(int state);
|
||||
bool SwitchEPBrake(int state);
|
||||
|
||||
@@ -1082,7 +1082,7 @@ void TMoverParameters::CollisionDetect(int CouplerN, double dt)
|
||||
EventFlag = true;
|
||||
|
||||
if ((coupler.CouplingFlag & ctrain_pneumatic) == ctrain_pneumatic)
|
||||
EmergencyBrakeFlag = true; // hamowanie nagle - zerwanie przewodow hamulcowych
|
||||
AlarmChainFlag = true; // hamowanie nagle - zerwanie przewodow hamulcowych
|
||||
coupler.CouplingFlag = 0;
|
||||
|
||||
switch (CouplerN) // wyzerowanie flag podlaczenia ale ciagle sa wirtualnie polaczone
|
||||
@@ -2780,31 +2780,46 @@ bool TMoverParameters::DynamicBrakeSwitch(bool Switch)
|
||||
bool TMoverParameters::RadiostopSwitch(bool Switch)
|
||||
{
|
||||
bool EBS;
|
||||
if ((BrakeSystem != Individual) && (BrakeCtrlPosNo > 0))
|
||||
{
|
||||
if ((!RadioStopFlag) && Switch)
|
||||
{
|
||||
if( ( BrakeSystem != Individual )
|
||||
&& ( BrakeCtrlPosNo > 0 ) ) {
|
||||
|
||||
if( ( true == Switch )
|
||||
&& ( false == RadioStopFlag ) ) {
|
||||
RadioStopFlag = Switch;
|
||||
EBS = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((abs(V) < 0.1) &&
|
||||
(Switch == false)) // odblokowanie hamulca bezpieczenistwa tylko po zatrzymaniu
|
||||
{
|
||||
else {
|
||||
if( ( Switch == false )
|
||||
&& ( std::abs( V ) < 0.1 ) ) {
|
||||
// odblokowanie hamulca bezpieczenistwa tylko po zatrzymaniu
|
||||
RadioStopFlag = Switch;
|
||||
EBS = true;
|
||||
}
|
||||
else
|
||||
else {
|
||||
EBS = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
EBS = false; // nie ma hamulca bezpieczenstwa gdy nie ma hamulca zesp.
|
||||
else {
|
||||
// nie ma hamulca bezpieczenstwa gdy nie ma hamulca zesp.
|
||||
EBS = false;
|
||||
}
|
||||
|
||||
return EBS;
|
||||
}
|
||||
|
||||
bool TMoverParameters::AlarmChainSwitch( bool const State ) {
|
||||
|
||||
bool stateswitched { false };
|
||||
|
||||
if( AlarmChainFlag != State ) {
|
||||
// simple routine for the time being
|
||||
AlarmChainFlag = State;
|
||||
stateswitched = true;
|
||||
}
|
||||
return stateswitched;
|
||||
}
|
||||
|
||||
// *************************************************************************************************
|
||||
// Q: 20160710
|
||||
// hamowanie przeciwpoślizgowe
|
||||
@@ -3282,12 +3297,19 @@ void TMoverParameters::UpdatePipePressure(double dt)
|
||||
Pipe2->Flow(dpMainValve);
|
||||
}
|
||||
|
||||
// if(EmergencyBrakeFlag)and(BrakeCtrlPosNo=0)then //ulepszony hamulec bezp.
|
||||
if ((RadioStopFlag) || (TestFlag(SecuritySystem.Status, s_SHPebrake)) ||
|
||||
(TestFlag(SecuritySystem.Status, s_CAebrake)) ||
|
||||
(s_CAtestebrake == true) ||
|
||||
(TestFlag(EngDmgFlag, 32)) /* or (not Battery)*/) // ulepszony hamulec bezp.
|
||||
dpMainValve = dpMainValve + PF(0, PipePress, 0.15) * dt;
|
||||
// ulepszony hamulec bezp.
|
||||
if( ( true == RadioStopFlag )
|
||||
|| ( true == AlarmChainFlag )
|
||||
|| ( true == TestFlag( SecuritySystem.Status, s_SHPebrake ) )
|
||||
|| ( true == TestFlag( SecuritySystem.Status, s_CAebrake ) )
|
||||
/*
|
||||
// NOTE: disabled because 32 is 'load destroyed' flag, what does this have to do with emergency brake?
|
||||
// (if it's supposed to be broken coupler, such event sets alarmchainflag instead when appropriate)
|
||||
|| ( true == TestFlag( EngDmgFlag, 32 ) )
|
||||
*/
|
||||
|| ( true == s_CAtestebrake ) ) {
|
||||
dpMainValve = dpMainValve + PF( 0, PipePress, 0.15 ) * dt;
|
||||
}
|
||||
// 0.2*Spg
|
||||
Pipe->Flow(-dpMainValve);
|
||||
Pipe->Flow(-(PipePress)*0.001 * dt);
|
||||
|
||||
97
Train.cpp
97
Train.cpp
@@ -217,6 +217,9 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
|
||||
{ user_command::trainbrakeservice, &TTrain::OnCommand_trainbrakeservice },
|
||||
{ user_command::trainbrakefullservice, &TTrain::OnCommand_trainbrakefullservice },
|
||||
{ user_command::trainbrakeemergency, &TTrain::OnCommand_trainbrakeemergency },
|
||||
{ user_command::manualbrakeincrease, &TTrain::OnCommand_manualbrakeincrease },
|
||||
{ user_command::manualbrakedecrease, &TTrain::OnCommand_manualbrakedecrease },
|
||||
{ user_command::alarmchaintoggle, &TTrain::OnCommand_alarmchaintoggle },
|
||||
{ user_command::wheelspinbrakeactivate, &TTrain::OnCommand_wheelspinbrakeactivate },
|
||||
{ user_command::sandboxactivate, &TTrain::OnCommand_sandboxactivate },
|
||||
{ user_command::epbrakecontroltoggle, &TTrain::OnCommand_epbrakecontroltoggle },
|
||||
@@ -836,7 +839,7 @@ void TTrain::OnCommand_trainbrakecharging( TTrain *Train, command_data const &Co
|
||||
|
||||
void TTrain::OnCommand_trainbrakerelease( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
if( Command.action == GLFW_PRESS ) {
|
||||
|
||||
// sound feedback
|
||||
if( ( Train->is_eztoer() )
|
||||
@@ -851,7 +854,7 @@ void TTrain::OnCommand_trainbrakerelease( TTrain *Train, command_data const &Com
|
||||
|
||||
void TTrain::OnCommand_trainbrakefirstservice( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
if( Command.action == GLFW_PRESS ) {
|
||||
|
||||
// sound feedback
|
||||
if( ( Train->is_eztoer() )
|
||||
@@ -866,7 +869,7 @@ void TTrain::OnCommand_trainbrakefirstservice( TTrain *Train, command_data const
|
||||
|
||||
void TTrain::OnCommand_trainbrakeservice( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
if( Command.action == GLFW_PRESS ) {
|
||||
|
||||
// sound feedback
|
||||
if( ( Train->is_eztoer() )
|
||||
@@ -879,14 +882,14 @@ void TTrain::OnCommand_trainbrakeservice( TTrain *Train, command_data const &Com
|
||||
Train->mvOccupied->BrakeLevelSet(
|
||||
Train->mvOccupied->BrakeCtrlPosNo / 2
|
||||
+ ( Train->mvOccupied->BrakeHandle == FV4a ?
|
||||
1 :
|
||||
0 ) );
|
||||
1 :
|
||||
0 ) );
|
||||
}
|
||||
}
|
||||
|
||||
void TTrain::OnCommand_trainbrakefullservice( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
if( Command.action == GLFW_PRESS ) {
|
||||
|
||||
// sound feedback
|
||||
if( ( Train->is_eztoer() )
|
||||
@@ -901,13 +904,58 @@ void TTrain::OnCommand_trainbrakefullservice( TTrain *Train, command_data const
|
||||
|
||||
void TTrain::OnCommand_trainbrakeemergency( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
if( Command.action == GLFW_PRESS ) {
|
||||
|
||||
Train->mvOccupied->BrakeLevelSet( Train->mvOccupied->Handle->GetPos( bh_EB ) );
|
||||
/*
|
||||
if( Train->mvOccupied->BrakeCtrlPosNo <= 0.1 ) {
|
||||
// hamulec bezpieczeństwa dla wagonów
|
||||
Train->mvOccupied->RadioStopFlag = true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
void TTrain::OnCommand_manualbrakeincrease( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
|
||||
if( ( Train->mvOccupied->LocalBrake == ManualBrake )
|
||||
|| ( Train->mvOccupied->MBrake == true ) ) {
|
||||
|
||||
Train->mvOccupied->IncManualBrakeLevel( 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TTrain::OnCommand_manualbrakedecrease( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action != GLFW_RELEASE ) {
|
||||
|
||||
if( ( Train->mvOccupied->LocalBrake == ManualBrake )
|
||||
|| ( Train->mvOccupied->MBrake == true ) ) {
|
||||
|
||||
Train->mvOccupied->DecManualBrakeLevel( 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TTrain::OnCommand_alarmchaintoggle( TTrain *Train, command_data const &Command ) {
|
||||
|
||||
if( Command.action == GLFW_PRESS ) {
|
||||
|
||||
if( false == Train->mvOccupied->AlarmChainFlag ) {
|
||||
// pull
|
||||
Train->mvOccupied->AlarmChainSwitch( true );
|
||||
// visual feedback
|
||||
Train->ggAlarmChain.UpdateValue( 1.0 );
|
||||
}
|
||||
else {
|
||||
// release
|
||||
Train->mvOccupied->AlarmChainSwitch( false );
|
||||
// visual feedback
|
||||
Train->ggAlarmChain.UpdateValue( 0.0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2871,6 +2919,7 @@ void TTrain::OnKeyDown(int cKey)
|
||||
}
|
||||
else // McZapkie-240302 - klawisze bez shifta
|
||||
{
|
||||
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
|
||||
if( cKey == Global::Keys[ k_IncLocalBrakeLevel ] )
|
||||
{ // Ra 2014-09: w
|
||||
// trybie latania
|
||||
@@ -2883,10 +2932,8 @@ void TTrain::OnKeyDown(int cKey)
|
||||
{
|
||||
mvOccupied->IncManualBrakeLevel(1);
|
||||
}
|
||||
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
|
||||
else if (mvOccupied->LocalBrake != ManualBrake)
|
||||
mvOccupied->IncLocalBrakeLevel(1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (cKey == Global::Keys[k_DecLocalBrakeLevel])
|
||||
@@ -2899,16 +2946,15 @@ void TTrain::OnKeyDown(int cKey)
|
||||
if (Global::ctrlState)
|
||||
if ((mvOccupied->LocalBrake == ManualBrake) || (mvOccupied->MBrake == true))
|
||||
mvOccupied->DecManualBrakeLevel(1);
|
||||
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
|
||||
else // Ra 1014-06: AI potrafi zahamować pomocniczym mimo jego braku -
|
||||
// odhamować jakoś trzeba
|
||||
if ((mvOccupied->LocalBrake != ManualBrake) || mvOccupied->LocalBrakePos)
|
||||
mvOccupied->DecLocalBrakeLevel(1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (cKey == Global::Keys[k_Brake2])
|
||||
{
|
||||
else
|
||||
#endif
|
||||
if (cKey == Global::Keys[k_Brake2]) {
|
||||
if (Global::ctrlState)
|
||||
mvOccupied->BrakeLevelSet(
|
||||
mvOccupied->Handle->GetPos(bh_NP)); // yB: czy ten stos funkcji nie powinien być jako oddzielna funkcja movera?
|
||||
@@ -6414,6 +6460,7 @@ void TTrain::clear_cab_controls()
|
||||
ggBrakeCtrl.Clear();
|
||||
ggLocalBrake.Clear();
|
||||
ggManualBrake.Clear();
|
||||
ggAlarmChain.Clear();
|
||||
ggBrakeProfileCtrl.Clear();
|
||||
ggBrakeProfileG.Clear();
|
||||
ggBrakeProfileR.Clear();
|
||||
@@ -6541,8 +6588,8 @@ void TTrain::clear_cab_controls()
|
||||
ggRearUpperLightButton.Clear();
|
||||
ggRearLeftEndLightButton.Clear();
|
||||
ggRearRightEndLightButton.Clear();
|
||||
btHaslerBrakes.Clear(12); // ciśnienie w cylindrach do odbijania na haslerze
|
||||
btHaslerCurrent.Clear(13); // prąd na silnikach do odbijania na haslerze
|
||||
btHaslerBrakes.Clear(12); // ciśnienie w cylindrach do odbijania na haslerze
|
||||
btHaslerCurrent.Clear(13); // prąd na silnikach do odbijania na haslerze
|
||||
}
|
||||
|
||||
// NOTE: we can get rid of this function once we have per-cab persistent state
|
||||
@@ -6642,10 +6689,20 @@ void TTrain::set_cab_controls() {
|
||||
ggUpperLightButton.PutValue( 1.0 );
|
||||
}
|
||||
if( ( DynamicObject->iLights[ lightsindex ] & TMoverParameters::light::redmarker_left ) != 0 ) {
|
||||
ggLeftEndLightButton.PutValue( 1.0 );
|
||||
if( ggLeftEndLightButton.SubModel != nullptr ) {
|
||||
ggLeftEndLightButton.PutValue( 1.0 );
|
||||
}
|
||||
else {
|
||||
ggLeftLightButton.PutValue( -1.0 );
|
||||
}
|
||||
}
|
||||
if( ( DynamicObject->iLights[ lightsindex ] & TMoverParameters::light::redmarker_right ) != 0 ) {
|
||||
ggRightEndLightButton.PutValue( 1.0 );
|
||||
if( ggRightEndLightButton.SubModel != nullptr ) {
|
||||
ggRightEndLightButton.PutValue( 1.0 );
|
||||
}
|
||||
else {
|
||||
ggRightLightButton.PutValue( -1.0 );
|
||||
}
|
||||
}
|
||||
if( true == DynamicObject->DimHeadlights ) {
|
||||
ggDimHeadlightsButton.PutValue( 1.0 );
|
||||
@@ -6691,6 +6748,11 @@ void TTrain::set_cab_controls() {
|
||||
1.0 :
|
||||
0.0 );
|
||||
}
|
||||
// alarm chain
|
||||
ggAlarmChain.PutValue(
|
||||
mvControlled->AlarmChainFlag ?
|
||||
1.0 :
|
||||
0.0 );
|
||||
// brake signalling
|
||||
ggSignallingButton.PutValue(
|
||||
mvControlled->Signalling ?
|
||||
@@ -6959,6 +7021,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
|
||||
{ "brakectrl:", ggBrakeCtrl },
|
||||
{ "localbrake:", ggLocalBrake },
|
||||
{ "manualbrake:", ggManualBrake },
|
||||
{ "alarmchain:", ggAlarmChain },
|
||||
{ "brakeprofile_sw:", ggBrakeProfileCtrl },
|
||||
{ "brakeprofileg_sw:", ggBrakeProfileG },
|
||||
{ "brakeprofiler_sw:", ggBrakeProfileR },
|
||||
|
||||
4
Train.h
4
Train.h
@@ -141,6 +141,9 @@ class TTrain
|
||||
static void OnCommand_trainbrakeservice( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_trainbrakefullservice( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_trainbrakeemergency( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_manualbrakeincrease( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_manualbrakedecrease( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_alarmchaintoggle( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_wheelspinbrakeactivate( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_sandboxactivate( TTrain *Train, command_data const &Command );
|
||||
static void OnCommand_epbrakecontroltoggle( TTrain *Train, command_data const &Command );
|
||||
@@ -228,6 +231,7 @@ public: // reszta może by?publiczna
|
||||
TGauge ggBrakeCtrl;
|
||||
TGauge ggLocalBrake;
|
||||
TGauge ggManualBrake;
|
||||
TGauge ggAlarmChain;
|
||||
TGauge ggBrakeProfileCtrl; // nastawiacz GPR - przelacznik obrotowy
|
||||
TGauge ggBrakeProfileG; // nastawiacz GP - hebelek towarowy
|
||||
TGauge ggBrakeProfileR; // nastawiacz PR - hamowanie dwustopniowe
|
||||
|
||||
@@ -41,6 +41,9 @@ commanddescription_sequence Commands_descriptions = {
|
||||
{ "trainbrakeservice", command_target::vehicle },
|
||||
{ "trainbrakefullservice", command_target::vehicle },
|
||||
{ "trainbrakeemergency", command_target::vehicle },
|
||||
{ "manualbrakeincrease", command_target::vehicle },
|
||||
{ "manualbrakedecrease", command_target::vehicle },
|
||||
{ "alarmchaintoggle", command_target::vehicle },
|
||||
{ "wheelspinbrakeactivate", command_target::vehicle },
|
||||
{ "sandboxactivate", command_target::vehicle },
|
||||
{ "reverserincrease", command_target::vehicle },
|
||||
|
||||
@@ -36,6 +36,9 @@ enum class user_command {
|
||||
trainbrakeservice,
|
||||
trainbrakefullservice,
|
||||
trainbrakeemergency,
|
||||
manualbrakeincrease,
|
||||
manualbrakedecrease,
|
||||
alarmchaintoggle,
|
||||
wheelspinbrakeactivate,
|
||||
sandboxactivate,
|
||||
reverserincrease,
|
||||
|
||||
@@ -208,6 +208,12 @@ keyboard_input::default_bindings() {
|
||||
{ GLFW_KEY_KP_2 },
|
||||
// trainbrakeemergency
|
||||
{ GLFW_KEY_KP_0 },
|
||||
// manualbrakeincrease
|
||||
{ GLFW_KEY_KP_1 | keymodifier::control },
|
||||
// manualbrakedecrease
|
||||
{ GLFW_KEY_KP_7 | keymodifier::control },
|
||||
// alarm chain toggle
|
||||
{ GLFW_KEY_B | keymodifier::shift | keymodifier::control },
|
||||
// wheelspinbrakeactivate,
|
||||
{ GLFW_KEY_KP_ENTER },
|
||||
// sandboxactivate,
|
||||
|
||||
@@ -211,7 +211,10 @@ mouse_input::default_bindings() {
|
||||
user_command::independentbrakeincrease,
|
||||
user_command::independentbrakedecrease } },
|
||||
{ "manualbrake:", {
|
||||
user_command::none,
|
||||
user_command::manualbrakeincrease,
|
||||
user_command::manualbrakedecrease } },
|
||||
{ "alarmchain:", {
|
||||
user_command::alarmchaintoggle,
|
||||
user_command::none } },
|
||||
{ "brakeprofile_sw:", {
|
||||
user_command::brakeactingspeedincrease,
|
||||
|
||||
@@ -24,6 +24,7 @@ static std::unordered_map<std::string, std::string> m_cabcontrols = {
|
||||
{ "brakectrl:", "train brake" },
|
||||
{ "localbrake:", "independent brake" },
|
||||
{ "manualbrake:", "manual brake" },
|
||||
{ "alarmchain:", "emergency brake" },
|
||||
{ "brakeprofile_sw:", "brake acting speed" },
|
||||
{ "brakeprofileg_sw:", "brake acting speed: cargo" },
|
||||
{ "brakeprofiler_sw:", "brake acting speed: rapid" },
|
||||
|
||||
Reference in New Issue
Block a user