mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 01:59:19 +02:00
Added sounds for ep braking (coils, relays), reworked delay in ed braking
This commit is contained in:
40
DynObj.cpp
40
DynObj.cpp
@@ -3198,9 +3198,30 @@ bool TDynamicObject::Update(double dt, double dt1)
|
||||
MoverParameters->EpFuse ) ) {
|
||||
FzadED = std::min( Fzad, FmaxED );
|
||||
}
|
||||
/*/ELF - wdrazanie ED po powrocie na utrzymanie hamowania - do usuniecia
|
||||
if (MoverParameters->EIMCtrlType == 2 && MoverParameters->MainCtrlPos < 2 && MoverParameters->eimic > -0.999)
|
||||
{
|
||||
FzadED = std::min(FzadED, MED_oldFED);
|
||||
} //*/
|
||||
//opoznienie wdrazania ED
|
||||
if (FzadED > MED_oldFED)
|
||||
{
|
||||
if (MoverParameters->MED_ED_DelayTimer <= 0) {
|
||||
MoverParameters->MED_ED_DelayTimer += dt1;
|
||||
if (MoverParameters->MED_ED_DelayTimer > 0) {
|
||||
|
||||
}
|
||||
else {
|
||||
FzadED = std::min(FzadED, MED_oldFED);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FzadED = std::min(FzadED, MED_oldFED);
|
||||
MoverParameters->MED_ED_DelayTimer = (FrED > 0 ?
|
||||
-MoverParameters->MED_ED_Delay2 :
|
||||
-MoverParameters->MED_ED_Delay1);
|
||||
}
|
||||
}
|
||||
if ((MoverParameters->BrakeCtrlPos == MoverParameters->Handle->GetPos(bh_EB))
|
||||
&& (MoverParameters->eimc[eimc_p_abed] < 0.001))
|
||||
@@ -4191,7 +4212,10 @@ void TDynamicObject::RenderSounds() {
|
||||
|
||||
// epbrake - epcompact
|
||||
if (( MoverParameters->BrakeSystem == TBrakeSystem::ElectroPneumatic ) && ( MoverParameters->LocHandle )) {
|
||||
auto const epbrakepressureratio{ std::max( 0.0, MoverParameters->LocHandle->GetCP() ) / std::max(1.0, MoverParameters->MaxBrakePress[0] ) };
|
||||
auto const epbrakepressureratio{ std::min( std::max( 0.0, MoverParameters->LocHandle->GetCP() ) / std::max( 1.0, MoverParameters->MaxBrakePress[0] ),
|
||||
m_epbrakepressurechangedectimer > -1.0f ?
|
||||
std::max( MoverParameters->LocalBrakePosAEIM, MoverParameters->Hamulec->GetEDBCP() / MoverParameters->MaxBrakePress[3]) :
|
||||
1.0 ) };
|
||||
if ( m_lastepbrakepressure != -1.f ) {
|
||||
// HACK: potentially reset playback of opening bookend sounds
|
||||
if ( false == m_epbrakepressureincrease.is_playing() ) {
|
||||
@@ -4200,27 +4224,33 @@ void TDynamicObject::RenderSounds() {
|
||||
if ( false == m_epbrakepressuredecrease.is_playing() ) {
|
||||
m_epbrakepressuredecrease.stop();
|
||||
}
|
||||
m_epbrakepressurechangeinctimer += dt;
|
||||
m_epbrakepressurechangedectimer += dt;
|
||||
// actual sound playback
|
||||
auto const epquantizedratio{ static_cast<int>( 50 * epbrakepressureratio) };
|
||||
auto const lastepbrakepressureratio { std::max( 0.f, m_lastepbrakepressure ) / std::max( 1.0, MoverParameters->MaxBrakePress[0] ) };
|
||||
auto const epquantizedratiochange { epquantizedratio - static_cast<int>( 50 * lastepbrakepressureratio ) };
|
||||
if ( epquantizedratiochange > 0 ) {
|
||||
if ( epquantizedratiochange > 0 && m_epbrakepressurechangeinctimer > 0.05f) {
|
||||
m_epbrakepressureincrease
|
||||
.pitch(
|
||||
true == m_epbrakepressureincrease.is_combined() ?
|
||||
epquantizedratio * 0.01f :
|
||||
m_epbrakepressureincrease.m_frequencyoffset + m_epbrakepressureincrease.m_frequencyfactor * 1.f )
|
||||
.play();
|
||||
m_epbrakepressurechangeinctimer = 0;
|
||||
}
|
||||
else if ( epquantizedratiochange < 0 ) {
|
||||
else if ( epquantizedratiochange < 0 && m_epbrakepressurechangedectimer > 0.3f) {
|
||||
m_epbrakepressuredecrease
|
||||
.pitch(true == m_epbrakepressuredecrease.is_combined() ?
|
||||
epquantizedratio * 0.01f :
|
||||
-epquantizedratiochange * 0.01f :
|
||||
m_epbrakepressuredecrease.m_frequencyoffset + m_epbrakepressuredecrease.m_frequencyfactor * 1.f )
|
||||
.play();
|
||||
m_epbrakepressurechangedectimer = 0;
|
||||
}
|
||||
}
|
||||
m_lastepbrakepressure = MoverParameters->LocHandle->GetCP();
|
||||
if ( ( m_epbrakepressurechangeinctimer == 0 ) || ( m_epbrakepressurechangedectimer == 0 ) )
|
||||
m_lastepbrakepressure = std::min( MoverParameters->LocHandle->GetCP(),
|
||||
MoverParameters->LocalBrakePosAEIM * std::max( 1.0, MoverParameters->MaxBrakePress[0] ) );
|
||||
}
|
||||
|
||||
// emergency brake
|
||||
|
||||
2
DynObj.h
2
DynObj.h
@@ -503,6 +503,8 @@ private:
|
||||
sound_source m_epbrakepressuredecrease{ sound_placement::external };
|
||||
float m_lastepbrakepressure{ -1.f }; // helper, cached level of pressure in the brake cylinder
|
||||
float m_epbrakepressurechange{ 0.f }; // recent change of pressure in the brake cylinder
|
||||
float m_epbrakepressurechangeinctimer{ 0.f }; // last time of change of pressure in the brake cylinder - increase
|
||||
float m_epbrakepressurechangedectimer{ 0.f }; // last time of change of pressure in the brake cylinder - decrease
|
||||
sound_source m_emergencybrake { sound_placement::engine };
|
||||
double m_emergencybrakeflow{ 0.f };
|
||||
sound_source sReleaser { sound_placement::external };
|
||||
|
||||
@@ -1314,6 +1314,8 @@ public:
|
||||
bool MED_Ncor = 0; // czy korekcja sily hamowania z uwzglednieniem nacisku
|
||||
double MED_MinBrakeReqED = 0; // minimalne zadanie sily hamowania uruchamiajace ED - ponizej tylko EP
|
||||
double MED_FrED_factor = 1; // mnoznik sily hamowania ED do korekty blendingu
|
||||
double MED_ED_Delay1 = 0; // opoznienie wdrazania hamowania ED (pierwszy raz)
|
||||
double MED_ED_Delay2 = 0; // opoznienie zwiekszania sily hamowania ED (kolejne razy)
|
||||
|
||||
int DCEMUED_CC { 0 }; //na którym sprzęgu sprawdzać działanie ED
|
||||
double DCEMUED_EP_max_Vel{ 0.0 }; //maksymalna prędkość, przy której działa EP przy włączonym ED w jednostce (dla tocznych)
|
||||
@@ -1602,6 +1604,7 @@ public:
|
||||
double eimicSpeedCtrlIntegral = 0; /*calkowany blad ustawienia predkosci*/
|
||||
double NewSpeed = 0; /*nowa predkosc do zadania*/
|
||||
double MED_EPVC_CurrentTime = 0; /*aktualny czas licznika czasu korekcji siły EP*/
|
||||
double MED_ED_DelayTimer = 0; /*aktualny czas licznika opoznienia hamowania ED*/
|
||||
|
||||
/*-zmienne dla drezyny*/
|
||||
double PulseForce = 0.0; /*przylozona sila*/
|
||||
|
||||
@@ -10534,6 +10534,8 @@ void TMoverParameters::LoadFIZ_Blending(std::string const &line) {
|
||||
extract_value(MED_Ncor, "MED_Ncor", line, "");
|
||||
extract_value(MED_MinBrakeReqED, "MED_MinBrakeReqED", line, "");
|
||||
extract_value(MED_FrED_factor, "MED_FrEDFactor", line, "");
|
||||
extract_value(MED_ED_Delay1, "MED_FirstDelayED", line, "");
|
||||
extract_value(MED_ED_Delay2, "MED_ScndDelayED", line, "");
|
||||
}
|
||||
|
||||
void TMoverParameters::LoadFIZ_DCEMUED(std::string const &line) {
|
||||
|
||||
Reference in New Issue
Block a user