CvPlayer::initFreeUnits(CvGameInitialItemsOverrides &)
- Defined in
- CvPlayer.cpp, line 1555
- Class
- CvPlayer
- Hook name
CivHooks::CvPlayer_initFreeUnits
Hooks
static bool BeforeCvPlayer_initFreeUnits(CvPlayer* self, CvGameInitialItemsOverrides& arg0);static void AfterCvPlayer_initFreeUnits(CvPlayer* self, CvGameInitialItemsOverrides& arg0);static void ReplaceCvPlayer_initFreeUnits(void (*original)(CvPlayer*, CvGameInitialItemsOverrides&), CvPlayer* self, CvGameInitialItemsOverrides& arg0);CivRegisterBefore<CivHooks::CvPlayer_initFreeUnits>(host, &BeforeCvPlayer_initFreeUnits);CivRegisterAfter<CivHooks::CvPlayer_initFreeUnits>(host, &AfterCvPlayer_initFreeUnits);CivRegisterReplace<CivHooks::CvPlayer_initFreeUnits>(host, &ReplaceCvPlayer_initFreeUnits);
Code
1555void CvPlayer::initFreeUnits(CvGameInitialItemsOverrides& /*kOverrides*/)1556{1557 UnitTypes eLoopUnit;1558 int iFreeCount;1559 int iDefaultAI;1560 int iI, iJ;15611562 CvEraInfo& gameStartEra = GC.getGame().getStartEraInfo();1563 CvHandicapInfo& gameHandicap = GC.getGame().getHandicapInfo();1564 CvHandicapInfo& playerHandicap = getHandicapInfo();1565 CvCivilizationInfo& playerCivilization = getCivilizationInfo();15661567 for(iI = 0; iI < GC.getNumUnitClassInfos(); iI++)1568 {1569 const UnitClassTypes eUnitClass = static_cast<UnitClassTypes>(iI);1570 CvUnitClassInfo* pkUnitClassInfo = GC.getUnitClassInfo(eUnitClass);1571 if(pkUnitClassInfo)1572 {1573 eLoopUnit = (UnitTypes)playerCivilization.getCivilizationUnits(iI);15741575 if(eLoopUnit != NO_UNIT)1576 {1577 iFreeCount = playerCivilization.getCivilizationFreeUnitsClass(iI);1578 iDefaultAI = playerCivilization.getCivilizationFreeUnitsDefaultUnitAI(iI);15791580 iFreeCount *= (gameStartEra.getStartingUnitMultiplier() + ((!isHuman()) ? gameHandicap.getAIStartingUnitMultiplier() : 0));15811582 // City states only get 1 of something1583 if(isMinorCiv() && iFreeCount > 1)1584 iFreeCount = 1;15851586 for(iJ = 0; iJ < iFreeCount; iJ++)1587 {1588 addFreeUnit(eLoopUnit,(UnitAITypes)iDefaultAI);1589 }1590 }1591 }1592 }15931594 // Trait units1595 int iUnitClass = GetPlayerTraits()->GetFirstFreeUnit(NO_TECH);1596 while(iUnitClass != NO_UNITCLASS)1597 {1598 eLoopUnit = (UnitTypes)playerCivilization.getCivilizationUnits(iUnitClass);1599 iDefaultAI = GC.GetGameUnits()->GetEntry(eLoopUnit)->GetDefaultUnitAIType();1600 addFreeUnit(eLoopUnit,(UnitAITypes)iDefaultAI);16011602 // Another?1603 iUnitClass = GetPlayerTraits()->GetNextFreeUnit();1604 }16051606 // Defensive units1607 iFreeCount = gameStartEra.getStartingDefenseUnits();1608 iFreeCount += playerHandicap.getStartingDefenseUnits();16091610 if(!isHuman())1611 iFreeCount += gameHandicap.getAIStartingDefenseUnits();16121613 if(iFreeCount > 0 && !isMinorCiv())1614 addFreeUnitAI(UNITAI_DEFENSE, iFreeCount);16151616 // Worker units1617 iFreeCount = gameStartEra.getStartingWorkerUnits();1618 iFreeCount += playerHandicap.getStartingWorkerUnits();16191620 if(!isHuman())1621 iFreeCount += gameHandicap.getAIStartingWorkerUnits();16221623 if(iFreeCount > 0 && !isMinorCiv())1624 addFreeUnitAI(UNITAI_WORKER, iFreeCount);16251626 // Explore units1627 iFreeCount = gameStartEra.getStartingExploreUnits();1628 iFreeCount += playerHandicap.getStartingExploreUnits();16291630 if(!isHuman())1631 iFreeCount += gameHandicap.getAIStartingExploreUnits();16321633 if(iFreeCount > 0 && !isMinorCiv())1634 addFreeUnitAI(UNITAI_EXPLORE, iFreeCount);16351636 // If we only have one military unit and it's on defense then change its AI to explore1637 if(GetNumUnitsWithUnitAI(UNITAI_EXPLORE) == 0)1638 {1639 int iLoop;1640 CvUnit* pLoopUnit;1641 for(pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop))1642 {1643 if(pLoopUnit->AI_getUnitAIType() == UNITAI_DEFENSE)1644 {1645 pLoopUnit->AI_setUnitAIType(UNITAI_EXPLORE);1646 break;1647 }1648 }1649 }1650}
Calls
- CvCivilizationInfo::getCivilizationFreeUnitsClass(int) const
- CvCivilizationInfo::getCivilizationFreeUnitsDefaultUnitAI(int) const
- CvCivilizationInfo::getCivilizationUnits(int) const
- CvEraInfo::getStartingDefenseUnits() const
- CvEraInfo::getStartingExploreUnits() const
- CvEraInfo::getStartingUnitMultiplier() const
- CvEraInfo::getStartingWorkerUnits() const
- CvGame::getHandicapInfo() const
- CvGame::getStartEraInfo() const
- CvGlobals::getGame()
- CvGlobals::GetGameUnits() const
- CvGlobals::getNumUnitClassInfos()
- CvGlobals::getUnitClassInfo(UnitClassTypes)
- CvHandicapInfo::getAIStartingDefenseUnits() const
- CvHandicapInfo::getAIStartingExploreUnits() const
- CvHandicapInfo::getAIStartingUnitMultiplier() const
- CvHandicapInfo::getAIStartingWorkerUnits() const
- CvHandicapInfo::getStartingDefenseUnits() const
- CvHandicapInfo::getStartingExploreUnits() const
- CvHandicapInfo::getStartingWorkerUnits() const
- CvPlayer::addFreeUnit(UnitTypes, UnitAITypes)
- CvPlayer::addFreeUnitAI(UnitAITypes, int)
- CvPlayer::firstUnit(int *, bool)
- CvPlayer::getCivilizationInfo() const
- CvPlayer::getHandicapInfo() const
- CvPlayer::GetNumUnitsWithUnitAI(UnitAITypes, bool, bool)
- CvPlayer::GetPlayerTraits() const
- CvPlayer::isHuman() const
- CvPlayer::isMinorCiv() const
- CvPlayer::nextUnit(int *, bool)
- CvPlayerTraits::GetFirstFreeUnit(TechTypes)
- CvPlayerTraits::GetNextFreeUnit()
- CvUnit::AI_getUnitAIType() const
- CvUnit::AI_setUnitAIType(UnitAITypes)
- CvUnitEntry::GetDefaultUnitAIType() const
- CvUnitXMLEntries::GetEntry(int)