using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; namespace TweenAnimation { public class PlaybackTimer { // 动画 private TweenAnimation m_Animation; // 考虑了Pause的playback逻辑时间,考虑了playbackLimit public float time { get { float t = realTime; if (m_PauseRealTime != -1) t = m_PauseRealTime - m_StartRealTime; t = m_Animation.ApplyLimit(t); return t; } } // 从调用Resume开始后的时间 private float realTime { get { return (float)EditorApplication.timeSinceStartup - m_StartRealTime; } } private float m_StartRealTime; private float m_PauseRealTime; public PlaybackTimer(TweenAnimation animation) { m_Animation = animation; Reset(); } //Start & Resume public void Resume() { if (m_PauseRealTime != -1) m_StartRealTime = (float)EditorApplication.timeSinceStartup - time; else m_StartRealTime = (float)EditorApplication.timeSinceStartup; m_PauseRealTime = -1; } public void Pause() { m_PauseRealTime = (float)EditorApplication.timeSinceStartup; float t = m_Animation.ApplyLimit(m_PauseRealTime - m_StartRealTime); m_PauseRealTime = m_StartRealTime + t; } public void Stop() { Reset(); } public void Reset() { m_StartRealTime = -1; m_PauseRealTime = -1; } public void SetPauseTimeOffset(float dt) { m_PauseRealTime += dt; } } }