private void UpdatePointReached()
    {
        int currentPointNumber = bezier.GetPointNumber(usePercentage);

        if (currentPointNumber != atPointNumber)
        {
            //we've hit a point
            CameraPathBezierControlPoint atPoint;
            if (!isReversed)
            {
                atPoint = bezier.controlPoints[currentPointNumber];
            }
            else
            {
                atPoint = bezier.controlPoints[atPointNumber];
            }

            if (AnimationPointReached != null)
            {
                AnimationPointReached();
            }
            if (!isReversed)
            {
                if (AnimationPointReachedWithNumber != null)
                {
                    AnimationPointReachedWithNumber(currentPointNumber);
                }
                else
                if (AnimationPointReachedWithNumber != null)
                {
                    AnimationPointReachedWithNumber(atPointNumber);
                }
            }

            switch (atPoint.delayMode)
            {
            case CameraPathBezierControlPoint.DELAY_MODES.none:
                //do nothing extra
                break;

            case CameraPathBezierControlPoint.DELAY_MODES.indefinite:
                Pause();
                break;

            case CameraPathBezierControlPoint.DELAY_MODES.timed:
                Pause();
                Invoke("Play", atPoint.delayTime);
                break;
            }
        }

        atPointNumber = currentPointNumber;
    }