Skip to content

Commit fce6f1d

Browse files
committed
refactor: Abstract conditions into an object function
1 parent 0d63627 commit fce6f1d

File tree

10 files changed

+41
-36
lines changed

10 files changed

+41
-36
lines changed

Generals/Code/GameEngine/Include/GameLogic/Object.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ class Object : public Thing, public Snapshot
216216
ExperienceTracker* getExperienceTracker() {return m_experienceTracker;}
217217
const ExperienceTracker* getExperienceTracker() const {return m_experienceTracker;}
218218
VeterancyLevel getVeterancyLevel() const;
219+
Bool isTrainable() const; //< Can this unit - or its rider - gain veterancy?
219220

220221
inline const AsciiString& getName() const { return m_name; }
221222
inline void setName( const AsciiString& newName ) { m_name = newName; }

Generals/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4128,7 +4128,7 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
41284128
continue;
41294129

41304130
ExperienceTracker *et = pObject->getExperienceTracker();
4131-
if (!et || !et->isTrainable())
4131+
if (!et || !pObject->isTrainable())
41324132
continue;
41334133

41344134
VeterancyLevel oldVet = et->getVeterancyLevel();

Generals/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/SalvageCrateCollide.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ Bool SalvageCrateCollide::eligibleForLevel( Object *other )
135135
return FALSE;
136136

137137
// Sorry, you can't gain levels
138-
if( !other->getExperienceTracker()->isTrainable() )
138+
if (!other->isTrainable())
139139
return FALSE;
140140

141141
return TRUE;

Generals/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/VeterancyCrateCollide.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Bool VeterancyCrateCollide::isValidToExecute( const Object *other ) const
9090
return false;
9191

9292
const ExperienceTracker *et = other->getExperienceTracker();
93-
if( !et || !et->isTrainable() )
93+
if (!et || !other->isTrainable())
9494
{
9595
//If the other unit can't gain experience, then we can't help promote it!
9696
return false;

Generals/Code/GameEngine/Source/GameLogic/Object/Object.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,6 +2694,22 @@ VeterancyLevel Object::getVeterancyLevel() const
26942694
return m_experienceTracker ? m_experienceTracker->getVeterancyLevel() : LEVEL_REGULAR;
26952695
}
26962696

2697+
//-------------------------------------------------------------------------------------------------
2698+
Bool Object::isTrainable() const
2699+
{
2700+
const ExperienceTracker* expTracker = m_experienceTracker;
2701+
2702+
#if !RETAIL_COMPATIBLE_CRC
2703+
if (m_contain)
2704+
{
2705+
if (const Object* rider = m_contain->friend_getRider())
2706+
expTracker = rider->getExperienceTracker();
2707+
}
2708+
#endif
2709+
2710+
return expTracker && expTracker->isTrainable();
2711+
}
2712+
26972713
//-------------------------------------------------------------------------------------------------
26982714
void Object::friend_bindToDrawable( Drawable *draw )
26992715
{

GeneralsMD/Code/GameEngine/Include/GameLogic/Object.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ class Object : public Thing, public Snapshot
232232
ExperienceTracker* getExperienceTracker() {return m_experienceTracker;}
233233
const ExperienceTracker* getExperienceTracker() const {return m_experienceTracker;}
234234
VeterancyLevel getVeterancyLevel() const;
235+
Bool isTrainable() const; //< Can this unit - or its rider - gain veterancy?
235236

236237
inline const AsciiString& getName() const { return m_name; }
237238
inline void setName( const AsciiString& newName ) { m_name = newName; }

GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/CommandXlat.cpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4513,22 +4513,8 @@ GameMessageDisposition CommandTranslator::translateGameMessage(const GameMessage
45134513
if (!pObject)
45144514
continue;
45154515

4516-
ExperienceTracker* et;
4517-
Bool isRiderTrainable = true;
4518-
4519-
// TheSuperHackers @bugfix Stubbjax 10/12/2025 Do not allow ranking if the rider is not trainable.
4520-
const ContainModuleInterface* contain = pObject->getContain();
4521-
if (contain && contain->isRiderChangeContain())
4522-
{
4523-
if (Object* rider = (Object*)contain->friend_getRider())
4524-
{
4525-
et = rider->getExperienceTracker();
4526-
isRiderTrainable = et && et->isTrainable();
4527-
}
4528-
}
4529-
4530-
et = pObject->getExperienceTracker();
4531-
if (!et || !isRiderTrainable || !et->isTrainable())
4516+
ExperienceTracker *et = pObject->getExperienceTracker();
4517+
if (!et || !pObject->isTrainable())
45324518
continue;
45334519

45344520
VeterancyLevel oldVet = et->getVeterancyLevel();

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/SalvageCrateCollide.cpp

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include "GameClient/GameText.h"
4343
#include "GameClient/InGameUI.h"
4444
#include "GameLogic/ExperienceTracker.h"
45-
#include "GameLogic/Module/ContainModule.h"
4645
#include "GameLogic/Object.h"
4746

4847
//-------------------------------------------------------------------------------------------------
@@ -161,23 +160,9 @@ Bool SalvageCrateCollide::eligibleForLevel( Object *other )
161160
return FALSE;
162161

163162
// Sorry, you can't gain levels
164-
if( !other->getExperienceTracker()->isTrainable() )
163+
if (!other->isTrainable())
165164
return FALSE;
166165

167-
#if !RETAIL_COMPATIBLE_CRC
168-
// TheSuperHackers @bugfix Stubbjax 10/12/2025 Do not allow ranking if the rider is not trainable.
169-
const ContainModuleInterface* contain = other->getContain();
170-
if (contain && contain->isRiderChangeContain())
171-
{
172-
if (Object* rider = (Object*)contain->friend_getRider())
173-
{
174-
const ExperienceTracker* et = rider->getExperienceTracker();
175-
if (!et || !et->isTrainable())
176-
return FALSE;
177-
}
178-
}
179-
#endif
180-
181166
return TRUE;
182167
}
183168

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Collide/CrateCollide/VeterancyCrateCollide.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Bool VeterancyCrateCollide::isValidToExecute( const Object *other ) const
9090
return false;
9191

9292
const ExperienceTracker *et = other->getExperienceTracker();
93-
if( !et || !et->isTrainable() )
93+
if (!et || !other->isTrainable())
9494
{
9595
//If the other unit can't gain experience, then we can't help promote it!
9696
return false;

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2988,6 +2988,22 @@ VeterancyLevel Object::getVeterancyLevel() const
29882988
return m_experienceTracker ? m_experienceTracker->getVeterancyLevel() : LEVEL_REGULAR;
29892989
}
29902990

2991+
//-------------------------------------------------------------------------------------------------
2992+
Bool Object::isTrainable() const
2993+
{
2994+
const ExperienceTracker* expTracker = m_experienceTracker;
2995+
2996+
#if !RETAIL_COMPATIBLE_CRC
2997+
if (m_contain && m_contain->isRiderChangeContain())
2998+
{
2999+
if (const Object* rider = m_contain->friend_getRider())
3000+
expTracker = rider->getExperienceTracker();
3001+
}
3002+
#endif
3003+
3004+
return expTracker && expTracker->isTrainable();
3005+
}
3006+
29913007
//-------------------------------------------------------------------------------------------------
29923008
void Object::friend_bindToDrawable( Drawable *draw )
29933009
{

0 commit comments

Comments
 (0)