Skip to content

Commit baa7a1f

Browse files
committed
refactor: Transfer trainable flag on rider change
1 parent 1c9bef0 commit baa7a1f

File tree

5 files changed

+56
-2
lines changed

5 files changed

+56
-2
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
4646
Int getExperienceValue( const Object* killer ) const; ///< How much do give for being killed
4747
Int getCurrentExperience( void ) const { return m_currentExperience; }; ///< How much experience do I have at the moment?
4848
Bool isTrainable() const; ///< Can I gain experience?
49+
void setTrainable(Bool trainable); ///< Set whether I can gain experience
50+
void resetTrainable(); ///< Set to default trainable state from template
4951
Bool isAcceptingExperiencePoints() const; ///< Either I am trainable, or I have a Sink set up
5052

5153
void setVeterancyLevel( VeterancyLevel newLevel, Bool provideFeedback = TRUE ); ///< Set Level to this
@@ -71,4 +73,5 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
7173
Int m_currentExperience; ///< Number of experience points
7274
ObjectID m_experienceSink; ///< ID of object I have pledged my experience point gains to
7375
Real m_experienceScalar; ///< Scales any experience gained by this multiplier.
76+
Bool m_isTrainable; ///< Can I gain experience?
7477
};

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ ExperienceTracker::ExperienceTracker(Object *parent) :
4545
m_experienceScalar( 1.0f ),
4646
m_currentExperience(0)
4747
{
48+
resetTrainable();
4849
}
4950

5051
//-------------------------------------------------------------------------------------------------
@@ -65,7 +66,19 @@ Int ExperienceTracker::getExperienceValue( const Object* killer ) const
6566
//-------------------------------------------------------------------------------------------------
6667
Bool ExperienceTracker::isTrainable() const
6768
{
68-
return m_parent->getTemplate()->isTrainable();
69+
return m_isTrainable;
70+
}
71+
72+
//-------------------------------------------------------------------------------------------------
73+
void ExperienceTracker::setTrainable(Bool trainable)
74+
{
75+
m_isTrainable = trainable;
76+
}
77+
78+
//-------------------------------------------------------------------------------------------------
79+
void ExperienceTracker::resetTrainable()
80+
{
81+
m_isTrainable = m_parent->getTemplate()->isTrainable();
6982
}
7083

7184
//-------------------------------------------------------------------------------------------------
@@ -236,6 +249,9 @@ void ExperienceTracker::crc( Xfer *xfer )
236249
{
237250
xfer->xferInt( &m_currentExperience );
238251
xfer->xferUser( &m_currentLevel, sizeof( VeterancyLevel ) );
252+
#if !RETAIL_COMPATIBLE_CRC
253+
xfer->xferBool(&m_isTrainable);
254+
#endif
239255
}
240256

241257
//-----------------------------------------------------------------------------
@@ -248,7 +264,11 @@ void ExperienceTracker::xfer( Xfer *xfer )
248264
{
249265

250266
// version
267+
#if RETAIL_COMPATIBLE_XFER_SAVE
251268
XferVersion currentVersion = 1;
269+
#else
270+
XferVersion currentVersion = 2;
271+
#endif
252272
XferVersion version = currentVersion;
253273
xfer->xferVersion( &version, currentVersion );
254274

@@ -267,6 +287,8 @@ void ExperienceTracker::xfer( Xfer *xfer )
267287
// experience scalar
268288
xfer->xferReal( &m_experienceScalar );
269289

290+
if (version >= 2)
291+
xfer->xferBool(&m_isTrainable);
270292
}
271293

272294
//-----------------------------------------------------------------------------

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
4646
Int getExperienceValue( const Object* killer ) const; ///< How much do give for being killed
4747
Int getCurrentExperience( void ) const { return m_currentExperience; }; ///< How much experience do I have at the moment?
4848
Bool isTrainable() const; ///< Can I gain experience?
49+
void setTrainable(Bool trainable); ///< Set whether I can gain experience
50+
void resetTrainable(); ///< Set to default trainable state from template
4951
Bool isAcceptingExperiencePoints() const; ///< Either I am trainable, or I have a Sink set up
5052

