3131#include " PreRTS.h" // This must go first in EVERY cpp file int the GameEngine
3232
3333
34- // #include "Common/Thing.h"
35- // #include "Common/ThingTemplate.h"
3634#include " Common/INI.h"
37- // #include "Common/RandomValue.h"
3835#include " Common/Xfer.h"
3936#include " Common/Player.h"
40- // #include "GameClient/Drawable.h"
41- // #include "GameClient/FXList.h"
42- // #include "GameClient/InGameUI.h"
4337#include " GameLogic/GameLogic.h"
44- // #include "GameLogic/Module/BodyModule.h"
4538#include " GameLogic/Module/DelayedUpgradeBehavior.h"
4639#include " GameLogic/Module/AIUpdate.h"
4740#include " GameLogic/Object.h"
48- // #include "GameLogic/ObjectCreationList.h"
4941#include " GameLogic/Weapon.h"
50- // #include "GameClient/Drawable.h"
5142
5243
5344// -------------------------------------------------------------------------------------------------
5445// -------------------------------------------------------------------------------------------------
5546DelayedUpgradeBehavior::DelayedUpgradeBehavior (Thing* thing, const ModuleData* moduleData) : UpdateModule(thing, moduleData)
5647{
57- DEBUG_LOG ((" DelayedUpgradeBehavior::INIT\n " ));
5848 m_triggerCompleted = FALSE ;
5949 m_triggerFrame = 0 ;
6050 // m_shotsLeft = 0;
@@ -78,7 +68,7 @@ DelayedUpgradeBehavior::~DelayedUpgradeBehavior(void)
7868// -------------------------------------------------------------------------------------------------
7969void DelayedUpgradeBehavior::upgradeImplementation (void )
8070{
81- DEBUG_LOG ((" DelayedUpgradeBehavior::upgradeImplementation() 1\n " ));
71+ // DEBUG_LOG(("DelayedUpgradeBehavior::upgradeImplementation() 1\n"));
8272
8373 const DelayedUpgradeBehaviorModuleData* d = getDelayedUpgradeBehaviorModuleData ();
8474
@@ -96,13 +86,13 @@ void DelayedUpgradeBehavior::upgradeImplementation(void)
9686
9787 if (delay > 0 ) {
9888
99- DEBUG_LOG ((" DelayedUpgradeBehavior::upgradeImplementation(): trigger_frame = %d\n " , m_triggerFrame));
89+ DEBUG_LOG ((" DelayedUpgradeBehavior::upgradeImplementation(): trigger_frame = %d" , m_triggerFrame));
10090
10191 setWakeFrame (getObject (), UPDATE_SLEEP (d->m_triggerDelay ));
10292 return ;
10393 }
10494
105- DEBUG_LOG ((" DelayedUpgradeBehavior::upgradeImplementation(): We have no trigger!!!\n " ));
95+ // DEBUG_LOG(("DelayedUpgradeBehavior::upgradeImplementation(): We have no trigger!!!"));
10696
10797}
10898
@@ -111,12 +101,12 @@ void DelayedUpgradeBehavior::upgradeImplementation(void)
111101UpdateSleepTime DelayedUpgradeBehavior::update (void )
112102{
113103 if (m_triggerCompleted) {
114- DEBUG_LOG ((" DelayedUpgradeBehavior::Update(): Already triggered. We should not be awake!!!\n " ));
104+ DEBUG_LOG ((" DelayedUpgradeBehavior::Update(): Already triggered. We should not be awake!!!" ));
115105 return UPDATE_SLEEP_FOREVER;
116106 }
117107
118108 if (!isUpgradeActive ()) {
119- DEBUG_LOG ((" DelayedUpgradeBehavior::Update(): Upgrade not applied. We should not be awake!!!\n " ));
109+ DEBUG_LOG ((" DelayedUpgradeBehavior::Update(): Upgrade not applied. We should not be awake!!!" ));
120110 return UPDATE_SLEEP_FOREVER;
121111 }
122112
@@ -125,7 +115,7 @@ UpdateSleepTime DelayedUpgradeBehavior::update(void)
125115 if (d->m_triggerDelay > 0 ) {
126116 UnsignedInt now = TheGameLogic->getFrame ();
127117 if (now >= m_triggerFrame) {
128- DEBUG_LOG ((" DelayedUpgradeBehavior::update(): Trigger Frame reached.\n " ));
118+ // DEBUG_LOG(("DelayedUpgradeBehavior::update(): Trigger Frame reached."));
129119 triggerUpgrade ();
130120 return UPDATE_SLEEP_FOREVER;
131121 }
@@ -150,37 +140,71 @@ void DelayedUpgradeBehavior::triggerUpgrade(void)
150140{
151141
152142 const DelayedUpgradeBehaviorModuleData* d = getDelayedUpgradeBehaviorModuleData ();
153- const UpgradeTemplate* upgradeTemplate = TheUpgradeCenter->findUpgrade (d->m_upgradeToTrigger );
154- if (!upgradeTemplate)
155- {
156- DEBUG_ASSERTCRASH (0 , (" DelayedUpgradeBehavior for %s can't find upgrade template %s." , getObject ()->getName (), d->m_upgradeToTrigger ));
157- return ;
158- }
159143
160144 m_triggerCompleted = TRUE ;
161145
162146 Player* player = getObject ()->getControllingPlayer ();
163- if (upgradeTemplate->getUpgradeType () == UPGRADE_TYPE_PLAYER)
164- {
165- // get the player
166- player->addUpgrade (upgradeTemplate, UPGRADE_STATUS_COMPLETE);
147+
148+ if (!d->m_upgradesToTrigger .empty ()) {
149+
150+ std::vector<AsciiString>::const_iterator it;
151+ for (it = d->m_upgradesToTrigger .begin (); it != d->m_upgradesToTrigger .end (); it++)
152+ {
153+ const UpgradeTemplate* upgradeTemplate = TheUpgradeCenter->findUpgrade (*it);
154+
155+ if (!upgradeTemplate)
156+ {
157+ DEBUG_CRASH ((" DelayedUpgradeBehavior for %s can't find upgrade template %s." , getObject ()->getName (), it->str ()));
158+ throw INI_INVALID_DATA;
159+ }
160+
161+ if (upgradeTemplate->getUpgradeType () == UPGRADE_TYPE_PLAYER)
162+ {
163+ player->addUpgrade (upgradeTemplate, UPGRADE_STATUS_COMPLETE);
164+ }
165+ else
166+ {
167+ getObject ()->giveUpgrade (upgradeTemplate);
168+ }
169+
170+ player->getAcademyStats ()->recordUpgrade (upgradeTemplate, TRUE );
171+ }
167172 }
168- else
169- {
170- getObject ()->giveUpgrade (upgradeTemplate);
173+
174+
175+ if (!d->m_upgradesToRemove .empty ()) {
176+
177+ std::vector<AsciiString>::const_iterator it;
178+ for (it = d->m_upgradesToRemove .begin (); it != d->m_upgradesToRemove .end (); it++)
179+ {
180+ const UpgradeTemplate* upgradeTemplate = TheUpgradeCenter->findUpgrade (*it);
181+ if (!upgradeTemplate)
182+ {
183+ DEBUG_CRASH ((" DelayedUpgradeBehavior for '%s' cannot find upgrade to remove '%s'" , getObject ()->getName (), it->str ()));
184+ throw INI_INVALID_DATA;
185+ }
186+
187+ if (upgradeTemplate->getUpgradeType () == UPGRADE_TYPE_PLAYER)
188+ {
189+ player->removeUpgrade (upgradeTemplate);
190+ }
191+ else
192+ {
193+ getObject ()->removeUpgrade (upgradeTemplate);
194+ }
195+ }
171196 }
172197
173- player-> getAcademyStats ()-> recordUpgrade (upgradeTemplate, TRUE );
198+ // DEBUG_LOG(("DelayedUpgradeBehavior::triggerUpgrade() Done.") );
174199
175- DEBUG_LOG ((" DelayedUpgradeBehavior::triggerUpgrade() Done.\n " ));
176200
177201}
178202
179203// -------------------------------------------------------------------------------------------------
180204// -------------------------------------------------------------------------------------------------
181205Bool DelayedUpgradeBehavior::resetUpgrade (UpgradeMaskType keyMask)
182206{
183- DEBUG_LOG ((" DelayedUpgradeBehavior::resetUpgrade().\n " ));
207+ // DEBUG_LOG(("DelayedUpgradeBehavior::resetUpgrade()."));
184208 if (UpgradeMux::resetUpgrade (keyMask)) {
185209 m_triggerCompleted = FALSE ;
186210 m_triggerFrame = 0 ;
0 commit comments