| 1235 | } |
| 1236 | |
| 1237 | void 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); |
no test coverage detected