bool CCPanGestureRecognizer::ccTouchBegan(CCTouch * pTouch, CCEvent * pEvent)
{
    if (isRecognizing) {
        isRecognizing = false;
        return false;
    }
    
    CCPoint loc = pTouch->getLocation();
    if (!isPositionBetweenBounds(loc)) return false;
    
    isRecognizing = true;
    return true;
}
bool CCSwipeGestureRecognizer::ccTouchBegan(CCTouch * pTouch, CCEvent * pEvent)
{
    if (isRecognizing) {
        isRecognizing = false;
        return false;
    }
    
    initialPosition = pTouch->getLocation();
    if (!isPositionBetweenBounds(initialPosition)) return false;
    
    CCTime::gettimeofdayCocos2d(&startTime, NULL);
    
    isRecognizing = true;
    return true;
}
bool CCPinchGestureRecognizer::onTouchBegan(Touch * pTouch, Event * pEvent)
{
    if (isRecognizing || !isPositionBetweenBounds(pTouch->getLocation())) {
        return false;
    }
    
    touchNumber++;
    touches->push_back(pTouch);
    
    //start recognizing after that 2 fingers are touching
    if (touchNumber==2) {
        isRecognizing = true;
    }
    
    return true;
}
bool CCLongPressGestureRecognizer::ccTouchBegan(CCTouch * pTouch, CCEvent * pEvent)
{
    if (isRecognizing) {
        stopGestureRecognition();
        return false;
    }

    isMoving = false;

    currLocation = pTouch->getLocation();
    if (!isPositionBetweenBounds(currLocation)) return false;

    currEvent = pEvent;
    currTouch = pTouch;

    schedule(schedule_selector(CCLongPressGestureRecognizer::timerDidEnd), minimumPressDuration);

    isRecognizing = true;
    return true;
}
bool CCTapGestureRecognizer::ccTouchBegan(CCTouch * pTouch, CCEvent * pEvent)
{
    if (isRecognizing && taps==0) {
        stopGestureRecognition();
        return false;
    }
    
    initialPosition = pTouch->getLocation();
    
    if (!isPositionBetweenBounds(initialPosition)) return false;
    
    CCTime::gettimeofdayCocos2d(&startTime, NULL);
    
    if (taps>0 && taps<(int)numberOfTapsRequired) {
        float distance = distanceBetweenPoints(finalPosition, initialPosition); //distance between taps
        double duration = CCTime::timersubCocos2d(&endTime, &startTime); //duration between taps
        if (duration>kTapMaxDurationBetweenTaps || distance>kTapMaxDistanceBetweenTaps) {
            stopGestureRecognition();
        }
    }
    
    isRecognizing = true;
    return true;
}