@@ -82,10 +82,6 @@ CClientVehicle::CClientVehicle(CClientManager* pManager, ElementID ID, unsigned
8282 m_BikeHandlingEntry->Assign (m_pOriginalBikeHandlingEntry);
8383 }
8484
85- m_pOriginalSoundSettingsEntry = g_pGame->GetVehicleAudioSettingsManager ()->GetVehicleModelAudioSettingsData (static_cast <eVehicleTypes>(m_usModel));
86- m_pSoundSettingsEntry = g_pGame->GetVehicleAudioSettingsManager ()->CreateVehicleAudioSettingsData ();
87- m_pSoundSettingsEntry->Assign (m_pOriginalSoundSettingsEntry);
88-
8985 SetTypeName (" vehicle" );
9086
9187 m_ucMaxPassengers = CClientVehicleManager::GetMaxPassengerCount (usModel);
@@ -214,6 +210,8 @@ CClientVehicle::CClientVehicle(CClientManager* pManager, ElementID ID, unsigned
214210 // We've not changed the wheel scale
215211 m_bWheelScaleChanged = false ;
216212 m_clientModel = pManager->GetModelManager ()->FindModelByID (usModel);
213+
214+ m_pSoundSettingsEntry = nullptr ;
217215}
218216
219217CClientVehicle::~CClientVehicle ()
@@ -2495,7 +2493,16 @@ void CClientVehicle::Create()
24952493 m_pModelInfo->SetCustomCarPlateText (m_strRegPlate.c_str ());
24962494
24972495 // Prepare audio settings
2498- g_pGame->GetVehicleAudioSettingsManager ()->SetNextSettings (m_pSoundSettingsEntry);
2496+ if (m_pSoundSettingsEntry)
2497+ g_pGame->GetVehicleAudioSettingsManager ()->SetNextSettings (m_pSoundSettingsEntry.get ());
2498+ else
2499+ {
2500+ uint32_t modelId = m_usModel;
2501+ if (!CClientVehicleManager::IsStandardModel (modelId))
2502+ modelId = g_pGame->GetModelInfo (m_usModel)->GetParentID ();
2503+
2504+ g_pGame->GetVehicleAudioSettingsManager ()->SetNextSettings (m_usModel);
2505+ }
24992506
25002507 // Create the vehicle
25012508 if (CClientVehicleManager::IsTrainModel (m_usModel))
@@ -4911,6 +4918,23 @@ bool CClientVehicle::OnVehicleFallThroughMap()
49114918 return false ;
49124919}
49134920
4921+ const CVehicleAudioSettingsEntry& CClientVehicle::GetAudioSettings () const noexcept
4922+ {
4923+ if (m_pSoundSettingsEntry)
4924+ return *m_pSoundSettingsEntry.get ();
4925+ else
4926+ return g_pGame->GetVehicleAudioSettingsManager ()->GetVehicleModelAudioSettingsData (m_usModel);
4927+ }
4928+
4929+ CVehicleAudioSettingsEntry& CClientVehicle::GetOrCreateAudioSettings ()
4930+ {
4931+ if (!m_pSoundSettingsEntry)
4932+ m_pSoundSettingsEntry = g_pGame->GetVehicleAudioSettingsManager ()->CreateVehicleAudioSettingsData (m_usModel);
4933+
4934+ return *m_pSoundSettingsEntry.get ();
4935+ }
4936+
4937+
49144938bool CClientVehicle::GetDummyPosition (eVehicleDummies dummy, CVector& position) const
49154939{
49164940 if (dummy >= 0 && dummy < VEHICLE_DUMMY_COUNT)
@@ -5082,10 +5106,16 @@ CVector CClientVehicle::GetEntryPoint(std::uint32_t entryPointIndex)
50825106
50835107void CClientVehicle::ApplyAudioSettings ()
50845108{
5085- if (m_pVehicle)
5086- {
5087- g_pGame->GetVehicleAudioSettingsManager ()->SetNextSettings (GetAudioSettings ());
5088- m_pVehicle->ReinitAudio ();
5089- }
5109+ if (!m_pVehicle)
5110+ return ;
5111+
5112+ g_pGame->GetVehicleAudioSettingsManager ()->SetNextSettings (&GetAudioSettings ());
5113+ m_pVehicle->ReinitAudio ();
5114+ }
5115+
5116+ void CClientVehicle::ResetAudioSettings ()
5117+ {
5118+ m_pSoundSettingsEntry = nullptr ;
5119+ ApplyAudioSettings ();
50905120}
50915121
0 commit comments