From 52167f7955ceee9ec65052ab4bdc1ae1f2f148f0 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Wed, 6 May 2020 16:03:03 +0200 Subject: [PATCH] build 200506. emergency brake warning signal --- DynObj.cpp | 43 ++++++++++++++++++++++++++----------------- McZapkie/MOVER.h | 1 + McZapkie/Mover.cpp | 2 ++ Train.cpp | 12 ++++++------ version.h | 2 +- 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index b3889d00..4e01073d 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -4259,23 +4259,32 @@ void TDynamicObject::RenderSounds() { } // horns - if( TestFlag( MoverParameters->WarningSignal, 1 ) ) { - sHorn1.play( sound_flags::exclusive | sound_flags::looping ); - } - else { - sHorn1.stop(); - } - if( TestFlag( MoverParameters->WarningSignal, 2 ) ) { - sHorn2.play( sound_flags::exclusive | sound_flags::looping ); - } - else { - sHorn2.stop(); - } - if( TestFlag( MoverParameters->WarningSignal, 4 ) ) { - sHorn3.play( sound_flags::exclusive | sound_flags::looping ); - } - else { - sHorn3.stop(); + { + // for moving vehicle combine regular horn activation flag with emergency brake horn activation flag, if the brake is active + auto const warningsignal { ( + ( MoverParameters->Vel > 0.5 ) && ( MoverParameters->AlarmChainFlag ) ? + MoverParameters->EmergencyBrakeWarningSignal : + 0 ) + | ( MoverParameters->WarningSignal ) }; + + if( TestFlag( warningsignal, 1 ) ) { + sHorn1.play( sound_flags::exclusive | sound_flags::looping ); + } + else { + sHorn1.stop(); + } + if( TestFlag( warningsignal, 2 ) ) { + sHorn2.play( sound_flags::exclusive | sound_flags::looping ); + } + else { + sHorn2.stop(); + } + if( TestFlag( warningsignal, 4 ) ) { + sHorn3.play( sound_flags::exclusive | sound_flags::looping ); + } + else { + sHorn3.stop(); + } } // szum w czasie jazdy if( ( GetVelocity() > 0.5 ) diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index a0cdb62a..d6d8d400 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -1128,6 +1128,7 @@ public: bool MBrake = false; /*Czy jest hamulec reczny*/ double StopBrakeDecc = 0.0; TSecuritySystem SecuritySystem; + int EmergencyBrakeWarningSignal{ 0 }; // combined with basic WarningSignal when manual emergency brake is active TUniversalCtrlTable UniCtrlList; /*lista pozycji uniwersalnego nastawnika*/ int UniCtrlListSize = 0; /*wielkosc listy pozycji uniwersalnego nastawnika*/ bool UniCtrlIntegratedBrakePNCtrl = false; /*zintegrowany nastawnik JH obsluguje hamulec PN*/ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 6ff109e7..228b01bd 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -10301,6 +10301,8 @@ void TMoverParameters::LoadFIZ_Security( std::string const &line ) { extract_value( SecuritySystem.SoundSignalDelay, "SoundSignalDelay", line, "" ); extract_value( SecuritySystem.EmergencyBrakeDelay, "EmergencyBrakeDelay", line, "" ); extract_value( SecuritySystem.RadioStop, "RadioStop", line, "" ); + + extract_value( EmergencyBrakeWarningSignal, "EmergencyBrakeWarningSignal", line, "" ); } void TMoverParameters::LoadFIZ_Clima( std::string const &line ) { diff --git a/Train.cpp b/Train.cpp index 6c63eca6..fc99f97c 100644 --- a/Train.cpp +++ b/Train.cpp @@ -5744,14 +5744,14 @@ void TTrain::OnCommand_cabchangeforward( TTrain *Train, command_data const &Comm movedirection > 0 ? end::front : end::rear ) }; - if( TestFlag( Train->DynamicObject->MoverParameters->Couplers[ exitdirection ].CouplingFlag, coupling::gangway ) ) { + if( TestFlag( Train->mvOccupied->Couplers[ exitdirection ].CouplingFlag, coupling::gangway ) ) { // przejscie do nastepnego pojazdu auto *targetvehicle = ( exitdirection == end::front ? Train->DynamicObject->PrevConnected() : Train->DynamicObject->NextConnected() ); targetvehicle->MoverParameters->CabOccupied = ( - Train->DynamicObject->MoverParameters->Neighbours[ exitdirection ].vehicle_end ? + Train->mvOccupied->Neighbours[ exitdirection ].vehicle_end ? -1 : 1 ); Train->MoveToVehicle( targetvehicle ); @@ -5778,14 +5778,14 @@ void TTrain::OnCommand_cabchangebackward( TTrain *Train, command_data const &Com movedirection > 0 ? end::front : end::rear ) }; - if( TestFlag( Train->DynamicObject->MoverParameters->Couplers[ exitdirection ].CouplingFlag, coupling::gangway ) ) { + if( TestFlag( Train->mvOccupied->Couplers[ exitdirection ].CouplingFlag, coupling::gangway ) ) { // przejscie do nastepnego pojazdu auto *targetvehicle = ( exitdirection == end::front ? Train->DynamicObject->PrevConnected() : Train->DynamicObject->NextConnected() ); targetvehicle->MoverParameters->CabOccupied = ( - Train->DynamicObject->MoverParameters->Neighbours[ exitdirection ].vehicle_end ? + Train->mvOccupied->Neighbours[ exitdirection ].vehicle_end ? -1 : 1 ); Train->MoveToVehicle( targetvehicle ); @@ -7016,8 +7016,8 @@ bool TTrain::Update( double const Deltatime ) ggMotorBlowersAllOffButton.Update(); // wyprowadzenie sygnałów dla haslera na PoKeys (zaznaczanie na taśmie) - btHaslerBrakes.Turn(DynamicObject->MoverParameters->BrakePress > 0.4); // ciśnienie w cylindrach - btHaslerCurrent.Turn(DynamicObject->MoverParameters->Im != 0.0); // prąd na silnikach + btHaslerBrakes.Turn(mvOccupied->BrakePress > 0.4); // ciśnienie w cylindrach + btHaslerCurrent.Turn(mvOccupied->Im != 0.0); // prąd na silnikach // calculate current level of interior illumination { diff --git a/version.h b/version.h index e1f17543..865f23c1 100644 --- a/version.h +++ b/version.h @@ -1,5 +1,5 @@ #pragma once #define VERSION_MAJOR 20 -#define VERSION_MINOR 501 +#define VERSION_MINOR 506 #define VERSION_REVISION 0