5153
void setVeterancyLevel( VeterancyLevel newLevel, Bool provideFeedback = TRUE ); ///< Set Level to this
@@ -71,4 +73,5 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
7173
Int m_currentExperience; ///< Number of experience points
7274
ObjectID m_experienceSink; ///< ID of object I have pledged my experience point gains to
7375
Real m_experienceScalar; ///< Scales any experience gained by this multiplier.
76+
Bool m_isTrainable; ///< Can I gain experience?
7477
};

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,9 @@ void RiderChangeContain::onContaining( Object *rider, Bool wasSelected )
246246
//Transfer experience from the rider to the bike.
247247
ExperienceTracker *riderTracker = rider->getExperienceTracker();
248248
ExperienceTracker *bikeTracker = obj->getExperienceTracker();
249+
#if !RETAIL_COMPATIBLE_CRC
250+
bikeTracker->setTrainable(riderTracker->isTrainable());
251+
#endif
249252
bikeTracker->setVeterancyLevel( riderTracker->getVeterancyLevel(), FALSE );
250253
riderTracker->setExperienceAndLevel( 0, FALSE );
251254

@@ -301,6 +304,7 @@ void RiderChangeContain::onRemoving( Object *rider )
301304
//Transfer experience from the bike to the rider.
302305
ExperienceTracker *riderTracker = rider->getExperienceTracker();
303306
ExperienceTracker *bikeTracker = bike->getExperienceTracker();
307+
bikeTracker->resetTrainable();
304308
riderTracker->setVeterancyLevel( bikeTracker->getVeterancyLevel(), FALSE );
305309
bikeTracker->setExperienceAndLevel( 0, FALSE );
306310
}

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ ExperienceTracker::ExperienceTracker(Object *parent) :
4545
m_experienceScalar( 1.0f ),
4646
m_currentExperience(0)
4747
{
48+
resetTrainable();
4849
}
4950

5051
//-------------------------------------------------------------------------------------------------
@@ -65,7 +66,19 @@ Int ExperienceTracker::getExperienceValue( const Object* killer ) const
6566
//-------------------------------------------------------------------------------------------------
6667
Bool ExperienceTracker::isTrainable() const
6768
{
68-
return m_parent->getTemplate()->isTrainable();
69+
return m_isTrainable;
70+
}
71+
72+
//-------------------------------------------------------------------------------------------------
73+
void ExperienceTracker::setTrainable(Bool trainable)
74+
{
75+
m_isTrainable = trainable;
76+
}
77+
78+
//-------------------------------------------------------------------------------------------------
79+
void ExperienceTracker::resetTrainable()
80+
{
81+
m_isTrainable = m_parent->getTemplate()->isTrainable();
6982
}
7083

7184
//-------------------------------------------------------------------------------------------------
@@ -236,6 +249,9 @@ void ExperienceTracker::crc( Xfer *xfer )
236249
{
237250
xfer->xferInt( &m_currentExperience );
238251
xfer->xferUser( &m_currentLevel, sizeof( VeterancyLevel ) );
252+
#if !RETAIL_COMPATIBLE_CRC
253+
xfer->xferBool(&m_isTrainable);
254+
#endif
239255
}
240256

241257
//-----------------------------------------------------------------------------
@@ -248,7 +264,11 @@ void ExperienceTracker::xfer( Xfer *xfer )
248264
{
249265

250266
// version
267+
#if RETAIL_COMPATIBLE_XFER_SAVE
251268
XferVersion currentVersion = 1;
269+
#else
270+
XferVersion currentVersion = 2;
271+
#endif
252272
XferVersion version = currentVersion;
253273
xfer->xferVersion( &version, currentVersion );
254274

@@ -267,6 +287,8 @@ void ExperienceTracker::xfer( Xfer *xfer )
267287
// experience scalar
268288
xfer->xferReal( &m_experienceScalar );
269289

290+
if (version >= 2)
291+
xfer->xferBool(&m_isTrainable);
270292
}
271293

272294
//-----------------------------------------------------------------------------

0 commit comments

Comments
 (0)