mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 20:59:19 +02:00
ignition sound enhancement, diesel engine volume calculation fix, duplicated event execution fix
This commit is contained in:
15
DynObj.cpp
15
DynObj.cpp
@@ -4840,7 +4840,7 @@ void TDynamicObject::LoadMMediaFile( std::string BaseDir, std::string TypeName,
|
|||||||
|
|
||||||
auto const amplitudedivisor = static_cast<float>( (
|
auto const amplitudedivisor = static_cast<float>( (
|
||||||
MoverParameters->EngineType == DieselEngine ? 1 :
|
MoverParameters->EngineType == DieselEngine ? 1 :
|
||||||
MoverParameters->EngineType == DieselElectric ? MoverParameters->Power * 3 :
|
MoverParameters->EngineType == DieselElectric ? 1 :
|
||||||
MoverParameters->nmax * 60 + MoverParameters->Power * 3 ) );
|
MoverParameters->nmax * 60 + MoverParameters->Power * 3 ) );
|
||||||
m_powertrainsounds.engine.m_amplitudefactor /= amplitudedivisor;
|
m_powertrainsounds.engine.m_amplitudefactor /= amplitudedivisor;
|
||||||
}
|
}
|
||||||
@@ -5912,10 +5912,12 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
switch( Vehicle.EngineType ) {
|
switch( Vehicle.EngineType ) {
|
||||||
// TODO: check calculated values
|
// TODO: check calculated values
|
||||||
case DieselElectric: {
|
case DieselElectric: {
|
||||||
|
|
||||||
volume =
|
volume =
|
||||||
engine.m_amplitudeoffset
|
engine.m_amplitudeoffset
|
||||||
+ engine.m_amplitudefactor * ( Vehicle.EnginePower / 1000 / Vehicle.Power )
|
+ engine.m_amplitudefactor * (
|
||||||
+ 0.2 * ( Vehicle.enrot * 60 ) / ( Vehicle.DElist[ Vehicle.MainCtrlPosNo ].RPM );
|
0.25 * ( Vehicle.EnginePower / Vehicle.Power )
|
||||||
|
+ 0.75 * ( Vehicle.enrot * 60 ) / ( Vehicle.DElist[ Vehicle.MainCtrlPosNo ].RPM ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DieselEngine: {
|
case DieselEngine: {
|
||||||
@@ -5923,7 +5925,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
volume = (
|
volume = (
|
||||||
Vehicle.EnginePower > 0 ?
|
Vehicle.EnginePower > 0 ?
|
||||||
engine.m_amplitudeoffset + engine.m_amplitudefactor * Vehicle.dizel_fill :
|
engine.m_amplitudeoffset + engine.m_amplitudefactor * Vehicle.dizel_fill :
|
||||||
engine.m_amplitudeoffset * 0.9f + engine.m_amplitudefactor * std::fabs( Vehicle.enrot / Vehicle.dizel_nmax ) );
|
engine.m_amplitudeoffset + engine.m_amplitudefactor * std::fabs( Vehicle.enrot / Vehicle.dizel_nmax ) );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -6043,7 +6045,10 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
|| ( Vehicle.EngineType == DieselElectric ) ) {
|
|| ( Vehicle.EngineType == DieselElectric ) ) {
|
||||||
|
|
||||||
if( true == Vehicle.dizel_enginestart ) {
|
if( true == Vehicle.dizel_enginestart ) {
|
||||||
engine_ignition.play( sound_flags::exclusive );
|
engine_ignition
|
||||||
|
.pitch( engine_ignition.m_frequencyoffset + engine_ignition.m_frequencyfactor * 1.f )
|
||||||
|
.gain( engine_ignition.m_amplitudeoffset + engine_ignition.m_amplitudefactor * 1.f )
|
||||||
|
.play( sound_flags::exclusive );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
Event.cpp
10
Event.cpp
@@ -825,7 +825,7 @@ event_manager::FindEvent( std::string const &Name ) {
|
|||||||
bool
|
bool
|
||||||
event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) {
|
event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) {
|
||||||
|
|
||||||
if( ( false == Event->m_ignored ) && ( true == Event->bEnabled ) ) {
|
if( true == Event->bEnabled ) {
|
||||||
// jeśli może być dodany do kolejki (nie używany w skanowaniu)
|
// jeśli może być dodany do kolejki (nie używany w skanowaniu)
|
||||||
if( !Event->iQueued ) // jeśli nie dodany jeszcze do kolejki
|
if( !Event->iQueued ) // jeśli nie dodany jeszcze do kolejki
|
||||||
{ // kolejka eventów jest posortowana względem (fStartTime)
|
{ // kolejka eventów jest posortowana względem (fStartTime)
|
||||||
@@ -835,10 +835,13 @@ event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) {
|
|||||||
// eventy AddValues trzeba wykonywać natychmiastowo, inaczej kolejka może zgubić jakieś dodawanie
|
// eventy AddValues trzeba wykonywać natychmiastowo, inaczej kolejka może zgubić jakieś dodawanie
|
||||||
// Ra: kopiowanie wykonania tu jest bez sensu, lepiej by było wydzielić funkcję
|
// Ra: kopiowanie wykonania tu jest bez sensu, lepiej by było wydzielić funkcję
|
||||||
// wykonującą eventy i ją wywołać
|
// wykonującą eventy i ją wywołać
|
||||||
if( EventConditon( Event ) ) { // teraz mogą być warunki do tych eventów
|
if( ( false == Event->m_ignored )
|
||||||
|
&& ( true == EventConditon( Event ) ) ) { // teraz mogą być warunki do tych eventów
|
||||||
|
|
||||||
Event->Params[ 5 ].asMemCell->UpdateValues(
|
Event->Params[ 5 ].asMemCell->UpdateValues(
|
||||||
Event->Params[ 0 ].asText, Event->Params[ 1 ].asdouble,
|
Event->Params[ 0 ].asText, Event->Params[ 1 ].asdouble,
|
||||||
Event->Params[ 2 ].asdouble, Event->iFlags );
|
Event->Params[ 2 ].asdouble, Event->iFlags );
|
||||||
|
|
||||||
if( Event->Params[ 6 ].asTrack ) { // McZapkie-100302 - updatevalues oprocz zmiany wartosci robi putcommand dla
|
if( Event->Params[ 6 ].asTrack ) { // McZapkie-100302 - updatevalues oprocz zmiany wartosci robi putcommand dla
|
||||||
// wszystkich 'dynamic' na danym torze
|
// wszystkich 'dynamic' na danym torze
|
||||||
for( auto dynamic : Event->Params[ 6 ].asTrack->Dynamics ) {
|
for( auto dynamic : Event->Params[ 6 ].asTrack->Dynamics ) {
|
||||||
@@ -869,7 +872,8 @@ event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) {
|
|||||||
&& ( ( false == Event->bEnabled )
|
&& ( ( false == Event->bEnabled )
|
||||||
|| ( Event->iQueued > 0 ) ) );
|
|| ( Event->iQueued > 0 ) ) );
|
||||||
}
|
}
|
||||||
if( Event != nullptr ) {
|
if( ( Event != nullptr )
|
||||||
|
&& ( false == Event->m_ignored ) ) {
|
||||||
// standardowe dodanie do kolejki
|
// standardowe dodanie do kolejki
|
||||||
++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki
|
++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki
|
||||||
WriteLog( "EVENT ADDED TO QUEUE" + ( Owner ? ( " by " + Owner->asName ) : "" ) + ": " + Event->asName );
|
WriteLog( "EVENT ADDED TO QUEUE" + ( Owner ? ( " by " + Owner->asName ) : "" ) + ": " + Event->asName );
|
||||||
|
|||||||
Reference in New Issue
Block a user