Skip to content

Commit 55d0a0a

Browse files
committed
Refactor
1 parent 1c8df3f commit 55d0a0a

14 files changed

+195
-137
lines changed

Client/game_sa/CGameSA.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ CGameSA::CGameSA()
146146
m_pCoverManager = new CCoverManagerSA();
147147
m_pPlantManager = new CPlantManagerSA();
148148
m_pBuildingRemoval = new CBuildingRemovalSA();
149-
m_pVehicleAudioSettingsManager = new CVehicleAudioSettingsManagerSA();
149+
m_pVehicleAudioSettingsManager = std::make_unique<CVehicleAudioSettingsManagerSA>();
150150

151151
m_pRenderer = std::make_unique<CRendererSA>();
152152

@@ -308,7 +308,6 @@ CGameSA::~CGameSA()
308308
delete reinterpret_cast<CAEAudioHardwareSA*>(m_pAEAudioHardware);
309309
delete reinterpret_cast<CAudioContainerSA*>(m_pAudioContainer);
310310
delete reinterpret_cast<CPointLightsSA*>(m_pPointLights);
311-
delete reinterpret_cast<CVehicleAudioSettingsManagerSA*>(m_pVehicleAudioSettingsManager);
312311
delete static_cast<CColStoreSA*>(m_collisionStore);
313312
delete static_cast<CIplStore*>(m_pIplStore);
314313
delete static_cast<CBuildingRemovalSA*>(m_pBuildingRemoval);

Client/game_sa/CGameSA.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "CCoverManagerSA.h"
1919
#include "CPlantManagerSA.h"
2020
#include "CRendererSA.h"
21+
#include "CVehicleAudioSettingsManagerSA.h"
2122

2223
class CAnimBlendClumpDataSAInterface;
2324
class CObjectGroupPhysicalPropertiesSA;
@@ -175,7 +176,11 @@ class CGameSA : public CGame
175176
CBuildingRemoval* GetBuildingRemoval() { return m_pBuildingRemoval; }
176177
CRenderer* GetRenderer() const noexcept override { return m_pRenderer.get(); }
177178

178-
CVehicleAudioSettingsManager* GetVehicleAudioSettingsManager() { return m_pVehicleAudioSettingsManager; }
179+
CVehicleAudioSettingsManager* GetVehicleAudioSettingsManager() const noexcept override
180+
{
181+
return m_pVehicleAudioSettingsManager.get();
182+
}
183+
179184
CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD);
180185
CModelInfo* GetModelInfo(DWORD dwModelID, bool bCanBeInvalid = false);
181186
CObjectGroupPhysicalProperties* GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup);
@@ -353,7 +358,8 @@ class CGameSA : public CGame
353358
CCoverManagerSA* m_pCoverManager;
354359
CPlantManagerSA* m_pPlantManager;
355360
CBuildingRemoval* m_pBuildingRemoval;
356-
CVehicleAudioSettingsManager* m_pVehicleAudioSettingsManager;
361+
362+
std::unique_ptr<CVehicleAudioSettingsManagerSA> m_pVehicleAudioSettingsManager;
357363

358364
std::unique_ptr<CRendererSA> m_pRenderer;
359365

Client/game_sa/CVehicleAudioSettingsEntrySA.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "game/CVehicleAudioSettingsEntry.h"
1515
#include <game/Common.h>
1616

17+
// SA interface
1718
struct tVehicleAudioSettings
1819
{
1920
eVehicleSoundType m_eVehicleSoundType;
@@ -40,10 +41,10 @@ class CVehicleAudioSettingsEntrySA final : public CVehicleAudioSettingsEntry
4041
CVehicleAudioSettingsEntrySA(tVehicleAudioSettings* pSettings) { m_Settings = *pSettings; };
4142
~CVehicleAudioSettingsEntrySA() = default;
4243

43-
const tVehicleAudioSettings& getInterface() const noexcept { return m_Settings; };
44+
const tVehicleAudioSettings& GetInterface() const noexcept { return m_Settings; };
4445

4546
void Assign(const tVehicleAudioSettings& settings) noexcept { m_Settings = settings; }
46-
void Assign(const CVehicleAudioSettingsEntry* settings) noexcept { m_Settings = static_cast<const CVehicleAudioSettingsEntrySA*>(settings)->getInterface(); };
47+
void Assign(const CVehicleAudioSettingsEntry& settings) noexcept { m_Settings = static_cast<const CVehicleAudioSettingsEntrySA&>(settings).GetInterface(); };
4748

4849
eVehicleSoundType GetSoundType() const noexcept override { return m_Settings.m_eVehicleSoundType; };
4950
short GetEngineOnSoundBankID() const noexcept override { return m_Settings.m_nEngineOnSoundBankId; };

Client/game_sa/CVehicleAudioSettingsManagerSA.cpp

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,43 +21,42 @@ CVehicleAudioSettingsManagerSA::CVehicleAudioSettingsManagerSA()
2121
ResetAudioSettingsData();
2222
}
2323

