Hooks
static bool BeforeCvPlot_changeInvisibleVisibilityCount(CvPlot* self, TeamTypes eTeam, InvisibleTypes eInvisible, int iChange);static void AfterCvPlot_changeInvisibleVisibilityCount(CvPlot* self, TeamTypes eTeam, InvisibleTypes eInvisible, int iChange);static void ReplaceCvPlot_changeInvisibleVisibilityCount(void (*original)(CvPlot*, TeamTypes, InvisibleTypes, int), CvPlot* self, TeamTypes eTeam, InvisibleTypes eInvisible, int iChange);CivRegisterBefore<CivHooks::CvPlot_changeInvisibleVisibilityCount>(host, &BeforeCvPlot_changeInvisibleVisibilityCount);CivRegisterAfter<CivHooks::CvPlot_changeInvisibleVisibilityCount>(host, &AfterCvPlot_changeInvisibleVisibilityCount);CivRegisterReplace<CivHooks::CvPlot_changeInvisibleVisibilityCount>(host, &ReplaceCvPlot_changeInvisibleVisibilityCount);
Code
10094void CvPlot::changeInvisibleVisibilityCount(TeamTypes eTeam, InvisibleTypes eInvisible, int iChange)10095{10096 bool bOldInvisibleVisible;10097 bool bNewInvisibleVisible;10098 const int iNumInvisibleInfos = NUM_INVISIBLE_TYPES;10099 DEBUG_VARIABLE(iNumInvisibleInfos);1010010101 CvAssertMsg(eTeam >= 0, "eTeam is expected to be non-negative (invalid Index)");10102 CvAssertMsg(eTeam < MAX_TEAMS, "eTeam is expected to be within maximum bounds (invalid Index)");10103 CvAssertMsg(eInvisible >= 0, "eInvisible is expected to be non-negative (invalid Index)");10104 CvAssertMsg(eInvisible < iNumInvisibleInfos, "eInvisible is expected to be within maximum bounds (invalid Index)");10105 if(eTeam < 0 || eTeam >= MAX_TEAMS) return;10106 if(eInvisible < 0 || eInvisible >= NUM_INVISIBLE_TYPES) return;1010710108 if(iChange != 0)10109 {10110 bOldInvisibleVisible = isInvisibleVisible(eTeam, eInvisible);1011110112 m_apaiInvisibleVisibilityCount[eTeam][eInvisible] = (m_apaiInvisibleVisibilityCount[eTeam][eInvisible] + iChange);1011310114 CvAssertFmt(m_apaiInvisibleVisibilityCount[eTeam][eInvisible] >= 0, "Invisible Visibility going negative for %d, %d", m_iX, m_iY);1011510116 bNewInvisibleVisible = isInvisibleVisible(eTeam, eInvisible);1011710118 if(bOldInvisibleVisible != bNewInvisibleVisible)10119 {10120 TeamTypes activeTeam = GC.getGame().getActiveTeam();10121 if(eTeam == activeTeam)10122 {10123 // for all (nominally invisible) units in this plot10124 // tell the engine to flip whether they are being drawn or not10125 IDInfo* pUnitNode;10126 CvUnit* pLoopUnit = NULL;10127 pUnitNode = headUnitNode();10128 while(pUnitNode != NULL)10129 {10130 pLoopUnit = GetPlayerUnit(*pUnitNode);10131 pUnitNode = nextUnitNode(pUnitNode);1013210133 if(NULL != pLoopUnit && pLoopUnit->getTeam() != activeTeam && pLoopUnit->getInvisibleType() == eInvisible)10134 {10135 auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(pLoopUnit));10136 gDLL->GameplayUnitVisibility(pDllUnit.get(), bNewInvisibleVisible, true);10137 }10138 }1013910140 updateCenterUnit();1014110142 }10143 }10144 }10145}