mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 13: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 ) ) {
|
MoverParameters->EpFuse ) ) {
|
||||||
FzadED = std::min( Fzad, FmaxED );
|
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)
|
if (MoverParameters->EIMCtrlType == 2 && MoverParameters->MainCtrlPos < 2 && MoverParameters->eimic > -0.999)
|
||||||
{
|
{
|
||||||
FzadED = std::min(FzadED, MED_oldFED);
|
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))
|
if ((MoverParameters->BrakeCtrlPos == MoverParameters->Handle->GetPos(bh_EB))
|
||||||
&& (MoverParameters->eimc[eimc_p_abed] < 0.001))
|
&& (MoverParameters->eimc[eimc_p_abed] < 0.001))
|
||||||
@@ -4191,7 +4212,10 @@ void TDynamicObject::RenderSounds() {
|
|||||||
|
|
||||||
// epbrake - epcompact
|
// epbrake - epcompact
|
||||||
if (( MoverParameters->BrakeSystem == TBrakeSystem::ElectroPneumatic ) && ( MoverParameters->LocHandle )) {
|
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 ) {
|
if ( m_lastepbrakepressure != -1.f ) {
|
||||||
// HACK: potentially reset playback of opening bookend sounds
|
// HACK: potentially reset playback of opening bookend sounds
|
||||||
if ( false == m_epbrakepressureincrease.is_playing() ) {
|
if ( false == m_epbrakepressureincrease.is_playing() ) {
|
||||||
@@ -4200,27 +4224,33 @@ void TDynamicObject::RenderSounds() {
|
|||||||
if ( false == m_epbrakepressuredecrease.is_playing() ) {
|
if ( false == m_epbrakepressuredecrease.is_playing() ) {
|
||||||
m_epbrakepressuredecrease.stop();
|
m_epbrakepressuredecrease.stop();
|
||||||
}
|
}
|
||||||
|
m_epbrakepressurechangeinctimer += dt;
|
||||||
|
m_epbrakepressurechangedectimer += dt;
|
||||||
// actual sound playback
|
// actual sound playback
|
||||||
auto const epquantizedratio{ static_cast<int>( 50 * epbrakepressureratio) };
|
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 lastepbrakepressureratio { std::max( 0.f, m_lastepbrakepressure ) / std::max( 1.0, MoverParameters->MaxBrakePress[0] ) };
|
||||||
auto const epquantizedratiochange { epquantizedratio - static_cast<int>( 50 * lastepbrakepressureratio ) };
|
auto const epquantizedratiochange { epquantizedratio - static_cast<int>( 50 * lastepbrakepressureratio ) };
|
||||||
if ( epquantizedratiochange > 0 ) {
|
if ( epquantizedratiochange > 0 && m_epbrakepressurechangeinctimer > 0.05f) {
|
||||||
m_epbrakepressureincrease
|
m_epbrakepressureincrease
|
||||||
.pitch(
|
.pitch(
|
||||||
true == m_epbrakepressureincrease.is_combined() ?
|
true == m_epbrakepressureincrease.is_combined() ?
|
||||||
epquantizedratio * 0.01f :
|
epquantizedratio * 0.01f :
|
||||||
m_epbrakepressureincrease.m_frequencyoffset + m_epbrakepressureincrease.m_frequencyfactor * 1.f )
|
m_epbrakepressureincrease.m_frequencyoffset + m_epbrakepressureincrease.m_frequencyfactor * 1.f )
|
||||||
.play();
|
.play();
|
||||||
|
m_epbrakepressurechangeinctimer = 0;
|
||||||
}
|
}
|
||||||
else if ( epquantizedratiochange < 0 ) {
|
else if ( epquantizedratiochange < 0 && m_epbrakepressurechangedectimer > 0.3f) {
|
||||||
m_epbrakepressuredecrease
|
m_epbrakepressuredecrease
|
||||||
.pitch(true == m_epbrakepressuredecrease.is_combined() ?
|
.pitch(true == m_epbrakepressuredecrease.is_combined() ?
|
||||||
epquantizedratio * 0.01f :
|
-epquantizedratiochange * 0.01f :
|
||||||
m_epbrakepressuredecrease.m_frequencyoffset + m_epbrakepressuredecrease.m_frequencyfactor * 1.f )
|
m_epbrakepressuredecrease.m_frequencyoffset + m_epbrakepressuredecrease.m_frequencyfactor * 1.f )
|
||||||
.play();
|
.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
|
// emergency brake
|
||||||
|
|||||||
2
DynObj.h
2
DynObj.h
@@ -503,6 +503,8 @@ private:
|
|||||||
sound_source m_epbrakepressuredecrease{ sound_placement::external };
|
sound_source m_epbrakepressuredecrease{ sound_placement::external };
|
||||||
float m_lastepbrakepressure{ -1.f }; // helper, cached level of pressure in the brake cylinder
|
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_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 };
|
sound_source m_emergencybrake { sound_placement::engine };
|
||||||
double m_emergencybrakeflow{ 0.f };
|
double m_emergencybrakeflow{ 0.f };
|
||||||
sound_source sReleaser { sound_placement::external };
|
sound_source sReleaser { sound_placement::external };
|
||||||
|
|||||||
@@ -1314,6 +1314,8 @@ public:
|
|||||||
bool MED_Ncor = 0; // czy korekcja sily hamowania z uwzglednieniem nacisku
|
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_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_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
|
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)
|
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 eimicSpeedCtrlIntegral = 0; /*calkowany blad ustawienia predkosci*/
|
||||||
double NewSpeed = 0; /*nowa predkosc do zadania*/
|
double NewSpeed = 0; /*nowa predkosc do zadania*/
|
||||||
double MED_EPVC_CurrentTime = 0; /*aktualny czas licznika czasu korekcji siły EP*/
|
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*/
|
/*-zmienne dla drezyny*/
|
||||||
double PulseForce = 0.0; /*przylozona sila*/
|
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_Ncor, "MED_Ncor", line, "");
|
||||||
extract_value(MED_MinBrakeReqED, "MED_MinBrakeReqED", line, "");
|
extract_value(MED_MinBrakeReqED, "MED_MinBrakeReqED", line, "");
|
||||||
extract_value(MED_FrED_factor, "MED_FrEDFactor", 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) {
|
void TMoverParameters::LoadFIZ_DCEMUED(std::string const &line) {
|
||||||
|
|||||||
Reference in New Issue
Block a user