public void Update() { if (m_animate) { float now = Time.time; m_timeElapsed = now - m_startTime; m_t = m_timeElapsed / m_duration; if (null != m_RescaleTime) { m_t = m_RescaleTime(m_t); } current.rotation = Quaternion.Lerp(m_start.rotation, m_end.rotation, m_t); current.radius = Mathf.Lerp(m_start.radius, m_end.radius, m_t); current.position = Vector3.Lerp(m_start.position, m_end.position, m_t); if (now >= (m_startTime + m_duration)) { m_animate = false; m_RescaleTime = null; // always reset time scale function after each animation if (null != m_OnComplete) { m_OnComplete(); } } } }
public void StartAnimation(Xform startState, Xform endState, float duration, OnCompleteCallback OnComplete = null, TimeScaleFunction RescaleTime = null) { m_start = startState; m_end = endState; current = startState; m_duration = duration; m_startTime = Time.time; m_timeElapsed = 0; m_t = 0; m_animate = true; m_OnComplete = OnComplete; m_RescaleTime = RescaleTime; }
public void StartRotation(float toDegZ, float duration, OnCompleteCallback OnComplete = null, TimeScaleFunction RescaleTime = null) { m_start = current; m_end = current; m_duration = duration; m_startTime = Time.time; m_timeElapsed = 0; m_t = 0; m_animate = true; m_OnComplete = OnComplete; m_RescaleTime = RescaleTime; m_end.rotation = Quaternion.Euler(0, 0, toDegZ); }