void Animation::Finish() { if (m_completed) return; m_targetFunc(1.0f); m_running = false; m_completed = true; }
float Animation::Update(float time) { if (m_completed) return 0.0f; const float remaining = m_continuous ? m_duration : (m_duration - time); m_completed = remaining < 0.0f; float pos; if (m_continuous) pos = m_completed ? m_duration : fmodf(time, m_duration); else pos = m_completed ? m_duration : Clamp(time, 0.0f, m_duration); m_targetFunc(m_wrapFunc(m_easingFunc, pos, m_duration)); m_running = !m_completed; if (m_completed && m_callback) m_callback(); return remaining; }