CvCity::CanPlaceUnitHere(UnitTypes)
- Defined in
- CvCity.cpp, line 13789
- Class
- CvCity
- Hook name
CivHooks::CvCity_CanPlaceUnitHere
Hooks
static bool BeforeCvCity_CanPlaceUnitHere(CvCity* self, UnitTypes eUnitType, bool& result);static void AfterCvCity_CanPlaceUnitHere(CvCity* self, UnitTypes eUnitType, bool& result);static bool ReplaceCvCity_CanPlaceUnitHere(bool (*original)(CvCity*, UnitTypes), CvCity* self, UnitTypes eUnitType);CivRegisterBefore<CivHooks::CvCity_CanPlaceUnitHere>(host, &BeforeCvCity_CanPlaceUnitHere);CivRegisterAfter<CivHooks::CvCity_CanPlaceUnitHere>(host, &AfterCvCity_CanPlaceUnitHere);CivRegisterReplace<CivHooks::CvCity_CanPlaceUnitHere>(host, &ReplaceCvCity_CanPlaceUnitHere);
Code
13789bool CvCity::CanPlaceUnitHere(UnitTypes eUnitType)13790{13791 VALIDATE_OBJECT13792 bool bCombat = false;1379313794 CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnitType);13795 if(pkUnitInfo == NULL)13796 return false;1379713798 // slewis - modifying 1upt13799 if (pkUnitInfo->IsTrade())13800 {13801 return true;13802 }1380313804 if(pkUnitInfo->GetCombat() > 0 || pkUnitInfo->GetRange() > 0)13805 {13806 bCombat = true;13807 }1380813809#if defined(MOD_GLOBAL_STACKING_RULES)13810 int iSameTypeUnits = 0;13811#endif1381213813 CvPlot* pPlot = plot();1381413815 const IDInfo* pUnitNode;13816 const CvUnit* pLoopUnit;1381713818 pUnitNode = pPlot->headUnitNode();1381913820 while(pUnitNode != NULL)13821 {13822 pLoopUnit = ::getUnit(*pUnitNode);13823 pUnitNode = pPlot->nextUnitNode(pUnitNode);1382413825 if(pLoopUnit != NULL)13826 {13827 // if a trade unit is here, ignore13828 if (pLoopUnit->isTrade())13829 {13830 continue;13831 }1383213833 // Units of the same type OR Units belonging to different civs13834 if(CvGameQueries::AreUnitsSameType(eUnitType, pLoopUnit->getUnitType()))13835 {13836#if defined(MOD_GLOBAL_STACKING_RULES)13837 if (++iSameTypeUnits >= GC.getCITY_UNIT_LIMIT())13838#endif13839 return false;13840 }13841 }13842 }1384313844 return true;13845}
Calls
- CvCity::plot() const
- CvGameQueries::AreUnitsSameType(UnitTypes, UnitTypes)
- CvGlobals::getCITY_UNIT_LIMIT()
- CvGlobals::getUnitInfo(UnitTypes)
- CvPlot::headUnitNode()
- CvPlot::nextUnitNode(const IDInfo *) const
- CvUnit::getUnitType() const
- CvUnit::isTrade() const
- CvUnitEntry::GetCombat() const
- CvUnitEntry::GetRange() const
- CvUnitEntry::IsTrade() const
- getUnit(const IDInfo &)
Called by
- CvCity::IsCanPurchase(bool, bool, UnitTypes, BuildingTypes, ProjectTypes, YieldTypes)
- CvGame::CityPurchase(CvCity *, UnitTypes, BuildingTypes, ProjectTypes, YieldTypes)
- CvLuaCity::lCanPlaceUnitHere(lua_State *)
- CvLuaCity::lGetFaithPurchaseUnitTooltip(lua_State *)
- CvLuaCity::lGetPurchaseUnitTooltip(lua_State *)