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; } }
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; } }