Skip to content

Commit 5ac6c8a

Browse files
authored
Optimization Handling (part 2) (#3580)
This part 2 is follow up to PR #3482 (part 1)
1 parent b89e9f5 commit 5ac6c8a

File tree

10 files changed

+217
-285
lines changed

10 files changed

+217
-285
lines changed

Client/game_sa/CHandlingEntrySA.cpp

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/*****************************************************************************
22
*
3-
* PROJECT: Multi Theft Auto v1.0
3+
* PROJECT: Multi Theft Auto
44
* LICENSE: See LICENSE in the top level directory
5-
* FILE: game_sa/CHandlingEntrySA.cpp
5+
* FILE: Client/game_sa/CHandlingEntrySA.cpp
66
* PURPOSE: Vehicle handling data entry
77
*
8-
* Multi Theft Auto is available from http://www.multitheftauto.com/
8+
* Multi Theft Auto is available from https://multitheftauto.com/
99
*
1010
*****************************************************************************/
1111

@@ -22,91 +22,89 @@ CHandlingEntrySA::CHandlingEntrySA()
2222
m_pHandlingSA = new tHandlingDataSA;
2323
memset(m_pHandlingSA, 0, sizeof(tHandlingDataSA));
2424
m_bDeleteInterface = true;
25-
26-
// We have no original data
27-
m_pOriginalData = NULL;
28-
m_bChanged = true;
2925
}
3026

3127
CHandlingEntrySA::CHandlingEntrySA(tHandlingDataSA* pOriginal)
3228
{
3329
// Store gta's pointer
34-
m_pHandlingSA = NULL;
35-
m_pOriginalData = NULL;
30+
m_pHandlingSA = nullptr;
3631
m_bDeleteInterface = false;
3732
memcpy(&m_Handling, pOriginal, sizeof(tHandlingDataSA));
38-
m_bChanged = true;
3933
}
4034

4135
CHandlingEntrySA::~CHandlingEntrySA()
4236
{
43-
if (m_bChanged)
44-
{
45-
pGame->GetHandlingManager()->RemoveChangedVehicle();
46-
}
4737
if (m_bDeleteInterface)
4838
{
49-
delete m_pHandlingSA;
39+
SAFE_DELETE(m_pHandlingSA);
5040
}
5141
}
5242

5343
// Apply the handlingdata from another data
54-
void CHandlingEntrySA::Assign(const CHandlingEntry* pData)
44+
void CHandlingEntrySA::Assign(const CHandlingEntry* pEntry)
5545
{
46+
if (!pEntry)
47+
return;
48+
5649
// Copy the data
57-
const CHandlingEntrySA* pEntrySA = static_cast<const CHandlingEntrySA*>(pData);
50+
const CHandlingEntrySA* pEntrySA = static_cast<const CHandlingEntrySA*>(pEntry);
5851
m_Handling = pEntrySA->m_Handling;
59-
if (m_bChanged)
60-
{
61-
pGame->GetHandlingManager()->RemoveChangedVehicle();
62-
}
63-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
6452
}
6553

66-
void CHandlingEntrySA::Recalculate(unsigned short usModel)
54+
void CHandlingEntrySA::Recalculate()
6755
{
6856
// Real GTA class?
69-
if (m_pHandlingSA)
70-
{
71-
// Copy our stored field to GTA's
72-
memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling));
73-
((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA);
74-
}
57+
if (!m_pHandlingSA)
58+
return;
59+
60+
// Copy our stored field to GTA's
61+
memcpy(m_pHandlingSA, &m_Handling, sizeof(m_Handling));
62+
((void(_stdcall*)(tHandlingDataSA*))FUNC_HandlingDataMgr_ConvertDataToGameUnits)(m_pHandlingSA);
7563
}
7664

