Singularity/Library/PackageCache/com.unity.2d.animation@7.0.10/Editor/SkinningModule/DefaultPoseScope.cs
2024-05-06 11:45:45 -07:00

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);
}
}
}
}