56 lines
1.4 KiB
C#
56 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|