77-
// Moved to cpp to check suspension changes against default values to make sure the handling hasn't changed.
78-
void CHandlingEntrySA::SetSuspensionForceLevel(float fForce)
65+
void CHandlingEntrySA::SetSuspensionForceLevel(float fForce) noexcept
7966
{
67+
CheckSuspensionChanges();
8068
m_Handling.fSuspensionForceLevel = fForce;
81-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
8269
}
83-
void CHandlingEntrySA::SetSuspensionDamping(float fDamping)
70+
71+
void CHandlingEntrySA::SetSuspensionDamping(float fDamping) noexcept
8472
{
73+
CheckSuspensionChanges();
8574
m_Handling.fSuspensionDamping = fDamping;
86-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
8775
}
88-
void CHandlingEntrySA::SetSuspensionHighSpeedDamping(float fDamping)
76+
77+
void CHandlingEntrySA::SetSuspensionHighSpeedDamping(float fDamping) noexcept
8978
{
79+
CheckSuspensionChanges();
9080
m_Handling.fSuspensionHighSpdDamping = fDamping;
91-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
9281
}
93-
void CHandlingEntrySA::SetSuspensionUpperLimit(float fUpperLimit)
82+
83+
void CHandlingEntrySA::SetSuspensionUpperLimit(float fUpperLimit) noexcept
9484
{
85+
CheckSuspensionChanges();
9586
m_Handling.fSuspensionUpperLimit = fUpperLimit;
96-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
9787
}
98-
void CHandlingEntrySA::SetSuspensionLowerLimit(float fLowerLimit)
88+
89+
void CHandlingEntrySA::SetSuspensionLowerLimit(float fLowerLimit) noexcept
9990
{
91+
CheckSuspensionChanges();
10092
m_Handling.fSuspensionLowerLimit = fLowerLimit;
101-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
10293
}
103-
void CHandlingEntrySA::SetSuspensionFrontRearBias(float fBias)
94+
95+
void CHandlingEntrySA::SetSuspensionFrontRearBias(float fBias) noexcept
10496
{
97+
CheckSuspensionChanges();
10598
m_Handling.fSuspensionFrontRearBias = fBias;
106-
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
10799
}
108-
void CHandlingEntrySA::SetSuspensionAntiDiveMultiplier(float fAntidive)
100+
101+
void CHandlingEntrySA::SetSuspensionAntiDiveMultiplier(float fAntidive) noexcept
109102
{
103+
CheckSuspensionChanges();
110104
m_Handling.fSuspensionAntiDiveMultiplier = fAntidive;
105+
}
106+
107+
void CHandlingEntrySA::CheckSuspensionChanges() noexcept
108+
{
111109
pGame->GetHandlingManager()->CheckSuspensionChanges(this);
112110
}

Client/game_sa/CHandlingEntrySA.h

Lines changed: 75 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
/*****************************************************************************
22
*
3-
* PROJECT: Multi Theft Auto v1.0
3+
* PROJECT: Multi Theft Auto
44
* LICENSE: See LICENSE in the top level directory
5-
* FILE: game_sa/CHandlingEntrySA.h
5+
* FILE: Client/game_sa/CHandlingEntrySA.h
66
* PURPOSE: Header file for vehicle handling data entry class
77
*
8-
* Multi Theft Auto is available from http://www.multitheftauto.com/
8+
* Multi Theft Auto is available from https://multitheftauto.com/
99
*
1010
*****************************************************************************/
1111

1212
#pragma once
1313

1414
#include <game/CHandlingEntry.h>
15+
1516
#define FUNC_HandlingDataMgr_ConvertDataToGameUnits 0x6F5080
1617

1718
// http://www.gtamodding.com/index.php?title=Handling.cfg#GTA_San_Andreas
@@ -95,111 +96,107 @@ class CHandlingEntrySA : public CHandlingEntry
9596
virtual ~CHandlingEntrySA();
9697

9798
// Use this to copy data from an another handling class to this
98-
void Assign(const CHandlingEntry* pData);
99+
void Assign(const CHandlingEntry* pEntry);
99100

100101
// Get functions
101-
float GetMass() const { return m_Handling.fMass; };
102-
float GetTurnMass() const { return m_Handling.fTurnMass; };
103-
float GetDragCoeff() const { return m_Handling.fDragCoeff; };
104-
const CVector& GetCenterOfMass() const { return m_Handling.vecCenterOfMass; };
102+
float GetMass() const { return m_Handling.fMass; }
103+
float GetTurnMass() const { return m_Handling.fTurnMass; }
104+
float GetDragCoeff() const { return m_Handling.fDragCoeff; }
105+
const CVector& GetCenterOfMass() const { return m_Handling.vecCenterOfMass; }
105106

106-
unsigned int GetPercentSubmerged() const { return m_Handling.uiPercentSubmerged; };
107-
float GetTractionMultiplier() const { return m_Handling.fTractionMultiplier; };
107+
unsigned int GetPercentSubmerged() const { return m_Handling.uiPercentSubmerged; }
108+
float GetTractionMultiplier() const { return m_Handling.fTractionMultiplier; }
108109

