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

Method time1Day

src/Geoscape/GeoscapeState.cpp:1465–1648  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

1463 * run every game day, like constructions.
1464 */
1465void GeoscapeState::time1Day()
1466{
1467 for (std::vector<Base*>::iterator i = _game->getSavedGame()->getBases()->begin(); i != _game->getSavedGame()->getBases()->end(); ++i)
1468 {
1469 // Handle facility construction
1470 for (std::vector<BaseFacility*>::iterator j = (*i)->getFacilities()->begin(); j != (*i)->getFacilities()->end(); ++j)
1471 {
1472 if ((*j)->getBuildTime() > 0)
1473 {
1474 (*j)->build();
1475 if ((*j)->getBuildTime() == 0)
1476 {
1477 popup(new ProductionCompleteState(_game, (*i), tr((*j)->getRules()->getType()), this, PROGRESS_CONSTRUCTION));
1478 }
1479 }
1480 }
1481 // Handle science project
1482 std::vector<ResearchProject*> finished;
1483 for(std::vector<ResearchProject*>::const_iterator iter = (*i)->getResearch().begin (); iter != (*i)->getResearch().end (); ++iter)
1484 {
1485 if ((*iter)->step())
1486 {
1487 finished.push_back(*iter);
1488 }
1489 }
1490 for(std::vector<ResearchProject*>::const_iterator iter = finished.begin (); iter != finished.end (); ++iter)
1491 {
1492 (*i)->removeResearch(*iter);
1493 RuleResearch * bonus = 0;
1494 const RuleResearch * research = (*iter)->getRules ();
1495 // If "researched" the live alien, his body sent to the stores.
1496 if (Options::spendResearchedItems && research->needItem() && _game->getRuleset()->getUnit(research->getName()))
1497 {
1498 (*i)->getItems()->addItem(
1499 _game->getRuleset()->getArmor(
1500 _game->getRuleset()->getUnit(
1501 research->getName()
1502 )->getArmor()
1503 )->getCorpseGeoscape()
1504 ); // ;)
1505 }
1506 if ((*iter)->getRules()->getGetOneFree().size() != 0)
1507 {
1508 std::vector<std::string> possibilities;
1509 for(std::vector<std::string>::const_iterator f = (*iter)->getRules()->getGetOneFree().begin(); f != (*iter)->getRules()->getGetOneFree().end(); ++f)
1510 {
1511 bool newFound = true;
1512 for(std::vector<const RuleResearch*>::const_iterator discovered = _game->getSavedGame()->getDiscoveredResearch().begin(); discovered != _game->getSavedGame()->getDiscoveredResearch().end(); ++discovered)
1513 {
1514 if (*f == (*discovered)->getName())
1515 {
1516 newFound = false;
1517 }
1518 }
1519 if (newFound)
1520 {
1521 possibilities.push_back(*f);
1522 }

Callers

nothing calls this directly

Calls 15

generateFunction · 0.85
getBasesMethod · 0.80
getSavedGameMethod · 0.80
getFacilitiesMethod · 0.80
buildMethod · 0.80
getResearchMethod · 0.80
removeResearchMethod · 0.80
needItemMethod · 0.80
getCorpseGeoscapeMethod · 0.80
addFinishedResearchMethod · 0.80
getLookupMethod · 0.80

Tested by

no test coverage detected