void CCSpriteBatchNode::insertChild(CCSprite *pobSprite, unsigned int uIndex) { pobSprite->useBatchNode(this); pobSprite->setAtlasIndex(uIndex); pobSprite->setDirty(true); if (m_pobTextureAtlas->getTotalQuads() == m_pobTextureAtlas->getCapacity()) { increaseAtlasCapacity(); } ccV3F_C4B_T2F_Quad quad = pobSprite->getQuad(); m_pobTextureAtlas->insertQuad(&quad, uIndex); m_pobDescendants->insertObjectAtIndex(pobSprite, uIndex); // update indices unsigned int i = 0; if (m_pobDescendants && m_pobDescendants->count() > 0) { NSMutableArray<CCSprite*>::NSMutableArrayIterator iter; for (iter = m_pobDescendants->begin(); iter != m_pobDescendants->end(); ++iter) { if (! *iter) { break; } if (i > uIndex) { (*iter)->setAtlasIndex((*iter)->getAtlasIndex() + 1); } ++i; } } // add children recursively NSMutableArray<CCNode*> *pChildren = pobSprite->getChildren(); if (pChildren && pChildren->count() > 0) { NSMutableArray<CCNode*>::NSMutableArrayIterator iterNode; CCSprite *pSprite; for (iterNode = pChildren->begin(); iterNode != pChildren->end(); ++iterNode) { pSprite = (CCSprite*)(*iterNode); if (! pSprite) { break; } unsigned int uIndex = atlasIndexForChild(pSprite, pSprite->getZOrder()); insertChild(pSprite, uIndex); } } }
void CCSpriteBatchNode::addChild(CCNode *child, int zOrder, int tag) { assert(child != NULL); CCSprite *pSprite = (CCSprite*)(child); // check CCSprite is using the same texture id assert(pSprite->getTexture()->getName() == m_pobTextureAtlas->getTexture()->getName()); CCNode::addChild(child, zOrder, tag); unsigned int uIndex = atlasIndexForChild(pSprite, zOrder); insertChild(pSprite, uIndex); }