MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / setupDefenses

Method setupDefenses

src/Savegame/Base.cpp:1237–1303  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1235}
1236
1237void Base::setupDefenses()
1238{
1239 _defenses.clear();
1240 for (std::vector<BaseFacility*>::const_iterator i = _facilities.begin(); i != _facilities.end(); ++i)
1241 {
1242 if ((*i)->getBuildTime() == 0 && (*i)->getRules()->getDefenseValue())
1243 {
1244 _defenses.push_back(*i);
1245 }
1246 }
1247
1248 _vehicles.clear();
1249 // add vehicles that are in the crafts of the base, if it's not out
1250 for (std::vector<Craft*>::iterator c = getCrafts()->begin(); c != getCrafts()->end(); ++c)
1251 {
1252 if ((*c)->getStatus() != "STR_OUT")
1253 {
1254 for (std::vector<Vehicle*>::iterator i = (*c)->getVehicles()->begin(); i != (*c)->getVehicles()->end(); ++i)
1255 {
1256 _vehicles.push_back(*i);
1257 }
1258 }
1259 }
1260
1261 // add vehicles left on the base
1262 for (std::map<std::string, int>::iterator i = _items->getContents()->begin(); i != _items->getContents()->end(); )
1263 {
1264 std::string itemId = (i)->first;
1265 int itemQty = (i)->second;
1266 RuleItem *rule = _rule->getItem(itemId);
1267 if (rule->isFixed())
1268 {
1269 int size = 4;
1270 if (_rule->getUnit(itemId))
1271 {
1272 size = _rule->getArmor(_rule->getUnit(itemId)->getArmor())->getSize();
1273 }
1274 if (rule->getCompatibleAmmo()->empty()) // so this vehicle does not need ammo
1275 {
1276 for (int j = 0; j < itemQty; ++j)
1277 _vehicles.push_back(new Vehicle(rule, rule->getClipSize(), size));
1278 _items->removeItem(itemId, itemQty);
1279 }
1280 else // so this vehicle needs ammo
1281 {
1282 RuleItem *ammo = _rule->getItem(rule->getCompatibleAmmo()->front());
1283 int ammoPerVehicle = ammo->getClipSize();
1284 int baseQty = _items->getItem(ammo->getType()) / ammoPerVehicle;
1285 if (!baseQty)
1286 {
1287 ++i;
1288 continue;
1289 }
1290 int canBeAdded = std::min(itemQty, baseQty);
1291 for (int j=0; j<canBeAdded; ++j)
1292 {
1293 _vehicles.push_back(new Vehicle(rule, ammoPerVehicle, size));
1294 _items->removeItem(ammo->getType(), ammoPerVehicle);

Callers 1

time5SecondsMethod · 0.80

Calls 15

getContentsMethod · 0.80
isFixedMethod · 0.80
getCompatibleAmmoMethod · 0.80
getClipSizeMethod · 0.80
clearMethod · 0.45
getBuildTimeMethod · 0.45
getDefenseValueMethod · 0.45
getRulesMethod · 0.45
getStatusMethod · 0.45
getVehiclesMethod · 0.45
getItemMethod · 0.45
getUnitMethod · 0.45

Tested by

no test coverage detected