Example #1
0
uint32_t Config::startFrame()
{
    // update head position
    if( _tracker.isRunning( ))
    {
        _tracker.update();
        const eq::Matrix4f& headMatrix = _tracker.getMatrix();
        _setHeadMatrix( headMatrix );
    }

    float elapsed = _clock.getTimef();
    _clock.reset();
    updateFrameData( elapsed );

    const eq::uint128_t version = _frameData.commit();
    return eq::Config::startFrame( version );
}
Example #2
0
void CCTween::play(CCMovementBoneData *movementBoneData, int durationTo, int durationTween,  int loop, int tweenEasing)
{
    CCProcessBase::play(durationTo, durationTween, loop, tweenEasing);

    if (loop)
    {
        m_eLoopType = ANIMATION_TO_LOOP_FRONT;
    }
    else
    {
        m_eLoopType = ANIMATION_NO_LOOP;
    }

    m_iTotalDuration = 0;
    m_iBetweenDuration = 0;
    m_iFromIndex = m_iToIndex = 0;

    bool difMovement = movementBoneData != m_pMovementBoneData;

    setMovementBoneData(movementBoneData);
    m_iRawDuration = m_pMovementBoneData->duration;

    CCFrameData *nextKeyFrame = m_pMovementBoneData->getFrameData(0);
    m_pTweenData->displayIndex = nextKeyFrame->displayIndex;

    if (m_pBone->getArmature()->getArmatureData()->dataVersion >= VERSION_COMBINED)
    {
        CCTransformHelp::nodeSub(*m_pTweenData, *m_pBone->getBoneData());
        m_pTweenData->scaleX += 1;
        m_pTweenData->scaleY += 1;
    }

    if (m_iRawDuration == 0 || m_pMovementBoneData->frameList.count() == 1)
    {
        m_eLoopType = SINGLE_FRAME;
        if(durationTo == 0)
        {
            setBetween(nextKeyFrame, nextKeyFrame);
        }
        else
        {
            setBetween(m_pTweenData, nextKeyFrame);
        }
        m_eFrameTweenEasing = Linear;
    }
    else if (m_pMovementBoneData->frameList.count() > 1)
    {
        m_iDurationTween = durationTween * m_pMovementBoneData->scale;

        if (loop && m_pMovementBoneData->delay != 0)
        {
            setBetween(m_pTweenData, tweenNodeTo(updateFrameData(1 - m_pMovementBoneData->delay), m_pBetween));
        }
        else
        {
            if (!difMovement || durationTo == 0)
            {
                setBetween(nextKeyFrame, nextKeyFrame);
            }
            else
            {
                setBetween(m_pTweenData, nextKeyFrame);
            }
        }
    }

    tweenNodeTo(0);
}
Example #3
0
void CCTween::updateHandler()
{
    if (m_fCurrentPercent >= 1)
    {
        switch(m_eLoopType)
        {
        case SINGLE_FRAME:
        {
            m_fCurrentPercent = 1;
            m_bIsComplete = true;
            m_bIsPlaying = false;
        }
        break;
        case ANIMATION_NO_LOOP:
        {
            m_eLoopType = ANIMATION_MAX;


            if (m_iDurationTween <= 0)
            {
                m_fCurrentPercent = 1;
            }
            else
            {
                m_fCurrentPercent = (m_fCurrentPercent - 1) * m_iNextFrameIndex / m_iDurationTween;
            }

            if (m_fCurrentPercent >= 1)
            {
                m_fCurrentPercent = 1;
                m_bIsComplete = true;
                m_bIsPlaying = false;
                break;
            }
            else
            {
                m_iNextFrameIndex = m_iDurationTween;
                m_fCurrentFrame = m_fCurrentPercent * m_iNextFrameIndex;
                m_iTotalDuration = 0;
                m_iBetweenDuration = 0;
                m_iFromIndex = m_iToIndex = 0;
                break;
            }
        }
        break;
        case ANIMATION_TO_LOOP_FRONT:
        {
            m_eLoopType = ANIMATION_LOOP_FRONT;

            m_iNextFrameIndex = m_iDurationTween > 0 ? m_iDurationTween : 1;

            if (m_pMovementBoneData->delay != 0)
            {
                //
                m_fCurrentFrame = (1 - m_pMovementBoneData->delay) * (float)m_iNextFrameIndex;
                m_fCurrentPercent = m_fCurrentFrame / m_iNextFrameIndex;
            }
            else
            {
                m_fCurrentPercent = 0;
                m_fCurrentFrame = 0;
            }

            m_iTotalDuration = 0;
            m_iBetweenDuration = 0;
            m_iFromIndex = m_iToIndex = 0;
        }
        break;
        case ANIMATION_MAX:
        {
            m_fCurrentPercent = 1;
            m_bIsComplete = true;
            m_bIsPlaying = false;
        }
        break;
        default:
        {
            m_fCurrentFrame = fmodf(m_fCurrentFrame, m_iNextFrameIndex);

            m_iTotalDuration = 0;
            m_iBetweenDuration = 0;
            m_iFromIndex = m_iToIndex = 0;
        }
        break;
        }
    }

    if (m_fCurrentPercent < 1 && m_eLoopType <= ANIMATION_TO_LOOP_BACK)
    {
        m_fCurrentPercent = sin(m_fCurrentPercent * CC_HALF_PI);
    }

    float percent  = m_fCurrentPercent;

    if (m_eLoopType > ANIMATION_TO_LOOP_BACK)
    {
        percent = updateFrameData(percent);
    }

    if(m_eFrameTweenEasing != TWEEN_EASING_MAX)
    {
        tweenNodeTo(percent);
    }
}
void MessageAngularRate::updateFrame(float x, float y, float z) {
    x_angular_rate = x / 0.01;
    y_angular_rate = y / 0.01;
    z_angular_rate = z / 0.01;
    updateFrameData();
}
MessageAngularRate::MessageAngularRate(long period) : TxMsg(period, ARBID_ANGULAR_RATE, 6) {
    x_angular_rate = 0;
    y_angular_rate = 0;
    z_angular_rate = 0;
    updateFrameData();
}
Example #6
0
void Tween::play(MovementBoneData *movementBoneData, int durationTo, int durationTween,  int loop, int tweenEasing)
{
    ProcessBase::play(durationTo, durationTween, loop, tweenEasing);

    if (loop)
    {
        _loopType = ANIMATION_TO_LOOP_FRONT;
    }
    else
    {
        _loopType = ANIMATION_NO_LOOP;
    }

    _totalDuration = 0;
    _betweenDuration = 0;
    _fromIndex = _toIndex = 0;

    bool difMovement = movementBoneData != _movementBoneData;

    setMovementBoneData(movementBoneData);
    _rawDuration = _movementBoneData->duration;

    FrameData *nextKeyFrame = _movementBoneData->getFrameData(0);
    _tweenData->displayIndex = nextKeyFrame->displayIndex;

    if (_bone->getArmature()->getArmatureData()->dataVersion >= VERSION_COMBINED)
    {
        TransformHelp::nodeSub(*_tweenData, *_bone->getBoneData());
        _tweenData->scaleX += 1;
        _tweenData->scaleY += 1;
    }

    if (_rawDuration == 0 )
    {
        _loopType = SINGLE_FRAME;
        if(durationTo == 0)
        {
            setBetween(nextKeyFrame, nextKeyFrame);
        }
        else
        {
            setBetween(_tweenData, nextKeyFrame);
        }
        _frameTweenEasing = Linear;
    }
    else if (_movementBoneData->frameList.size() > 1)
    {
        _durationTween = durationTween * _movementBoneData->scale;

        if (loop && _movementBoneData->delay != 0)
        {
            setBetween(_tweenData, tweenNodeTo(updateFrameData(1 - _movementBoneData->delay), _between));
        }
        else
        {
            if (!difMovement || durationTo == 0)
            {
                setBetween(nextKeyFrame, nextKeyFrame);
            }
            else
            {
                setBetween(_tweenData, nextKeyFrame);
            }
        }
    }

    tweenNodeTo(0);
}
Example #7
0
void Tween::updateHandler()
{
    if (_currentPercent >= 1)
    {
        switch(_loopType)
        {
        case SINGLE_FRAME:
        {
            _currentPercent = 1;
            _isComplete = true;
            _isPlaying = false;
        }
        break;
        case ANIMATION_NO_LOOP:
        {
            _loopType = ANIMATION_MAX;


            if (_durationTween <= 0)
            {
                _currentPercent = 1;
            }
            else
            {
                _currentPercent = (_currentPercent - 1) * _nextFrameIndex / _durationTween;
            }

            if (_currentPercent >= 1)
            {
                _currentPercent = 1;
                _isComplete = true;
                _isPlaying = false;
                break;
            }
            else
            {
                _nextFrameIndex = _durationTween;
                _currentFrame = _currentPercent * _nextFrameIndex;
                _totalDuration = 0;
                _betweenDuration = 0;
                _fromIndex = _toIndex = 0;
                break;
            }
        }
        break;
        case ANIMATION_TO_LOOP_FRONT:
        {
            _loopType = ANIMATION_LOOP_FRONT;

            _nextFrameIndex = _durationTween > 0 ? _durationTween : 1;

            if (_movementBoneData->delay != 0)
            {
                //
                _currentFrame = (1 - _movementBoneData->delay) * (float)_nextFrameIndex;
                _currentPercent = _currentFrame / _nextFrameIndex;
            }
            else
            {
                _currentPercent = 0;
                _currentFrame = 0;
            }

            _totalDuration = 0;
            _betweenDuration = 0;
            _fromIndex = _toIndex = 0;
        }
        break;
        case ANIMATION_MAX:
        {
            _currentPercent = 1;
            _isComplete = true;
            _isPlaying = false;
        }
        break;
        default:
        {
            _currentFrame = fmodf(_currentFrame, _nextFrameIndex);
        }
        break;
        }
    }

    if (_currentPercent < 1 && _loopType <= ANIMATION_TO_LOOP_BACK)
    {
        _currentPercent = sin(_currentPercent * CC_HALF_PI);
    }

    float percent  = _currentPercent;

    if (_loopType > ANIMATION_TO_LOOP_BACK)
    {
        percent = updateFrameData(percent);
    }

    if(_frameTweenEasing != TWEEN_EASING_MAX)
    {
        tweenNodeTo(percent);
    }
}