Skip to content

Commit 620460d

Browse files
Stubbjaxxezon
authored andcommitted
unify(object): Merge the condition switch for the unit veterancy effect from Zero Hour (#1455)
1 parent 84aa98c commit 620460d

File tree

8 files changed

+33
-30
lines changed

8 files changed

+33
-30
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
5151
Bool isTrainable() const; ///< Can I gain experience?
5252
Bool isAcceptingExperiencePoints() const; ///< Either I am trainable, or I have a Sink set up
5353

54-
void setVeterancyLevel( VeterancyLevel newLevel ); ///< Set Level to this
54+
void setVeterancyLevel( VeterancyLevel newLevel, Bool provideFeedback = TRUE ); ///< Set Level to this
5555
void setMinVeterancyLevel( VeterancyLevel newLevel ); ///< Set Level to AT LEAST this... if we are already >= this level, do nothing.
5656
void addExperiencePoints( Int experienceGain, Bool canScaleForBonus = TRUE ); ///< Gain this many exp.
5757
Bool gainExpForLevel(Int levelsToGain, Bool canScaleForBonus = TRUE ); ///< Gain enough exp to gain a level. return false if can't gain a level.
5858
Bool canGainExpForLevel(Int levelsToGain) const; ///< return same value as gainExpForLevel, but don't change anything
59-
void setExperienceAndLevel(Int experienceIn);
59+
void setExperienceAndLevel(Int experienceIn, Bool provideFeedback = TRUE );
6060
void setExperienceSink( ObjectID sink ); ///< My experience actually goes to this person (loose couple)
6161

6262
Real getExperienceScalar() const { return m_experienceScalar; }

Generals/Code/GameEngine/Include/GameLogic/Module/ActiveBody.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class ActiveBody : public BodyModule
8787
virtual ObjectID getClearableLastAttacker() const { return (m_lastDamageCleared ? INVALID_ID : m_lastDamageInfo.in.m_sourceID); }
8888
virtual void clearLastAttacker() { m_lastDamageCleared = true; }
8989

90-
void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel );
90+
void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback = TRUE );
9191

9292
virtual void setArmorSetFlag(ArmorSetType ast) { m_curArmorSetFlags.set(ast, 1); }
9393
virtual void clearArmorSetFlag(ArmorSetType ast) { m_curArmorSetFlags.set(ast, 0); }

Generals/Code/GameEngine/Include/GameLogic/Module/BodyModule.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ class BodyModuleInterface
150150
virtual void setDamageState( BodyDamageType newState ) = 0; ///< control damage state directly. Will adjust hitpoints.
151151
virtual void setAflame( Bool setting ) = 0;///< This is a major change like a damage state.
152152

153-
virtual void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel ) = 0; ///< I just achieved this level right this moment
153+
virtual void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback ) = 0; ///< I just achieved this level right this moment
154154

155155
virtual void setArmorSetFlag(ArmorSetType ast) = 0;
156156
virtual void clearArmorSetFlag(ArmorSetType ast) = 0;
@@ -237,7 +237,7 @@ class BodyModule : public BehaviorModule, public BodyModuleInterface
237237
virtual void setDamageState( BodyDamageType newState ) = 0; ///< control damage state directly. Will adjust hitpoints.
238238
virtual void setAflame( Bool setting ) = 0;///< This is a major change like a damage state.
239239

240-
virtual void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel ) = 0; ///< I just achieved this level right this moment
240+
virtual void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback = FALSE ) = 0; ///< I just achieved this level right this moment
241241

242242
virtual void setArmorSetFlag(ArmorSetType ast) = 0;
243243
virtual void clearArmorSetFlag(ArmorSetType ast) = 0;

Generals/Code/GameEngine/Include/GameLogic/Module/InactiveBody.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class InactiveBody : public BodyModule
5858
virtual void setDamageState( BodyDamageType newState ); ///< control damage state directly. Will adjust hitpoints.
5959
virtual void setAflame( Bool setting ){}///< This is a major change like a damage state.
6060

61-
void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel ) { /* nothing */ }
61+
void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback ) { /* nothing */ }
6262

6363
virtual void setArmorSetFlag(ArmorSetType ast) { /* nothing */ }
6464
virtual void clearArmorSetFlag(ArmorSetType ast) { /* nothing */ }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class Object : public Thing, public Snapshot
217217
void healCompletely(); ///< Restore max health to this Object
218218

219219
void scoreTheKill( const Object *victim ); ///< I just killed this object.
220-
void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel ); ///< I just achieved this level right this moment
220+
void onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback = TRUE ); ///< I just achieved this level right this moment
221221
ExperienceTracker* getExperienceTracker() {return m_experienceTracker;}
222222
const ExperienceTracker* getExperienceTracker() const {return m_experienceTracker;}
223223
VeterancyLevel getVeterancyLevel() const;

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

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,29 +1070,32 @@ void ActiveBody::setIndestructible( Bool indestructible )
10701070

