コード例 #1
0
    void Tween::update(Actor& actor, const UpdateState& us)
    {
        _elapsed += us.dt;
        switch (_status)
        {
            case status_delayed:
            {
                if (_elapsed >= _delay)
                {
                    _status = status_started;
                    _start(*_client);
                }
            }
            break;
            case status_started:
            {
                if (_duration)
                {
                    timeMS localElapsed = _elapsed - _delay;
					
					if (_globalEase != ease_linear)
					{
						float p = localElapsed / float(_duration * _loops);						
						timeMS nv = static_cast<timeMS>(calcEase(_globalEase, std::min(p, 1.0f)) * _duration * _loops);
						localElapsed = nv;
					}

					int loopsDone = localElapsed / _duration;					
					_percent = _calcEase(((float)(localElapsed - loopsDone * _duration)) / _duration);

					while(_loopsDone < loopsDone)
					{
						_loopDone(actor, us);
						_loopsDone++;
					}

                    if (_loops > 0 && int(loopsDone) >= _loops)
                    {
                        if (_twoSides)
                            _percent = 0;
                        else
                            _percent = 1;

                        _status = status_done;
                    }
                }
                _update(*_client, us);
            }
            break;
            case status_done:
            {
                done(*_client, us);
            }
            break;
        }
    }
コード例 #2
0
ファイル: Tween.cpp プロジェクト: NeoPeace/oxygine-framework
    void Tween::update(Actor& actor, const UpdateState& us)
    {
        _elapsed += us.dt;
        switch (_status)
        {
            case status_delayed:
            {
                if (_elapsed >= _delay)
                {
                    _status = status_started;
                    _start(*_client);
                }
            }
            break;
            case status_started:
            {
                if (_duration)
                {
                    timeMS localElapsed = _elapsed - _delay;

                    int loopsDone = localElapsed / _duration;

                    _percent = _calcEase(((float)(localElapsed - loopsDone * _duration)) / _duration);
					while(_loopsDone < loopsDone)
					{
						_loopDone(actor, us);
						_loopsDone++;
					}

                    if (_loops > 0 && int(loopsDone) >= _loops)
                    {
                        if (_twoSides)
                            _percent = 0;
                        else
                            _percent = 1;

                        _status = status_done;
                    }
                }
                _update(*_client, us);
            }
            break;
            case status_done:
            {
                done(*_client, us);
            }
            break;
        }
    }