Skip to content

Commit 52681c1

Browse files
committed
- Fixed Base Info not counting transfers (second try because THE LAST ONE VANISHED INTO THE GIT BLACK HOLE).
1 parent 86bc7d7 commit 52681c1

4 files changed

Lines changed: 111 additions & 29 deletions

File tree

‎src/Savegame/Base.cpp‎

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,16 @@ ItemContainer *const Base::getItems()
278278
}
279279

280280
/**
281-
* Changes the amount of scientists in the base.
281+
* Returns the amount of scientists currently in the base.
282+
* @return Number of scientists.
283+
*/
284+
int Base::getScientists() const
285+
{
286+
return _scientists;
287+
}
288+
289+
/**
290+
* Changes the amount of scientists currently in the base.
282291
* @param scientists Number of scientists.
283292
*/
284293
void Base::setScientists(int scientists)
@@ -287,7 +296,16 @@ void Base::setScientists(int scientists)
287296
}
288297

289298
/**
290-
* Changes the amount of engineers in the base.
299+
* Returns the amount of engineers currently in the base.
300+
* @return Number of engineers.
301+
*/
302+
int Base::getEngineers() const
303+
{
304+
return _engineers;
305+
}
306+
307+
/**
308+
* Changes the amount of engineers currently in the base.
291309
* @param engineers Number of engineers.
292310
*/
293311
void Base::setEngineers(int engineers)
@@ -306,7 +324,9 @@ int Base::getAvailableSoldiers() const
306324
for (std::vector<Soldier*>::const_iterator i = _soldiers.begin(); i != _soldiers.end(); i++)
307325
{
308326
if ((*i)->getCraft() == 0)
327+
{
309328
total++;
329+
}
310330
}
311331
return total;
312332
}
@@ -318,7 +338,15 @@ int Base::getAvailableSoldiers() const
318338
*/
319339
int Base::getTotalSoldiers() const
320340
{
321-
return _soldiers.size();
341+
int total = _soldiers.size();
342+
for (std::vector<Transfer*>::const_iterator i = _transfers.begin(); i != _transfers.end(); i++)
343+
{
344+
if ((*i)->getType() == TRANSFER_SOLDIER)
345+
{
346+
total += (*i)->getQuantity();
347+
}
348+
}
349+
return total;
322350
}
323351

324352
/**
@@ -338,7 +366,15 @@ int Base::getAvailableScientists() const
338366
*/
339367
int Base::getTotalScientists() const
340368
{
341-
return _scientists;
369+
int total = _scientists;
370+
for (std::vector<Transfer*>::const_iterator i = _transfers.begin(); i != _transfers.end(); i++)
371+
{
372+
if ((*i)->getType() == TRANSFER_SCIENTIST)
373+
{
374+
total += (*i)->getQuantity();
375+
}
376+
}
377+
return total;
342378
}
343379

344380
/**
@@ -358,7 +394,15 @@ int Base::getAvailableEngineers() const
358394
*/
359395
int Base::getTotalEngineers() const
360396
{
361-
return _engineers;
397+
int total = _engineers;
398+
for (std::vector<Transfer*>::const_iterator i = _transfers.begin(); i != _transfers.end(); i++)
399+
{
400+
if ((*i)->getType() == TRANSFER_ENGINEER)
401+
{
402+
total += (*i)->getQuantity();
403+
}
404+
}
405+
return total;
362406
}
363407

364408
/**
@@ -368,12 +412,7 @@ int Base::getTotalEngineers() const
368412
*/
369413
int Base::getUsedQuarters() const
370414
{
371-
int total = getTotalSoldiers() + getTotalScientists() + getTotalEngineers();
372-
for (std::vector<Transfer*>::const_iterator i = _transfers.begin(); i != _transfers.end(); i++)
373-
{
374-
;
375-
}
376-
return total;
415+
return getTotalSoldiers() + getTotalScientists() + getTotalEngineers();
377416
}
378417

379418
/**
@@ -408,7 +447,10 @@ int Base::getUsedStores() const
408447
}
409448
for (std::vector<Transfer*>::const_iterator i = _transfers.begin(); i != _transfers.end(); i++)
410449
{
411-
;
450+
if ((*i)->getType() == TRANSFER_ITEM)
451+
{
452+
total += (*i)->getQuantity() * _rule->getItem((*i)->getItems())->getSize();
453+
}
412454
}
413455
return (int)floor(total);
414456
}
@@ -497,7 +539,10 @@ int Base::getUsedHangars() const
497539
int total = _crafts.size();
498540
for (std::vector<Transfer*>::const_iterator i = _transfers.begin(); i != _transfers.end(); i++)
499541
{
500-
;
542+
if ((*i)->getType() == TRANSFER_CRAFT)
543+
{
544+
total += (*i)->getQuantity();
545+
}
501546
}
502547
return total;
503548
}

‎src/Savegame/Base.h‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,12 @@ class Base : public Target
7777
std::vector<Transfer*> *const getTransfers();
7878
/// Gets the base's items.
7979
ItemContainer *const getItems();
80+
/// Gets the base's scientists.
81+
int getScientists() const;
8082
/// Sets the base's scientists.
8183
void setScientists(int scientists);
84+
/// Gets the base's engineers.
85+
int getEngineers() const;
8286
/// Sets the base's engineers.
8387
void setEngineers(int engineers);
8488
/// Gets the base's available soldiers.

‎src/Savegame/Transfer.cpp‎

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void Transfer::load(const YAML::Node &node)
5050
}
5151

5252
/**
53-
* Saves the country to a YAML file.
53+
* Saves the transfer to a YAML file.
5454
* @param out YAML emitter.
5555
*/
5656
void Transfer::save(YAML::Emitter &out) const
@@ -60,7 +60,7 @@ void Transfer::save(YAML::Emitter &out) const
6060
}
6161

