* Takes care of any game logic that has to * run every game hour, like transfers. */
| 1354 | * run every game hour, like transfers. |
| 1355 | */ |
| 1356 | void GeoscapeState::time1Hour() |
| 1357 | { |
| 1358 | // Handle craft maintenance |
| 1359 | for (std::vector<Base*>::iterator i = _game->getSavedGame()->getBases()->begin(); i != _game->getSavedGame()->getBases()->end(); ++i) |
| 1360 | { |
| 1361 | for (std::vector<Craft*>::iterator j = (*i)->getCrafts()->begin(); j != (*i)->getCrafts()->end(); ++j) |
| 1362 | { |
| 1363 | if ((*j)->getStatus() == "STR_REPAIRS") |
| 1364 | { |
| 1365 | (*j)->repair(); |
| 1366 | } |
| 1367 | else if ((*j)->getStatus() == "STR_REARMING") |
| 1368 | { |
| 1369 | std::string s = (*j)->rearm(_game->getRuleset()); |
| 1370 | if (s != "") |
| 1371 | { |
| 1372 | std::wstring msg = tr("STR_NOT_ENOUGH_ITEM_TO_REARM_CRAFT_AT_BASE") |
| 1373 | .arg(tr(s)) |
| 1374 | .arg((*j)->getName(_game->getLanguage())) |
| 1375 | .arg((*i)->getName()); |
| 1376 | popup(new CraftErrorState(_game, this, msg)); |
| 1377 | } |
| 1378 | } |
| 1379 | } |
| 1380 | } |
| 1381 | |
| 1382 | // Handle transfers |
| 1383 | bool window = false; |
| 1384 | for (std::vector<Base*>::iterator i = _game->getSavedGame()->getBases()->begin(); i != _game->getSavedGame()->getBases()->end(); ++i) |
| 1385 | { |
| 1386 | for (std::vector<Transfer*>::iterator j = (*i)->getTransfers()->begin(); j != (*i)->getTransfers()->end(); ++j) |
| 1387 | { |
| 1388 | (*j)->advance(*i); |
| 1389 | if (!window && (*j)->getHours() == 0) |
| 1390 | { |
| 1391 | window = true; |
| 1392 | } |
| 1393 | } |
| 1394 | } |
| 1395 | if (window) |
| 1396 | { |
| 1397 | popup(new ItemsArrivingState(_game, this)); |
| 1398 | } |
| 1399 | // Handle Production |
| 1400 | for (std::vector<Base*>::iterator i = _game->getSavedGame()->getBases()->begin(); i != _game->getSavedGame()->getBases()->end(); ++i) |
| 1401 | { |
| 1402 | std::map<Production*, productionProgress_e> toRemove; |
| 1403 | for (std::vector<Production*>::const_iterator j = (*i)->getProductions().begin(); j != (*i)->getProductions().end(); ++j) |
| 1404 | { |
| 1405 | toRemove[(*j)] = (*j)->step((*i), _game->getSavedGame(), _game->getRuleset()); |
| 1406 | } |
| 1407 | for (std::map<Production*, productionProgress_e>::iterator j = toRemove.begin(); j != toRemove.end(); ++j) |
| 1408 | { |
| 1409 | if (j->second > PROGRESS_NOT_COMPLETE) |
| 1410 | { |
| 1411 | (*i)->removeProduction (j->first); |
| 1412 | popup(new ProductionCompleteState(_game, (*i), tr(j->first->getRules()->getName()), this, j->second)); |
| 1413 | } |
nothing calls this directly
no test coverage detected