109-
eDriveType GetCarDriveType() const { return static_cast<eDriveType>(m_Handling.Transmission.ucDriveType); };
110-
eEngineType GetCarEngineType() const { return static_cast<eEngineType>(m_Handling.Transmission.ucEngineType); };
111-
unsigned char GetNumberOfGears() const { return m_Handling.Transmission.ucNumberOfGears; };
110+
eDriveType GetCarDriveType() const { return static_cast<eDriveType>(m_Handling.Transmission.ucDriveType); }
111+
eEngineType GetCarEngineType() const { return static_cast<eEngineType>(m_Handling.Transmission.ucEngineType); }
112+
unsigned char GetNumberOfGears() const { return m_Handling.Transmission.ucNumberOfGears; }
112113

113-
float GetEngineAcceleration() const { return m_Handling.Transmission.fEngineAcceleration; };
114-
float GetEngineInertia() const { return m_Handling.Transmission.fEngineInertia; };
115-
float GetMaxVelocity() const { return m_Handling.Transmission.fMaxVelocity; };
114+
float GetEngineAcceleration() const { return m_Handling.Transmission.fEngineAcceleration; }
115+
float GetEngineInertia() const { return m_Handling.Transmission.fEngineInertia; }
116+
float GetMaxVelocity() const { return m_Handling.Transmission.fMaxVelocity; }
116117

117-
float GetBrakeDeceleration() const { return m_Handling.fBrakeDeceleration; };
118-
float GetBrakeBias() const { return m_Handling.fBrakeBias; };
119-
bool GetABS() const { return m_Handling.bABS; };
118+
float GetBrakeDeceleration() const { return m_Handling.fBrakeDeceleration; }
119+
float GetBrakeBias() const { return m_Handling.fBrakeBias; }
120+
bool GetABS() const { return m_Handling.bABS; }
120121

121-
float GetSteeringLock() const { return m_Handling.fSteeringLock; };
122-
float GetTractionLoss() const { return m_Handling.fTractionLoss; };
123-
float GetTractionBias() const { return m_Handling.fTractionBias; };
122+
float GetSteeringLock() const { return m_Handling.fSteeringLock; }
123+
float GetTractionLoss() const { return m_Handling.fTractionLoss; }
124+
float GetTractionBias() const { return m_Handling.fTractionBias; }
124125

125-
float GetSuspensionForceLevel() const { return m_Handling.fSuspensionForceLevel; };
126-
float GetSuspensionDamping() const { return m_Handling.fSuspensionDamping; };
127-
float GetSuspensionHighSpeedDamping() const { return m_Handling.fSuspensionHighSpdDamping; };
128-
float GetSuspensionUpperLimit() const { return m_Handling.fSuspensionUpperLimit; };
129-
float GetSuspensionLowerLimit() const { return m_Handling.fSuspensionLowerLimit; };
130-
float GetSuspensionFrontRearBias() const { return m_Handling.fSuspensionFrontRearBias; };
131-
float GetSuspensionAntiDiveMultiplier() const { return m_Handling.fSuspensionAntiDiveMultiplier; };
126+
float GetSuspensionForceLevel() const { return m_Handling.fSuspensionForceLevel; }
127+
float GetSuspensionDamping() const { return m_Handling.fSuspensionDamping; }
128+
float GetSuspensionHighSpeedDamping() const { return m_Handling.fSuspensionHighSpdDamping; }
129+
float GetSuspensionUpperLimit() const { return m_Handling.fSuspensionUpperLimit; }
130+
float GetSuspensionLowerLimit() const { return m_Handling.fSuspensionLowerLimit; }
131+
float GetSuspensionFrontRearBias() const { return m_Handling.fSuspensionFrontRearBias; }
132+
float GetSuspensionAntiDiveMultiplier() const { return m_Handling.fSuspensionAntiDiveMultiplier; }
132133

133-
float GetCollisionDamageMultiplier() const { return m_Handling.fCollisionDamageMultiplier; };
134+
float GetCollisionDamageMultiplier() const { return m_Handling.fCollisionDamageMultiplier; }
134135

135-
unsigned int GetHandlingFlags() const { return m_Handling.uiHandlingFlags; };
136-
unsigned int GetModelFlags() const { return m_Handling.uiModelFlags; };
137-
float GetSeatOffsetDistance() const { return m_Handling.fSeatOffsetDistance; };
138-
unsigned int GetMonetary() const { return m_Handling.uiMonetary; };
136+
unsigned int GetHandlingFlags() const { return m_Handling.uiHandlingFlags; }
137+
unsigned int GetModelFlags() const { return m_Handling.uiModelFlags; }
138+
float GetSeatOffsetDistance() const { return m_Handling.fSeatOffsetDistance; }
139+
unsigned int GetMonetary() const { return m_Handling.uiMonetary; }
139140

