CvUnitCycler::Cycle(CvUnit *, bool, bool, bool *)
- Defined in
- CvUnitCycler.cpp, line 147
- Class
- CvUnitCycler
- Hook name
CivHooks::CvUnitCycler_Cycle
Hooks
static bool BeforeCvUnitCycler_Cycle(CvUnitCycler* self, CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap, CvUnit *& result);static void AfterCvUnitCycler_Cycle(CvUnitCycler* self, CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap, CvUnit *& result);static CvUnit * ReplaceCvUnitCycler_Cycle(CvUnit * (*original)(CvUnitCycler*, CvUnit*, bool, bool, bool*), CvUnitCycler* self, CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap);CivRegisterBefore<CivHooks::CvUnitCycler_Cycle>(host, &BeforeCvUnitCycler_Cycle);CivRegisterAfter<CivHooks::CvUnitCycler_Cycle>(host, &AfterCvUnitCycler_Cycle);CivRegisterReplace<CivHooks::CvUnitCycler_Cycle>(host, &ReplaceCvUnitCycler_Cycle);
Code
146// Returns the next unit in the cycle...147CvUnit *CvUnitCycler::Cycle(CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap)148{149 const CLLNode<int>* pUnitNode;150 const CLLNode<int>* pFirstUnitNode;151 UnitHandle pLoopUnit;152153 if (pbWrap != NULL)154 {155 *pbWrap = false;156 }157158 pUnitNode = HeadNode();159160 if (pUnit != NULL)161 {162 while (pUnitNode != NULL)163 {164 if (m_pkPlayer->getUnit(pUnitNode->m_data) == pUnit)165 {166 if (bForward)167 {168 pUnitNode = NextNode(pUnitNode);169 }170 else171 {172 pUnitNode = PreviousNode(pUnitNode);173 }174 break;175 }176177 pUnitNode = NextNode(pUnitNode);178 }179 }180181 if (pUnitNode == NULL)182 {183 if (bForward)184 {185 pUnitNode = HeadNode();186 }187 else188 {189 pUnitNode = TailNode();190 }191192 if (pbWrap != NULL)193 {194 *pbWrap = true;195 }196 }197198 if (pUnitNode != NULL)199 {200 pFirstUnitNode = pUnitNode;201202 while (true)203 {204 pLoopUnit = m_pkPlayer->getUnit(pUnitNode->m_data);205 CvAssertMsg(pLoopUnit, "LoopUnit is not assigned a valid value");206207 if (pLoopUnit && pLoopUnit->ReadyToSelect())208 {209 if (!bWorkers || pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER || pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER_SEA)210 {211 if (pUnit && pLoopUnit== pUnit)212 {213 if (pbWrap != NULL)214 {215 *pbWrap = true;216 }217 }218219 return pLoopUnit.pointer();220 }221 }222223 if (bForward)224 {225 pUnitNode = NextNode(pUnitNode);226227 if (pUnitNode == NULL)228 {229 pUnitNode = HeadNode();230231 if (pbWrap != NULL)232 {233 *pbWrap = true;234 }235 }236 }237 else238 {239 pUnitNode = PreviousNode(pUnitNode);240241 if (pUnitNode == NULL)242 {243 pUnitNode = TailNode();244245 if (pbWrap != NULL)246 {247 *pbWrap = true;248 }249 }250 }251252 if (pUnitNode == pFirstUnitNode)253 {254 break;255 }256 }257 }258259 return NULL;260}
Calls
- CvPlayer::getUnit(int)
- CvUnit::AI_getUnitAIType() const
- CvUnit::ReadyToSelect() const
- CvUnitCycler::HeadNode()
- CvUnitCycler::NextNode(const CvUnitCycler::Node *) const
- CvUnitCycler::PreviousNode(const CvUnitCycler::Node *) const
- CvUnitCycler::TailNode() const
FObjectHandle::FObjectHandleFObjectHandle::operator boolFObjectHandle::operator->FObjectHandle::operator=FObjectHandle::operator==FObjectHandle::pointer