diff --git a/DynObj.cpp b/DynObj.cpp index a34b5c06..19a79059 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -6058,7 +6058,11 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co m_powertrainsounds.rsEngageSlippery.m_frequencyfactor /= ( 1 + MoverParameters->nmax ); } - else if( token == "linebreakerclose:" ) { + else if (token == "retarder:") { + m_powertrainsounds.retarder.deserialize(parser, sound_type::single, sound_parameters::amplitude | sound_parameters::frequency); + m_powertrainsounds.retarder.owner(this); + } + else if( token == "linebreakerclose:" ) { m_powertrainsounds.linebreaker_close.deserialize( parser, sound_type::single ); m_powertrainsounds.linebreaker_close.owner( this ); } @@ -7359,7 +7363,7 @@ TDynamicObject::powertrain_sounds::position( glm::vec3 const Location ) { &inverter, &motor_relay, &dsbWejscie_na_bezoporow, &motor_parallel, &motor_shuntfield, &rsWentylator, &engine, &engine_ignition, &engine_shutdown, &engine_revving, &engine_turbo, &oil_pump, &fuel_pump, &water_pump, &water_heater, &radiator_fan, &radiator_fan_aux, - &transmission, &rsEngageSlippery + &transmission, &rsEngageSlippery, &retarder }; for( auto sound : enginesounds ) { if( sound->offset() == nullvector ) { @@ -7613,6 +7617,21 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub rsEngageSlippery.stop(); } + if (Vehicle.hydro_R) { + float speed = std::abs(Vehicle.hydro_R_Fill * Vehicle.hydro_R_n); + + retarder + .pitch(retarder.m_frequencyoffset + speed * retarder.m_frequencyfactor) + .gain(retarder.m_amplitudeoffset + Vehicle.hydro_R_Fill * retarder.m_amplitudefactor); + + if (retarder.gain() > 0.01) { + retarder.play(sound_flags::exclusive | sound_flags::looping); + } + else { + retarder.stop(); + } + } + // motor sounds volume = 0.0; // generic traction motor sounds diff --git a/DynObj.h b/DynObj.h index c77288df..12d831b5 100644 --- a/DynObj.h +++ b/DynObj.h @@ -403,6 +403,7 @@ private: sound_source radiator_fan_aux { sound_placement::engine }; sound_source transmission { sound_placement::engine }; sound_source rsEngageSlippery { sound_placement::engine }; // moved from cab + sound_source retarder { sound_placement::engine }; void position( glm::vec3 const Location ); void render( TMoverParameters const &Vehicle, double const Deltatime );