CvPlot::updateCenterUnit()
- Defined in
- CvPlot.cpp, line 663
- Class
- CvPlot
- Hook name
CivHooks::CvPlot_updateCenterUnit
Hooks
static bool BeforeCvPlot_updateCenterUnit(CvPlot* self);static void AfterCvPlot_updateCenterUnit(CvPlot* self);static void ReplaceCvPlot_updateCenterUnit(void (*original)(CvPlot*), CvPlot* self);CivRegisterBefore<CivHooks::CvPlot_updateCenterUnit>(host, &BeforeCvPlot_updateCenterUnit);CivRegisterAfter<CivHooks::CvPlot_updateCenterUnit>(host, &AfterCvPlot_updateCenterUnit);CivRegisterReplace<CivHooks::CvPlot_updateCenterUnit>(host, &ReplaceCvPlot_updateCenterUnit);
Code
663void CvPlot::updateCenterUnit()664{665 if(!GC.IsGraphicsInitialized())666 {667 return;668 }669670 if(!isActiveVisible(true))671 {672 setCenterUnit(NULL);673 return;674 }675676 setCenterUnit(getSelectedUnit());677678 TeamTypes eActiveTeam = GC.getGame().getActiveTeam();679680 if(!getCenterUnit())681 {682 UnitHandle hBestDefender = getBestDefender(NO_PLAYER, GC.getGame().getActivePlayer());683 if(hBestDefender && hBestDefender->getDomainType() != DOMAIN_AIR && !hBestDefender->isInvisible(eActiveTeam,false))684 setCenterUnit(hBestDefender);685 }686687 // okay, all of the other checks failed - if there is any unit here, make it the center unit688 if(!getCenterUnit())689 {690 IDInfo* pUnitNode;691 CvUnit* pLoopUnit;692693 pUnitNode = headUnitNode();694695 if(pUnitNode != NULL)696 {697 pLoopUnit = GetPlayerUnit(*pUnitNode);698 if(pLoopUnit && !pLoopUnit->IsGarrisoned() && pLoopUnit->getDomainType() != DOMAIN_AIR && !pLoopUnit->isInvisible(eActiveTeam,false))699 {700 setCenterUnit(pLoopUnit);701 }702 }703 }704705 IDInfo* pUnitNode;706 CvUnit* pLoopUnit;707 CvUnit* pCenterUnit = getCenterUnit().pointer();708 pUnitNode = headUnitNode();709 while(pUnitNode != NULL)710 {711 pLoopUnit = GetPlayerUnit(*pUnitNode);712 pUnitNode = nextUnitNode(pUnitNode);713714 if(pLoopUnit)715 {716 auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(pLoopUnit));717718 if(pCenterUnit == pLoopUnit)719 {720 gDLL->GameplayUnitVisibility(pDllUnit.get(), true, false, 0.01f);721 }722 else723 {724 gDLL->GameplayUnitVisibility(pDllUnit.get(), false, false, 0.01f);725 }726 }727 }728}
Calls
- CvDllUnit::CvDllUnit(CvUnit *)
- CvGame::getActivePlayer() const
- CvGame::getActiveTeam()
- CvGlobals::getDLLIFace()
- CvGlobals::getGame()
- CvGlobals::IsGraphicsInitialized() const
- CvPlot::getBestDefender(PlayerTypes, PlayerTypes, const CvUnit *, bool, bool, bool, bool)
- CvPlot::getCenterUnit()
- CvPlot::getSelectedUnit()
- CvPlot::headUnitNode()
- CvPlot::isActiveVisible(bool) const
- CvPlot::nextUnitNode(IDInfo *)
- CvPlot::setCenterUnit(UnitHandle)
- CvUnit::getDomainType() const
- CvUnit::IsGarrisoned() const
- CvUnit::isInvisible(TeamTypes, bool, bool) const
FObjectHandle::FObjectHandleFObjectHandle::FObjectHandleFObjectHandle::operator boolFObjectHandle::operator!FObjectHandle::operator->FObjectHandle::pointer- GetPlayerUnit(IDInfo &)
ICvEngineUtility1::GameplayUnitVisibilitystd::auto_ptr::auto_ptrstd::auto_ptr::get
Called by
- CvDllPlot::UpdateCenterUnit()
- CvGame::cycleUnits(bool, bool, bool)
- CvGame::selectUnit(CvUnit *, bool, bool, bool)
- CvMap::updateCenterUnit()
- CvPlot::addUnit(CvUnit *, bool)
- CvPlot::changeInvisibleVisibilityCount(TeamTypes, InvisibleTypes, int)
- CvPlot::changeVisibilityCount(TeamTypes, int, InvisibleTypes, bool, bool, CvUnit *)
- CvPlot::removeUnit(CvUnit *, bool)
- CvUnit::initWithNameOffset(int, UnitTypes, int, UnitAITypes, PlayerTypes, int, int, DirectionTypes, bool, bool, int, int)