//=============================================================
//=============================================================
void CC3DCircleListLayer::initDataCircle(float fEllipseA,float fEllipseB,CCSize itemSize,CCArray* pArray,bool bFlipY)
{
    if(!pArray)
        return;
    m_itemSize = itemSize;
    m_fEllipseA = fEllipseA;
    m_fEllipseB = fEllipseB;
    
    int     nAllItemCount = pArray->count();
    float   fCircleStepDegree = (2*M_PI)/nAllItemCount;
    
    float fMoveX = getContentSize().width*0.5;
    float fMoveY = getContentSize().height*0.5;
    
    m_pButtonArray->removeAllObjects();
    for(int i=0;i<nAllItemCount;i++)
    {
        float fCurDegree = fCircleStepDegree * (i+1);
        float fCircleX = m_fEllipseA * cosf(fCurDegree);
        float fCircleY = m_fEllipseB * sinf(fCurDegree);
        
        fCircleX += fMoveX;
        fCircleY += fMoveY;
        
        CCSprite* pSprite = (CCSprite*)pArray->objectAtIndex(i);
        
        CCScale9Sprite* pScaleSprite = CCScale9Sprite::createWithSpriteFrame(pSprite->displayFrame());
        CCButton* pButton = CCButton::create( pScaleSprite);
        pButton->setTag(i);
        pButton->setZoomOnTouchDown(false);
        
        CCPoint point = ccp(fCircleX,fCircleY);
        pButton->setPosition(point);
        
        CCString* pString = new CCString();
        pString->initWithFormat("%f",fCurDegree);
        pButton->setUserData(pString);
        pButton->addTargetWithActionForControlEvents(this, cccontrol_selector(CC3DCircleListLayer::clickButton), CCControlEventTouchUpInside);
        addChild(pButton);
        m_pButtonArray->addObject(pButton);
        
        if(bFlipY)
        {
            CCSize buttonSize = pButton->getContentSize();
            CCSprite* pFlipYSprite = CCSprite::createWithTexture(pSprite->getTexture());
            CCRect oldRect = pSprite->getTextureRect();
            pFlipYSprite->setFlipY(true);
            pFlipYSprite->setOpacity(255*0.5);
            pFlipYSprite->setAnchorPoint(ccp(0.5,1));
            pFlipYSprite->setPosition(ccp(buttonSize.width*0.5,0));
            pButton->addChild(pFlipYSprite);
        }
        
//        CCSize buttonSize = pButton->getContentSize();
//        char testChr[32];
//        sprintf(testChr, "%d",i);
//        CCLabelTTF* pTestLabel = CCLabelTTF::create(testChr, "Arial", 52);
//        pTestLabel->setColor(ccRED);
//        pTestLabel->setPosition(ccp(buttonSize.width*0.5,buttonSize.height*0.5));
//        pButton->addChild(pTestLabel);
        
    }
    refreshItemWithMoveDegree(0);
}
//=============================================================
//=============================================================
void CC3DCircleListLayer::refreshItemWithMoveDegree(float fMoveDegree)
{
    float fMoveX = getContentSize().width*0.5;
    float fMoveY = getContentSize().height*0.5;
    
    float fScaleMax = 1;
    float fScaleMin = 0.5;
    
    int zOrderMax = 1000;
    
    //    float fCameraDegreeMax = 45;
    //    float fCameraDegreeMin = 0;
    
    for(int i=0;i<m_pButtonArray->count();i++)
    {
        CCButton* pButton = (CCButton*)m_pButtonArray->objectAtIndex(i);
        CCString* pFOldDegree = (CCString*)pButton->getUserData();
        float fOldDegree  = pFOldDegree->floatValue();
        
        fOldDegree = fabsf(fOldDegree);
        float fCurDegree = fOldDegree + fMoveDegree;
        if(fCurDegree < 0)
        {
            fCurDegree = 2*M_PI - fabsf(fCurDegree);
        }
        int nCircleCount = (int)fCurDegree/(2*M_PI);
        fCurDegree = fCurDegree - nCircleCount*(2*M_PI);
        //=============================================================
        //=============================================================
        delete pFOldDegree;
        CCString* pString = new CCString();
        pString->initWithFormat("%f",fabs(fCurDegree));
        pButton->setUserData(pString);
        //=============================================================
        //=============================================================
        //
        //
        //
        //=============================================================
        //=============================================================
        float fCircleX = m_fEllipseA * cosf(fCurDegree);
        float fCircleY = m_fEllipseB * sinf(fCurDegree);
        fCircleX += fMoveX;
        fCircleY += fMoveY;
        CCPoint buttonPos = ccp(fCircleX,fCircleY);
        pButton->setPosition(buttonPos);
        //=============================================================
        //=============================================================
        //
        //
        //
        //=============================================================
        //=============================================================
        float fScaleDegree = fCurDegree - M_PI_2;
        float fScalePercent = (1-cosf(fScaleDegree))/2.0;
        float fScale = fScaleMin + (fScaleMax - fScaleMin)*fScalePercent;
        pButton->setScale(fScale);
        int nOrder = zOrderMax * fScalePercent + 1;
        pButton->setZOrder(nOrder);
        //=============================================================
        //=============================================================
        
        m_pSelectedButton =  getSelectedButton();
        if(m_pSelectedButton)
        {
            if(m_pDelegate)
            {
                int nIndex = m_pSelectedButton->getTag();
                m_pDelegate->onCC3DCircleListLayerSelectIndex(nIndex);
            }
        }
        
        //        //=============================================================
        //        //camera
        //        //=============================================================
        //        int flagMove = 1;
        //        if(buttonPos.x > getContentSize().width*0.5)
        //        {
        //            flagMove = 1;
        //        }
        //        else
        //        {
        //            flagMove = -1;
        //        }
        //        float fCameraDegree = fCameraDegreeMin + (fCameraDegreeMax - fCameraDegreeMin)*(1-fScalePercent);
        //        fCameraDegree *= -flagMove;
        //        float radians = (float)CC_DEGREES_TO_RADIANS(fCameraDegree);
        //        float fSin = sinf(radians) * CCCamera::getZEye();
        //        CCCamera* pCamera = pButton->getCamera();
        //        pCamera->setCenterXYZ(fSin, 0, 0);
        //        //=============================================================
        //        //=============================================================
    }
}