24-
CVehicleAudioSettingsEntry* CVehicleAudioSettingsManagerSA::CreateVehicleAudioSettingsData()
24+
std::unique_ptr<CVehicleAudioSettingsEntry> CVehicleAudioSettingsManagerSA::CreateVehicleAudioSettingsData(uint32_t modelId)
2525
{
26-
CVehicleAudioSettingsEntrySA* pSettings = new CVehicleAudioSettingsEntrySA();
27-
return pSettings;
26+
auto settings = std::make_unique<CVehicleAudioSettingsEntrySA>();
27+
const auto& fromSetting = GetVehicleModelAudioSettingsData(modelId);
28+
settings->Assign(fromSetting);
29+
return settings;
2830
}
2931

30-
CVehicleAudioSettingsEntry* CVehicleAudioSettingsManagerSA::GetVehicleModelAudioSettingsData(eVehicleTypes eModel)
32+
CVehicleAudioSettingsEntry& CVehicleAudioSettingsManagerSA::GetVehicleModelAudioSettingsData(uint32_t modelId) noexcept
3133
{
32-
size_t uiSettingsID = GetVehicleModelAudioSettingsID(eModel);
33-
if (uiSettingsID >= VEHICLES_COUNT)
34-
return nullptr;
35-
36-
return &m_modelEntrys[uiSettingsID];
34+
return m_modelEntrys[GetVehicleModelAudioSettingsID(modelId)];
3735
}
3836

39-
bool CVehicleAudioSettingsManagerSA::ApplyAudioSettingsData(eVehicleTypes eModel, CVehicleAudioSettingsEntry* pEntry)
37+
void CVehicleAudioSettingsManagerSA::SetNextSettings(CVehicleAudioSettingsEntry const* pSettings) noexcept
4038
{
41-
size_t uiSettingsID = GetVehicleModelAudioSettingsID(eModel);
42-
if (uiSettingsID >= VEHICLES_COUNT)
43-
return false;
39+
pNextVehicleAudioSettings = &static_cast<CVehicleAudioSettingsEntrySA const*>(pSettings)->GetInterface();
40+
}
4441

45-
m_modelEntrys[uiSettingsID].Assign(pEntry);
46-
return true;
42+
void CVehicleAudioSettingsManagerSA::SetNextSettings(uint32_t modelId) noexcept
43+
{
44+
pNextVehicleAudioSettings = &m_modelEntrys[GetVehicleModelAudioSettingsID(modelId)].GetInterface();
4745
}
4846

49-
void CVehicleAudioSettingsManagerSA::SetNextSettings(CVehicleAudioSettingsEntry* pSettings)
47+
void CVehicleAudioSettingsManagerSA::ResetModelSettings(uint32_t modelId) noexcept
5048
{
51-
pNextVehicleAudioSettings = &static_cast<CVehicleAudioSettingsEntrySA*>(pSettings)->getInterface();
49+
size_t index = GetVehicleModelAudioSettingsID(modelId);
50+
m_modelEntrys[index].Assign(ORIGINAL_AUDIO_SETTINGS[index]);
5251
}
5352

54-
void CVehicleAudioSettingsManagerSA::ResetAudioSettingsData()
53+
void CVehicleAudioSettingsManagerSA::ResetAudioSettingsData() noexcept
5554
{
5655
for (size_t i = 0; i < VEHICLES_COUNT; i++)
5756
m_modelEntrys[i].Assign(ORIGINAL_AUDIO_SETTINGS[i]);
5857
}
5958