140-
eLightType GetHeadLight() const { return static_cast<eLightType>(m_Handling.ucHeadLight); };
141-
eLightType GetTailLight() const { return static_cast<eLightType>(m_Handling.ucTailLight); };
142-
unsigned char GetAnimGroup() const { return m_Handling.ucAnimGroup; };
141+
eLightType GetHeadLight() const { return static_cast<eLightType>(m_Handling.ucHeadLight); }
142+
eLightType GetTailLight() const { return static_cast<eLightType>(m_Handling.ucTailLight); }
143+
unsigned char GetAnimGroup() const { return m_Handling.ucAnimGroup; }
143144

144-
eVehicleTypes GetModel() const { return static_cast<eVehicleTypes>(m_Handling.iVehicleID); };
145-
bool HasSuspensionChanged() const { return true; };
145+
std::uint16_t GetVehicleID() const { return static_cast<std::uint16_t>(m_Handling.iVehicleID); }
146146

147147
// Set functions
148-
void SetMass(float fMass) { m_Handling.fMass = fMass; };
149-
void SetTurnMass(float fTurnMass) { m_Handling.fTurnMass = fTurnMass; };
150-
void SetDragCoeff(float fDrag) { m_Handling.fDragCoeff = fDrag; };
151-
void SetCenterOfMass(const CVector& vecCenter) { m_Handling.vecCenterOfMass = vecCenter; };
148+
void SetMass(float fMass) { m_Handling.fMass = fMass; }
149+
void SetTurnMass(float fTurnMass) { m_Handling.fTurnMass = fTurnMass; }
150+
void SetDragCoeff(float fDrag) { m_Handling.fDragCoeff = fDrag; }
151+
void SetCenterOfMass(const CVector& vecCenter) { m_Handling.vecCenterOfMass = vecCenter; }
152152

153-
void SetPercentSubmerged(unsigned int uiPercent) { m_Handling.uiPercentSubmerged = uiPercent; };
154-
void SetTractionMultiplier(float fTractionMultiplier) { m_Handling.fTractionMultiplier = fTractionMultiplier; };
153+
void SetPercentSubmerged(unsigned int uiPercent) { m_Handling.uiPercentSubmerged = uiPercent; }
154+
void SetTractionMultiplier(float fTractionMultiplier) { m_Handling.fTractionMultiplier = fTractionMultiplier; }
155155

156-
void SetCarDriveType(eDriveType Type) { m_Handling.Transmission.ucDriveType = Type; };
157-
void SetCarEngineType(eEngineType Type) { m_Handling.Transmission.ucEngineType = Type; };
158-
void SetNumberOfGears(unsigned char ucNumber) { m_Handling.Transmission.ucNumberOfGears = ucNumber; };
156+
void SetCarDriveType(eDriveType Type) { m_Handling.Transmission.ucDriveType = Type; }
157+
void SetCarEngineType(eEngineType Type) { m_Handling.Transmission.ucEngineType = Type; }
158+
void SetNumberOfGears(unsigned char ucNumber) { m_Handling.Transmission.ucNumberOfGears = ucNumber; }
159159

160-
void SetEngineAcceleration(float fAcceleration) { m_Handling.Transmission.fEngineAcceleration = fAcceleration; };
161-
void SetEngineInertia(float fInertia) { m_Handling.Transmission.fEngineInertia = fInertia; };
162-
void SetMaxVelocity(float fVelocity) { m_Handling.Transmission.fMaxVelocity = fVelocity; };
160+
void SetEngineAcceleration(float fAcceleration) { m_Handling.Transmission.fEngineAcceleration = fAcceleration; }
161+
void SetEngineInertia(float fInertia) { m_Handling.Transmission.fEngineInertia = fInertia; }
162+
void SetMaxVelocity(float fVelocity) { m_Handling.Transmission.fMaxVelocity = fVelocity; }
163163

164-
void SetBrakeDeceleration(float fDeceleration) { m_Handling.fBrakeDeceleration = fDeceleration; };
165-
void SetBrakeBias(float fBias) { m_Handling.fBrakeBias = fBias; };
166-
void SetABS(bool bABS) { m_Handling.bABS = bABS; };
164+
void SetBrakeDeceleration(float fDeceleration) { m_Handling.fBrakeDeceleration = fDeceleration; }
165+
void SetBrakeBias(float fBias) { m_Handling.fBrakeBias = fBias; }
166+
void SetABS(bool bABS) { m_Handling.bABS = bABS; }
167167