10711071
//-------------------------------------------------------------------------------------------------
10721072
//-------------------------------------------------------------------------------------------------
1073-
void ActiveBody::onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel )
1073+
void ActiveBody::onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback )
10741074
{
10751075
if (oldLevel == newLevel)
10761076
return;
10771077

10781078
if (oldLevel < newLevel)
10791079
{
1080-
AudioEventRTS veterancyChanged;
1081-
switch (newLevel)
1080+
if (provideFeedback)
10821081
{
1083-
case LEVEL_VETERAN:
1084-
veterancyChanged = *getObject()->getTemplate()->getSoundPromotedVeteran();
1085-
break;
1086-
case LEVEL_ELITE:
1087-
veterancyChanged = *getObject()->getTemplate()->getSoundPromotedElite();
1088-
break;
1089-
case LEVEL_HEROIC:
1090-
veterancyChanged = *getObject()->getTemplate()->getSoundPromotedHero();
1091-
break;
1092-
}
1082+
AudioEventRTS veterancyChanged;
1083+
switch (newLevel)
1084+
{
1085+
case LEVEL_VETERAN:
1086+
veterancyChanged = *getObject()->getTemplate()->getSoundPromotedVeteran();
1087+
break;
1088+
case LEVEL_ELITE:
1089+
veterancyChanged = *getObject()->getTemplate()->getSoundPromotedElite();
1090+
break;
1091+
case LEVEL_HEROIC:
1092+
veterancyChanged = *getObject()->getTemplate()->getSoundPromotedHero();
1093+
break;
1094+
}
10931095

1094-
veterancyChanged.setObjectID(getObject()->getID());
1095-
TheAudio->addAudioEvent(&veterancyChanged);
1096+
veterancyChanged.setObjectID(getObject()->getID());
1097+
TheAudio->addAudioEvent(&veterancyChanged);
1098+
}
10961099

10971100
//Also mark the UI dirty -- incase the object is selected or contained.
10981101
Object *obj = getObject();

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ void ExperienceTracker::setMinVeterancyLevel( VeterancyLevel newLevel )
9898
}
9999

100100
//-------------------------------------------------------------------------------------------------
101-
void ExperienceTracker::setVeterancyLevel( VeterancyLevel newLevel )
101+
void ExperienceTracker::setVeterancyLevel( VeterancyLevel newLevel, Bool provideFeedback )
102102
{
103103
// This does not check for IsTrainable, because this function is for explicit setting,
104104
// so the setter is assumed to know what they are doing. The game function
@@ -109,7 +109,7 @@ void ExperienceTracker::setVeterancyLevel( VeterancyLevel newLevel )
109109
m_currentLevel = newLevel;
110110
m_currentExperience = m_parent->getTemplate()->getExperienceRequired(m_currentLevel); //Minimum for this level
111111
if (m_parent)
112-
m_parent->onVeterancyLevelChanged( oldLevel, newLevel );
112+
m_parent->onVeterancyLevelChanged( oldLevel, newLevel, provideFeedback );
113113
}
114114
}
115115

@@ -185,7 +185,7 @@ void ExperienceTracker::addExperiencePoints( Int experienceGain, Bool canScaleFo
185185

186186
}
187187
//-------------------------------------------------------------------------------------------------
188-
void ExperienceTracker::setExperienceAndLevel( Int experienceIn )
188+
void ExperienceTracker::setExperienceAndLevel( Int experienceIn, Bool provideFeedback )
189189
{
190190
if( m_experienceSink != INVALID_ID )
191191
{
@@ -194,7 +194,7 @@ void ExperienceTracker::setExperienceAndLevel( Int experienceIn )
194194
if( sinkPointer )
195195
{
196196
// Not a fatal failure if not valid, he died when I was in the air.
197-
sinkPointer->getExperienceTracker()->setExperienceAndLevel( experienceIn );
197+
sinkPointer->getExperienceTracker()->setExperienceAndLevel( experienceIn, provideFeedback );
198198
return;
199199
}
200200
}
@@ -220,7 +220,7 @@ void ExperienceTracker::setExperienceAndLevel( Int experienceIn )
220220
if( oldLevel != m_currentLevel )
221221
{
222222
// Edge trigger special level gain effects.
223-
m_parent->onVeterancyLevelChanged( oldLevel, m_currentLevel ); //<<== paradox! this may be a level lost!
223+
m_parent->onVeterancyLevelChanged( oldLevel, m_currentLevel, provideFeedback ); //<<== paradox! this may be a level lost!
224224
}
225225

226226
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2763,7 +2763,7 @@ Bool Object::hasSpecialPower( SpecialPowerType type ) const
27632763
}
27642764

27652765
//-------------------------------------------------------------------------------------------------
2766-
void Object::onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel )
2766+
void Object::onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel newLevel, Bool provideFeedback )
27672767
{
27682768
updateUpgradeModules();
27692769

@@ -2773,7 +2773,7 @@ void Object::onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel ne
27732773

27742774
BodyModuleInterface* body = getBodyModule();
27752775
if (body)
2776-
body->onVeterancyLevelChanged(oldLevel, newLevel);
2776+
body->onVeterancyLevelChanged(oldLevel, newLevel, provideFeedback);
27772777

27782778

27792779
Bool hideAnimationForStealth = ( ! isLocallyControlled() && testStatus(OBJECT_STATUS_STEALTHED));
@@ -2819,7 +2819,7 @@ void Object::onVeterancyLevelChanged( VeterancyLevel oldLevel, VeterancyLevel ne
28192819
break;
28202820
}
28212821

2822-
if( doAnimation && TheGameLogic->getDrawIconUI() )
2822+
if( doAnimation && TheGameLogic->getDrawIconUI() && provideFeedback )
28232823
{
28242824
if( TheAnim2DCollection && TheGlobalData->m_levelGainAnimationName.isEmpty() == FALSE )
28252825
{

0 commit comments

Comments
 (0)