From 4ee60eacbdf6ac29ecf144340747a03eed474701 Mon Sep 17 00:00:00 2001 From: tmj-fstate Date: Sun, 18 Mar 2018 15:12:15 +0100 Subject: [PATCH] ignition sound enhancement, diesel engine volume calculation fix, duplicated event execution fix --- DynObj.cpp | 15 ++++++++++----- Event.cpp | 10 +++++++--- version.h | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/DynObj.cpp b/DynObj.cpp index 687e0d9e..1b711cec 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -4840,7 +4840,7 @@ void TDynamicObject::LoadMMediaFile( std::string BaseDir, std::string TypeName, auto const amplitudedivisor = static_cast( ( MoverParameters->EngineType == DieselEngine ? 1 : - MoverParameters->EngineType == DieselElectric ? MoverParameters->Power * 3 : + MoverParameters->EngineType == DieselElectric ? 1 : MoverParameters->nmax * 60 + MoverParameters->Power * 3 ) ); m_powertrainsounds.engine.m_amplitudefactor /= amplitudedivisor; } @@ -5912,10 +5912,12 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub switch( Vehicle.EngineType ) { // TODO: check calculated values case DieselElectric: { + volume = engine.m_amplitudeoffset - + engine.m_amplitudefactor * ( Vehicle.EnginePower / 1000 / Vehicle.Power ) - + 0.2 * ( Vehicle.enrot * 60 ) / ( Vehicle.DElist[ Vehicle.MainCtrlPosNo ].RPM ); + + engine.m_amplitudefactor * ( + 0.25 * ( Vehicle.EnginePower / Vehicle.Power ) + + 0.75 * ( Vehicle.enrot * 60 ) / ( Vehicle.DElist[ Vehicle.MainCtrlPosNo ].RPM ) ); break; } case DieselEngine: { @@ -5923,7 +5925,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub volume = ( Vehicle.EnginePower > 0 ? 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; } @@ -6043,7 +6045,10 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub || ( Vehicle.EngineType == DieselElectric ) ) { 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 ); } } diff --git a/Event.cpp b/Event.cpp index 4fcc7a1a..2752e213 100644 --- a/Event.cpp +++ b/Event.cpp @@ -825,7 +825,7 @@ event_manager::FindEvent( std::string const &Name ) { bool 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) if( !Event->iQueued ) // jeśli nie dodany jeszcze do kolejki { // 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 // Ra: kopiowanie wykonania tu jest bez sensu, lepiej by było wydzielić funkcję // 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[ 0 ].asText, Event->Params[ 1 ].asdouble, Event->Params[ 2 ].asdouble, Event->iFlags ); + if( Event->Params[ 6 ].asTrack ) { // McZapkie-100302 - updatevalues oprocz zmiany wartosci robi putcommand dla // wszystkich 'dynamic' na danym torze for( auto dynamic : Event->Params[ 6 ].asTrack->Dynamics ) { @@ -869,7 +872,8 @@ event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) { && ( ( false == Event->bEnabled ) || ( Event->iQueued > 0 ) ) ); } - if( Event != nullptr ) { + if( ( Event != nullptr ) + && ( false == Event->m_ignored ) ) { // standardowe dodanie do kolejki ++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki WriteLog( "EVENT ADDED TO QUEUE" + ( Owner ? ( " by " + Owner->asName ) : "" ) + ": " + Event->asName ); diff --git a/version.h b/version.h index c9e03a58..c7d482bd 100644 --- a/version.h +++ b/version.h @@ -1,5 +1,5 @@ #pragma once #define VERSION_MAJOR 18 -#define VERSION_MINOR 313 +#define VERSION_MINOR 318 #define VERSION_REVISION 0