6262
/**
63-
* Sets the soldier being transferred.
63+
* Changes the soldier being transferred.
6464
* @param soldier Pointer to soldier.
6565
*/
6666
void Transfer::setSoldier(Soldier *soldier)
@@ -69,7 +69,7 @@ void Transfer::setSoldier(Soldier *soldier)
6969
}
7070

7171
/**
72-
* Sets the craft being transferred.
72+
* Changes the craft being transferred.
7373
* @param craft Pointer to craft.
7474
*/
7575
void Transfer::setCraft(Craft *craft)
@@ -78,7 +78,16 @@ void Transfer::setCraft(Craft *craft)
7878
}
7979

8080
/**
81-
* Sets the items being transferred.
81+
* Returns the items being transferred.
82+
* @return Item ID.
83+
*/
84+
std::string Transfer::getItems() const
85+
{
86+
return _itemId;
87+
}
88+
89+
/**
90+
* Changes the items being transferred.
8291
* @param id Item identifier.
8392
* @param qty Item quantity.
8493
*/
@@ -89,7 +98,7 @@ void Transfer::setItems(std::string id, int qty)
8998
}
9099

91100
/**
92-
* Sets the scientists being transferred.
101+
* Changes the scientists being transferred.
93102
* @param scientists Amount of scientists.
94103
*/
95104
void Transfer::setScientists(int scientists)
@@ -98,7 +107,7 @@ void Transfer::setScientists(int scientists)
98107
}
99108

100109
/**
101-
* Sets the engineers being transferred.
110+
* Changes the engineers being transferred.
102111
* @param engineers Amount of engineers.
103112
*/
104113
void Transfer::setEngineers(int engineers)
@@ -107,7 +116,7 @@ void Transfer::setEngineers(int engineers)
107116
}
108117

109118
/**
110-
* Gets the name of the contents of the transfer.
119+
* Returns the name of the contents of the transfer.
111120
* @param lang Language to get strings from.
112121
* @return Name string.
113122
*/
@@ -121,10 +130,6 @@ std::wstring Transfer::getName(Language *lang) const
121130
{
122131
return _craft->getName(lang);
123132
}
124-
else if (_itemQty != 0)
125-
{
126-
return lang->getString(_itemId);
127-
}
128133
else if (_scientists != 0)
129134
{
130135
return lang->getString("STR_SCIENTISTS");
@@ -133,7 +138,7 @@ std::wstring Transfer::getName(Language *lang) const
133138
{
134139
return lang->getString("STR_ENGINEERS");
135140
}
136-
return L"";
141+
return lang->getString(_itemId);
137142
}
138143

139144
/**
@@ -164,10 +169,32 @@ int Transfer::getQuantity() const
164169
{
165170
return _engineers;
166171
}
167-
else
172+
return 1;
173+
}
174+
175+
/**
176+
* Returns the type of the contents of the transfer.
177+
* @return TransferType.
178+
*/
179+
TransferType Transfer::getType() const
180+
{
181+
if (_soldier != 0)
182+
{
183+
return TRANSFER_SOLDIER;
184+
}
185+
else if (_craft != 0)
186+
{
187+
return TRANSFER_CRAFT;
188+
}
189+
else if (_scientists != 0)
190+
{
191+
return TRANSFER_SCIENTIST;
192+
}
193+
else if (_engineers != 0)
168194
{
169-
return 1;
195+
return TRANSFER_ENGINEER;
170196
}
197+
return TRANSFER_ITEM;
171198
}
172199

173200
/**
@@ -194,11 +221,11 @@ void Transfer::advance(Base *base)
194221
}
195222
else if (_scientists != 0)
196223
{
197-
base->setScientists(base->getTotalScientists() + _scientists);
224+
base->setScientists(base->getScientists() + _scientists);
198225
}
199226
else if (_engineers != 0)
200227
{
201-
base->setEngineers(base->getTotalEngineers() + _engineers);
228+
base->setEngineers(base->getEngineers() + _engineers);
202229
}
203230
}
204231
}

‎src/Savegame/Transfer.h‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
namespace OpenXcom
2626
{
2727

28+
enum TransferType { TRANSFER_SOLDIER, TRANSFER_CRAFT, TRANSFER_ITEM, TRANSFER_SCIENTIST, TRANSFER_ENGINEER };
29+
2830
class Soldier;
2931
class Craft;
3032
class Language;
@@ -56,6 +58,8 @@ class Transfer
5658
void setSoldier(Soldier *soldier);
5759
/// Sets the craft of the transfer.
5860
void setCraft(Craft *craft);
61+
/// Gets the items of the transfer.
62+
std::string getItems() const;
5963
/// Sets the items of the transfer.
6064
void setItems(std::string id, int qty = 1);
6165
/// Sets the scientists of the transfer.
@@ -68,6 +72,8 @@ class Transfer
6872
int getHours() const;
6973
/// Gets the quantity of the transfer.
7074
int getQuantity() const;
75+
/// Gets the type of the transfer.
76+
TransferType getType() const;
7177
/// Advances the transfer.
7278
void advance(Base *base);
7379
};

0 commit comments

Comments
 (0)