168-
void SetSteeringLock(float fSteeringLock) { m_Handling.fSteeringLock = fSteeringLock; };
169-
void SetTractionLoss(float fTractionLoss) { m_Handling.fTractionLoss = fTractionLoss; };
170-
void SetTractionBias(float fTractionBias) { m_Handling.fTractionBias = fTractionBias; };
168+
void SetSteeringLock(float fSteeringLock) { m_Handling.fSteeringLock = fSteeringLock; }
169+
void SetTractionLoss(float fTractionLoss) { m_Handling.fTractionLoss = fTractionLoss; }
170+
void SetTractionBias(float fTractionBias) { m_Handling.fTractionBias = fTractionBias; }
171171

172-
void SetSuspensionForceLevel(float fForce);
173-
void SetSuspensionDamping(float fDamping);
174-
void SetSuspensionHighSpeedDamping(float fDamping);
175-
void SetSuspensionUpperLimit(float fUpperLimit);
176-
void SetSuspensionLowerLimit(float fLowerLimit);
177-
void SetSuspensionFrontRearBias(float fBias);
178-
void SetSuspensionAntiDiveMultiplier(float fAntidive);
172+
void SetSuspensionForceLevel(float fForce) noexcept;
173+
void SetSuspensionDamping(float fDamping) noexcept;
174+
void SetSuspensionHighSpeedDamping(float fDamping) noexcept;
175+
void SetSuspensionUpperLimit(float fUpperLimit) noexcept;
176+
void SetSuspensionLowerLimit(float fLowerLimit) noexcept;
177+
void SetSuspensionFrontRearBias(float fBias) noexcept;
178+
void SetSuspensionAntiDiveMultiplier(float fAntidive) noexcept;
179179

180-
void SetCollisionDamageMultiplier(float fMultiplier) { m_Handling.fCollisionDamageMultiplier = fMultiplier; };
180+
void SetCollisionDamageMultiplier(float fMultiplier) { m_Handling.fCollisionDamageMultiplier = fMultiplier; }
181181

182-
void SetHandlingFlags(unsigned int uiFlags) { m_Handling.uiHandlingFlags = uiFlags; };
183-
void SetModelFlags(unsigned int uiFlags) { m_Handling.uiModelFlags = uiFlags; };
184-
void SetSeatOffsetDistance(float fDistance) { m_Handling.fSeatOffsetDistance = fDistance; };
185-
void SetMonetary(unsigned int uiMonetary) { m_Handling.uiMonetary = uiMonetary; };
182+
void SetHandlingFlags(unsigned int uiFlags) { m_Handling.uiHandlingFlags = uiFlags; }
183+
void SetModelFlags(unsigned int uiFlags) { m_Handling.uiModelFlags = uiFlags; }
184+
void SetSeatOffsetDistance(float fDistance) { m_Handling.fSeatOffsetDistance = fDistance; }
185+
void SetMonetary(unsigned int uiMonetary) { m_Handling.uiMonetary = uiMonetary; }
186186

187-
void SetHeadLight(eLightType Style) { m_Handling.ucHeadLight = Style; };
188-
void SetTailLight(eLightType Style) { m_Handling.ucTailLight = Style; };
189-
void SetAnimGroup(unsigned char ucGroup) { m_Handling.ucAnimGroup = ucGroup; };
187+
void SetHeadLight(eLightType Style) { m_Handling.ucHeadLight = Style; }
188+
void SetTailLight(eLightType Style) { m_Handling.ucTailLight = Style; }
189+
void SetAnimGroup(unsigned char ucGroup) { m_Handling.ucAnimGroup = ucGroup; }
190190

191-
void Recalculate(unsigned short usModel);
191+
void CheckSuspensionChanges() noexcept;
192192

193-
tHandlingDataSA* GetInterface() { return m_pHandlingSA; };
193+
void Recalculate();
194194

195-
void SetSuspensionChanged(bool bChanged) { m_bChanged = bChanged; };
195+
tHandlingDataSA* GetInterface() const { return m_pHandlingSA; }
196196

197197
private:
198198
tHandlingDataSA* m_pHandlingSA;
199199
bool m_bDeleteInterface;
200200

201201
tHandlingDataSA m_Handling;
202-
203-
tHandlingDataSA* m_pOriginalData;
204-
bool m_bChanged;
205202
};

0 commit comments

Comments
 (0)