Example #1
0
float LotteryRotateView::getAngleByTouchPoint(CCPoint touchPoint){
    CCPoint zeroPoint = ccp(0,0);
    float angleA = touchPoint.getAngle(zeroPoint);
    angleA = (angleA/M_PI) * 180;
    
    return angleA;
}
Example #2
0
void CCCurl::startWithTarget(CCNode* pTarget) {
    CCActionInterval::startWithTarget(pTarget);
    
    // get start radius
    CCPoint v = ccpSub(pTarget->getPosition(), m_center);
    m_fromRadius = ccpLength(v);
    m_initAngle = v.getAngle();
}
//--------------------------------------------------------------------
void FKCW_Action_Curl::startWithTarget(CCNode* pTarget) 
{
	CCActionInterval::startWithTarget(pTarget);

	// 获取起始半径和角度
	CCPoint v = ccpSub(pTarget->getPosition(), m_center);
	m_fromRadius = ccpLength(v);
	m_initAngle = v.getAngle();
}
Example #4
0
void Arrow::construct(IArrowEventListener *pListener, const CCPoint &startPos, const CCPoint &endPos)
{
    // Sets listener
    m_pListener = (pListener ? pListener : &theNullArrowEventListener);
    
    // Sets position
    setPosition(startPos);
    
    // Sets end position
    m_endPos = endPos;
    
    // Gets delta position
    CCPoint deltaPos = endPos - startPos;
    
    // Gets angle
    float fAngle = deltaPos.getAngle();
    
    // Sets rotation
    setRotation(gdGetRotation(fAngle));
    
    // Sets opacity
    setOpacity(255);
    
    // Sets direction
    m_dir = ccp(cosf(fAngle), sinf(fAngle));
    
    // Sets speed
    m_fSpeed = SPEED;
    
    // Sets acceleration
    m_fAcceleration = ACCELERATION;
    
    // Sets remaining length
    m_fRemainLength = deltaPos.getLength();
    
    //
    m_bActive = false;
    
    // Updates for enter
    setCurrentState(Enter);
}
float
ccpToAngle(const CCPoint& v)
{
    return v.getAngle();
}
float ccpAngleSigned(const CCPoint& a, const CCPoint& b)
{
	return a.getAngle(b);
}
Example #7
0
void LotteryRotateView::onTouchEnded(CCTouch* touch, CCEvent* event)
{
    if (!this->isVisible())
    {
        return;
    }

    if (!m_enabled) {
        return;
    }
    
    long endTouchTime = clock() / 1000;
    
    if (m_pTouches->containsObject(touch))
    {
        if (m_pTouches->count() == 1 && m_bTouchMoved)
        {
        }
        m_pTouches->removeObject(touch);
    }

    if (m_pTouches->count() == 0)
    {
        m_bDragging = false;
        m_bTouchMoved = false;
    }

    CCPoint startPoint = m_pContainer->convertToNodeSpace(touch->getStartLocation());
//    CCPoint lastPoint = m_pContainer->convertToNodeSpace(touch->getPreviousLocation());
    CCPoint nowPoint = m_pContainer->convertToNodeSpace(touch->getLocation());
    CCPoint startLine = ccpSub(startPoint, ccp(0, 0));
    CCPoint nowLine = ccpSub(nowPoint, ccp(0, 0));
    
    float angle = CC_RADIANS_TO_DEGREES(ccpSub(nowLine, startPoint).getAngle());
    if (abs(angle) >= 60 && abs(angle) <= 120)
    {
        return;
    }
    
    float degreeGap = CC_RADIANS_TO_DEGREES(nowLine.getAngle(startLine));
    CCLOG("%f:", degreeGap);
    if (fabs(degreeGap) < 15)
    {
        m_rewardsContainer->removeAllChildren();
        return;
    }

    int spendTime = (int)(endTouchTime - m_lastTouchMoveTime) + 1;
    float speed = 100*fabs(m_tScrollAngel)/spendTime;
    m_speed3 = (fabs(degreeGap)) / ((endTouchTime - m_startTouchTime) / 1000.0f);

    CCLOG("speed:%f,speed3:%f",speed, m_speed3);
    if (speed < 6 || m_speed3 < 60.0f) {
        return;
    }
//    m_speed3 = m_speed3 * 2.0f;
    
    bool guide = CCUserDefault::sharedUserDefault()->getBoolForKey("LOTTERYGUIDE");
    if (!guide)
    {
        CCUserDefault::sharedUserDefault()->setBoolForKey("LOTTERYGUIDE", true);
        CCUserDefault::sharedUserDefault()->flush();
        CCDictionary* dict = CCDictionary::create();
        dict->setObject(ccs("HIDEGUIDENODE"), "key");
        CCSafeNotificationCenter::sharedNotificationCenter()->postNotification(LOTTERYROTATEVIEW, dict);
    }
    
//    if (!isChipEnough())
//    {
//        return;
//    }
    SoundController::sharedSound()->playEffects(Music_Sfx_UI_roulette);
    playAnimation(0);
}
Example #8
0
void LotteryRotateView::onTouchMoved(CCTouch* touch, CCEvent* event)
{
    if (!this->isVisible())
    {
        return;
    }
    if (m_rotating)
    {
        return;
    }
    if (!m_enabled) {
        return;
    }
    
    if (m_pTouches->containsObject(touch))
    {
        if (m_pTouches->count() == 1 && m_bDragging)
        {
            // scrolling
            CCPoint moveDistance;
            CCPoint lastPoint = touch->getPreviousLocation();
            CCPoint nowPoint = touch->getLocation();
            lastPoint = m_pContainer->convertToNodeSpace(lastPoint);
            nowPoint = m_pContainer->convertToNodeSpace(nowPoint);
            CCPoint lastLine = ccpSub(lastPoint, ccp(0, 0));
            CCPoint nowLine = ccpSub(nowPoint, ccp(0, 0));
            
            CCPoint startPoint = m_pContainer->convertToNodeSpace(touch->getStartLocation());
            float angle = CC_RADIANS_TO_DEGREES(ccpSub(nowPoint, startPoint).getAngle());
            CCLOG("angle:%f", angle);
            if (abs(angle) >= 60 && abs(angle) <= 120)
            {
                return;
            }
            
            moveDistance = ccpSub(nowPoint, m_tTouchPoint);
            if (!m_bTouchMoved)
            {
                moveDistance = CCPointZero;
            }
            
            m_tTouchPoint = nowPoint;
            m_bTouchMoved = true;
            float dis = 0.0f;
            dis = sqrtf(moveDistance.x*moveDistance.x + moveDistance.y*moveDistance.y);

            float inch = convertDistanceFromPointToInch(dis);
            if (!m_bTouchMoved && fabs(inch) < MOVE_INCH )
            {
                CCLOG("Invalid movement, distance = [%f, %f], disInch = %f", moveDistance.x, moveDistance.y, inch);
                m_pTouches->removeObject(touch);
                return;
            }
            m_lastTouchMoveTime = clock() / 1000;
            
            float angleGap = nowLine.getAngle(lastLine);
//            CCLOG("angleGap:%f", angleGap);
            setRotationAngle(-angleGap);
            
            m_tScrollAngel = CC_RADIANS_TO_DEGREES(-angleGap);
            
            if (m_tScrollAngel>=-360 && m_tScrollAngel<=-180) {
                m_tScrollAngel = m_tScrollAngel + 360;
            }
            else if (m_tScrollAngel<=360 && m_tScrollAngel>=180) {
                m_tScrollAngel = 360 - m_tScrollAngel;
            }
            
            this->setContentOffsetForMove();
        }
    }
}
Example #9
0
bool    MyBulletInterface::attackRot(
                                     const cocos2d::CCPoint& in_rInputPosStart,
                                     const cocos2d::CCPoint& in_rInputPosEnd )
{
    MyBulletObj*    pObj    = (MyBulletObj*)getChildByTag( eTAG_CHILD_NODE_OBJ );
    CCAssert( pObj, "Not BulletObj\n" );
    CCAssert( pAttachChainNode_, "Not Bullet Attach Node\n" );
    
    CCPoint     lineVec = in_rInputPosEnd - in_rInputPosStart;
    CCPoint     chainPos  = pAttachChainNode_->getPosition();
    CCPoint     chainToBulletPosVec = pObj->getPosition() - chainPos;
    {
        //  入力ラインが鎖と弾丸とのラインと交差しているか
        CrollCollision2DLine::SEGMENT   seg1, seg2;
        //  弾丸と鎖との位置と方向設定
        {
            seg1.x  = chainPos.x;
            seg1.y  = chainPos.y;
            seg1.vecX   = chainToBulletPosVec.x;
            seg1.vecY   = chainToBulletPosVec.y;
        }
        
        //  タッチラインの位置と方向設定
        {
            seg2.x  = in_rInputPosStart.x;
            seg2.y  = in_rInputPosStart.y;
            seg2.vecX   = lineVec.x;
            seg2.vecY   = lineVec.y;
        }
        
        CCPoint crossPos    = CCPointZero;
        if( CrollCollision2DLine::Check( seg1, seg2, &crossPos.x, &crossPos.y ) ) {
            //  回転攻撃開始!
            //  鎖と弾丸との角度取得
            atkRotAngle_    = chainToBulletPosVec.getAngle();
            
            //  鎖と弾丸とのベクトルを軸にタッチ方向が左右どちらかを外積で取得
            {
                //  入力ラインの長さで回転速度を変更(値は補正している)
                atkRotSpeed_    = lineVec.getLengthSq() * 0.01f;

                //  ライン右
                if( 0 <= ( in_rInputPosEnd - chainPos ).cross( chainToBulletPosVec ) ) {
                    atkRotSpeed_    = -atkRotSpeed_;
                }
                //  ライン左
                else {
                }
            }
            
            atkRotRadius_   = chainToBulletPosVec.getLength();
            //  半径速度値
            atkRotAddRadius_    = 1;

            stateMachine_.setState( eSTATE_ATK_ROT );
            
            //  弾と中心位置との長さで半径計算を変える
            if ( chainLength_ <= atkRotRadius_ ) {
                //  回転しながら中心位置に移動
                stateMachine_.setChildState( 0 , 1 );
            }
            else {
                //  回転しながら限界の長さまで半径移動して中心位置に移動する。
                stateMachine_.setChildState( 0 , 0 );
            }
        }
    }
    
    return false;
}