private void Process() { if (m_Status == InterpolationStatus.Inactive || m_Status == InterpolationStatus.Paused) { return; } if (m_Status == InterpolationStatus.Playing) { if (IsBehaviourComplete) // Check only the behavior. { m_Status = InterpolationStatus.Complete; LocalOnStatusChange(); } Helper.Update(); if (IsComplete) // Checks both behavior and helper. { m_Status = InterpolationStatus.Complete; LocalOnStatusChange(); } } else if (!IsBehaviourComplete && ContinueOnComplete) { Helper.Update(); } else { return; // Don't want to do the post update. } LocalProcess(); }
/// <summary> /// Pauses the interpolator. /// </summary> /// <remarks> /// <para> /// It is only valid to call this method while <see cref="Status"/> is playing or paused. /// </para> /// </remarks> public void Pause() { switch (m_Status) { case InterpolationStatus.Playing: m_Status = InterpolationStatus.Paused; LocalOnStatusChange(); return; case InterpolationStatus.Paused: return; } Debug.LogError("Can't pause from status: " + m_Status); }
/// <summary> /// Resets the interpolator for re-use. /// </summary> public void Reset() { // Design note: Children can capture the reset by overriding OnStatusChange(). // So don't make this virtual. if (Helper != null) { // Always reset helper. Helper may need internal refresh. Helper.Reset(); } if (m_Status != InterpolationStatus.Inactive) { m_Status = InterpolationStatus.Inactive; LocalOnStatusChange(); } if (m_AutoPlay) { Play(); } }
/// <summary> /// Play the iterpolator. /// </summary> /// <remarks> /// <para> /// The interpolator will be reset and re-started if this method is called when /// <see cref="Status"/> is complete. /// </para> /// </remarks> public void Play() { switch (m_Status) { case InterpolationStatus.Playing: return; case InterpolationStatus.Paused: m_Status = InterpolationStatus.Playing; LocalOnStatusChange(); return; case InterpolationStatus.Complete: Reset(); break; } if (Helper == null) { if (!BaseSettings.ItemToTransform) { BaseSettings.ItemToTransform = transform; } CreateHelper(); } else { Helper.Reset(); } m_Status = InterpolationStatus.Playing; LocalOnStatusChange(); }