60-
void CVehicleAudioSettingsManagerSA::StaticSetHooks()
59+
void CVehicleAudioSettingsManagerSA::StaticSetHooks() noexcept
6160
{
6261
// Replace
6362
// 8D 34 B5 F0 0A 86 00 ; lea esi, _VehicleAudioProperties.m_eVehicleSoundType[esi*4]

Client/game_sa/CVehicleAudioSettingsManagerSA.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#pragma once
1313

1414
#include <game/CVehicleAudioSettingsManager.h>
15+
#include "CVehicleAudioSettingsEntrySA.h"
1516
#include "CAEVehicleAudioEntitySA.h"
1617
#include <array>
1718

@@ -22,17 +23,19 @@ class CVehicleAudioSettingsManagerSA final : public CVehicleAudioSettingsManager
2223
public:
2324
CVehicleAudioSettingsManagerSA();
2425

25-
CVehicleAudioSettingsEntry* CreateVehicleAudioSettingsData();
26-
CVehicleAudioSettingsEntry* GetVehicleModelAudioSettingsData(eVehicleTypes eModel);
26+
std::unique_ptr<CVehicleAudioSettingsEntry> CreateVehicleAudioSettingsData(uint32_t modelId) override;
27+
CVehicleAudioSettingsEntry& GetVehicleModelAudioSettingsData(uint32_t modelId) noexcept override;
2728

28-
bool ApplyAudioSettingsData(eVehicleTypes eModel, CVehicleAudioSettingsEntry* pEntry);
29-
void SetNextSettings(CVehicleAudioSettingsEntry* pSettings);
29+
void ResetModelSettings(uint32_t modelId) noexcept override;
30+
void ResetAudioSettingsData() noexcept;
3031

31-
static void StaticSetHooks();
32+
void SetNextSettings(CVehicleAudioSettingsEntry const* pSettings) noexcept override;
33+
void SetNextSettings(uint32_t modelId) noexcept override;
34+
35+
static void StaticSetHooks() noexcept;
3236

3337
private:
34-
void ResetAudioSettingsData();
35-
size_t GetVehicleModelAudioSettingsID(eVehicleTypes eModel) const noexcept { return eModel - 400; };
38+
size_t GetVehicleModelAudioSettingsID(uint32_t modelId) const noexcept { return modelId - 400; };
3639

3740
private:
3841
// Array with the model audio settings entries

Client/mods/deathmatch/logic/CClientVehicle.cpp

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

219217
CClientVehicle::~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+
49144938
bool 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

50835107
void 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

Client/mods/deathmatch/logic/CClientVehicle.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -541,9 +541,11 @@ class CClientVehicle : public CClientStreamElement
541541
void ResetWheelScale();
542542

543543
bool OnVehicleFallThroughMap();
544-
CVehicleAudioSettingsEntry* GetAudioSettings() { return m_pSoundSettingsEntry; };
544+
const CVehicleAudioSettingsEntry& GetAudioSettings() const noexcept;
545+
CVehicleAudioSettingsEntry& GetOrCreateAudioSettings();
545546

546547
void ApplyAudioSettings();
548+
void ResetAudioSettings();
547549

548550
bool GetDummyPosition(eVehicleDummies dummy, CVector& position) const;
549551
bool SetDummyPosition(eVehicleDummies dummy, const CVector& position);
@@ -672,8 +674,7 @@ class CClientVehicle : public CClientStreamElement
672674
float m_fNitroLevel;
673675
char m_cNitroCount;
674676
float m_fWheelScale;
675-
const CVehicleAudioSettingsEntry* m_pOriginalSoundSettingsEntry;
676-
CVehicleAudioSettingsEntry* m_pSoundSettingsEntry;
677+
std::unique_ptr<CVehicleAudioSettingsEntry> m_pSoundSettingsEntry;
677678

678679
bool m_bChainEngine;
679680
bool m_bIsDerailed;

Client/mods/deathmatch/logic/CClientVehicleManager.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -432,14 +432,6 @@ bool CClientVehicleManager::IsStandardModel(unsigned long ulModel)
432432
return ulModel >= 400 && ulModel <= 611;
433433
}
434434

435-
unsigned long CClientVehicleManager::GetRootModelId(unsigned long ulModel)
436-
{
437-
if (IsStandardModel(ulModel))
438-
return ulModel;
439-
440-
return g_pGame->GetModelInfo(ulModel)->GetParentID();
441-
}
442-
443435
eClientVehicleType CClientVehicleManager::GetVehicleType(unsigned long ulModel)
444436
{
445437
// Valid vehicle id?

Client/mods/deathmatch/logic/CClientVehicleManager.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class CClientVehicleManager
3535
static bool IsTrainModel(unsigned long ulModel);
3636
static bool IsValidModel(unsigned long ulModel);
3737
static bool IsStandardModel(unsigned long ulModel);
38-
static unsigned long GetRootModelId(unsigned long ulModel);
3938
static eClientVehicleType GetVehicleType(unsigned long ulModel);
4039
static unsigned char GetMaxPassengerCount(unsigned long ulModel);
4140
static unsigned char ConvertIndexToGameSeat(unsigned long ulModel, unsigned char ucIndex);

0 commit comments

Comments
 (0)