using System; using UnityEngine; namespace UnityEditor.U2D.Animation { internal class DefaultPoseScope : IDisposable { private bool m_Disposed; private SkeletonCache m_Skeleton; private BonePose[] m_Pose; private bool m_DoRestorePose = false; private bool m_UseLocalPose; public DefaultPoseScope(SkeletonCache skeleton, bool useLocalPose = true) { Debug.Assert(skeleton != null); m_Skeleton = skeleton; m_UseLocalPose = useLocalPose; if (m_Skeleton.isPosePreview) { m_DoRestorePose = true; if(useLocalPose) m_Pose = m_Skeleton.GetLocalPose(); else m_Pose = m_Skeleton.GetWorldPose(); m_Skeleton.RestoreDefaultPose(); } } ~DefaultPoseScope() { if (!m_Disposed) Debug.LogError("Scope was not disposed! You should use the 'using' keyword or manually call Dispose."); } public void Dispose() { if (m_Disposed) return; m_Disposed = true; if (m_Skeleton != null && m_DoRestorePose) { if(m_UseLocalPose) m_Skeleton.SetLocalPose(m_Pose); else m_Skeleton.SetWorldPose(m_Pose); } } } }