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

Method time1Hour

src/Geoscape/GeoscapeState.cpp:1356–1422  ·  view source on GitHub ↗

* Takes care of any game logic that has to * run every game hour, like transfers. */

Source from the content-addressed store, hash-verified

1354 * run every game hour, like transfers.
1355 */
1356void 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 }

Callers

nothing calls this directly

Calls 15

getBasesMethod · 0.80
getSavedGameMethod · 0.80
repairMethod · 0.80
getLanguageMethod · 0.80
getTransfersMethod · 0.80
getHoursMethod · 0.80
removeProductionMethod · 0.80
storesOverfullMethod · 0.80
argMethod · 0.60
getCraftsMethod · 0.45
getStatusMethod · 0.45
rearmMethod · 0.45

Tested by

no test coverage detected