bool CvSelectionGroupAI::AI_isFull() { CLLNode<IDInfo>* pUnitNode; CvUnit* pLoopUnit; if (getNumUnits() > 0) { UnitAITypes eUnitAI = getHeadUnitAI(); // do two passes, the first pass, we ignore units with speical cargo int iSpecialCargoCount = 0; int iCargoCount = 0; // first pass, count but ignore special cargo units pUnitNode = headUnitNode(); while (pUnitNode != NULL) { pLoopUnit = ::getUnit(pUnitNode->m_data); pUnitNode = nextUnitNode(pUnitNode); if (pLoopUnit->AI_getUnitAIType() == eUnitAI) { if (pLoopUnit->cargoSpace() > 0) { iCargoCount++; } if (pLoopUnit->specialCargo() != NO_SPECIALUNIT) { iSpecialCargoCount++; } else if (!(pLoopUnit->isFull())) { return false; } } } // if every unit in the group has special cargo, then check those, otherwise, consider ourselves full if (iSpecialCargoCount >= iCargoCount) { pUnitNode = headUnitNode(); while (pUnitNode != NULL) { pLoopUnit = ::getUnit(pUnitNode->m_data); pUnitNode = nextUnitNode(pUnitNode); if (pLoopUnit->AI_getUnitAIType() == eUnitAI) { if (!(pLoopUnit->isFull())) { return false; } } } } return true; } return false; }