Skip to content

Commit 46ba2d5

Browse files
committed
Restore default exhaust fumes position when disconnecting
1 parent 0017cec commit 46ba2d5

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

Client/game_sa/CGameSA.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,9 @@ void CGameSA::Reset ( void )
467467
// Restore the HUD
468468
m_pHud->Disable ( false );
469469
m_pHud->SetComponentVisible ( HUD_ALL, true );
470+
471+
// Restore model exhaust fumes positions
472+
CModelInfoSA::ResetAllVehicleExhaustFumes();
470473
}
471474
}
472475

Client/game_sa/CModelInfoSA.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ std::map < unsigned short, int > CModelInfoSA::ms_RestreamTxdIDMap;
2424
std::map < DWORD, float > CModelInfoSA::ms_ModelDefaultLodDistanceMap;
2525
std::set < uint > CModelInfoSA::ms_ReplacedColModels;
2626
std::map < DWORD, BYTE > CModelInfoSA::ms_ModelDefaultAlphaTransparencyMap;
27+
std::unordered_map<CVehicleModelInfoSAInterface*, CVector> CModelInfoSA::ms_ModelDefaultVehicleFumesPosition;
2728

2829
CModelInfoSA::CModelInfoSA ( void )
2930
{
@@ -951,10 +952,28 @@ void CModelInfoSA::SetVehicleExhaustFumesPosition(const CVector& position)
951952
if (!IsVehicle())
952953
return;
953954

955+
// Store default position in map
954956
auto pVehicleModel = reinterpret_cast<CVehicleModelInfoSAInterface*>(m_pInterface);
957+
auto iter = ms_ModelDefaultVehicleFumesPosition.find(pVehicleModel);
958+
if (iter == ms_ModelDefaultVehicleFumesPosition.end())
959+
{
960+
ms_ModelDefaultVehicleFumesPosition.insert({ pVehicleModel, pVehicleModel->pVisualInfo->exhaustPosition });
961+
}
962+
963+
// Set fumes position
955964
pVehicleModel->pVisualInfo->exhaustPosition = position;
956965
}
957966

967+
void CModelInfoSA::ResetAllVehicleExhaustFumes()
968+
{
969+
for (auto& info : ms_ModelDefaultVehicleFumesPosition)
970+
{
971+
CVehicleModelInfoSAInterface* pVehicleModel = info.first;
972+
pVehicleModel->pVisualInfo->exhaustPosition = info.second;
973+
}
974+
ms_ModelDefaultVehicleFumesPosition.clear();
975+
}
976+
958977
void CModelInfoSA::SetCustomModel ( RpClump* pClump )
959978
{
960979
// Error

Client/game_sa/CModelInfoSA.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,10 @@ class CModelInfoSA : public CModelInfo
270270
static std::map < unsigned short, int > ms_RestreamTxdIDMap;
271271
static std::map < DWORD, float > ms_ModelDefaultLodDistanceMap;
272272
static std::map < DWORD, BYTE > ms_ModelDefaultAlphaTransparencyMap;
273+
static std::unordered_map<CVehicleModelInfoSAInterface*, CVector> ms_ModelDefaultVehicleFumesPosition;
273274
bool m_bAddedRefForCollision;
274275
SVehicleSupportedUpgrades m_ModelSupportedUpgrades;
276+
275277
public:
276278
static std::set < uint > ms_ReplacedColModels;
277279

@@ -340,6 +342,7 @@ class CModelInfoSA : public CModelInfo
340342
void* SetVehicleSuspensionData( void* pSuspensionLines );
341343
CVector GetVehicleExhaustFumesPosition() override;
342344
void SetVehicleExhaustFumesPosition(const CVector& position) override;
345+
static void ResetAllVehicleExhaustFumes();
343346

344347
// ONLY use for peds
345348
void GetVoice ( short* psVoiceType, short* psVoice );

0 commit comments

Comments
 (0)