using System; using System.Collections.Generic; using UnityEngine; namespace UnityEditor.U2D.Animation { internal interface ISkinningCachePersistentState { string lastSpriteId { get; set; } Tools lastUsedTool { get; set; } List lastBoneSelectionIds { get; } Texture2D lastTexture { get; set; } SerializableDictionary lastPreviewPose { get; } SerializableDictionary lastBoneVisibility { get; } SerializableDictionary lastBoneExpansion { get; } SerializableDictionary lastSpriteVisibility { get; } SerializableDictionary lastGroupVisibility { get; } SkinningMode lastMode { get; set; } bool lastVisibilityToolActive { get; set; } int lastVisibilityToolIndex { get; set; } IndexedSelection lastVertexSelection { get; } float lastBrushSize { get; set; } float lastBrushHardness { get; set; } float lastBrushStep { get; set; } } [Serializable] internal class SkinningCachePersistentState : ScriptableSingleton , ISkinningCachePersistentState { [SerializeField] Tools m_LastUsedTool = Tools.EditPose; [SerializeField] SkinningMode m_LastMode = SkinningMode.Character; [SerializeField] string m_LastSpriteId = String.Empty; [SerializeField] List m_LastBoneSelectionIds = new List(); [SerializeField] Texture2D m_LastTexture; [SerializeField] SerializableDictionary m_SkeletonPreviewPose = new SerializableDictionary(); [SerializeField] SerializableDictionary m_BoneVisibility = new SerializableDictionary(); [SerializeField] SerializableDictionary m_BoneExpansion = new SerializableDictionary(); [SerializeField] SerializableDictionary m_SpriteVisibility = new SerializableDictionary(); [SerializeField] SerializableDictionary m_GroupVisibility = new SerializableDictionary(); [SerializeField] IndexedSelection m_VertexSelection; [SerializeField] bool m_VisibilityToolActive; [SerializeField] int m_VisibilityToolIndex = -1; [SerializeField] float m_LastBrushSize = 25f; [SerializeField] float m_LastBrushHardness = 1f; [SerializeField] float m_LastBrushStep = 20f; public SkinningCachePersistentState() { m_VertexSelection = new IndexedSelection(); } void OnEnable() { name = GetType().ToString(); } void OnDisable() { Undo.ClearUndo(this); } public void SetDefault() { m_LastUsedTool = Tools.EditPose; m_LastMode = SkinningMode.Character; m_LastSpriteId = String.Empty; m_LastBoneSelectionIds.Clear(); m_LastTexture = null; m_VertexSelection.Clear(); m_SkeletonPreviewPose.Clear(); m_BoneVisibility.Clear(); m_BoneExpansion.Clear(); m_SpriteVisibility.Clear(); m_GroupVisibility.Clear(); m_VisibilityToolActive = false; m_VisibilityToolIndex = -1; } public string lastSpriteId { get => m_LastSpriteId; set => m_LastSpriteId = value; } public Tools lastUsedTool { get => m_LastUsedTool; set => m_LastUsedTool = value; } public List lastBoneSelectionIds => m_LastBoneSelectionIds; public Texture2D lastTexture { get => m_LastTexture; set { if (value != m_LastTexture) { m_LastMode = SkinningMode.Character; m_LastSpriteId = string.Empty; m_LastBoneSelectionIds.Clear(); m_VertexSelection.Clear(); m_SkeletonPreviewPose.Clear(); m_BoneVisibility.Clear(); m_BoneExpansion.Clear(); m_SpriteVisibility.Clear(); m_GroupVisibility.Clear(); } m_LastTexture = value; } } public SerializableDictionary lastPreviewPose => m_SkeletonPreviewPose; public SerializableDictionary lastBoneVisibility => m_BoneVisibility; public SerializableDictionary lastBoneExpansion => m_BoneExpansion; public SerializableDictionary lastSpriteVisibility => m_SpriteVisibility; public SerializableDictionary lastGroupVisibility => m_GroupVisibility; public SkinningMode lastMode { get => m_LastMode; set => m_LastMode = value; } public bool lastVisibilityToolActive { get => m_VisibilityToolActive; set => m_VisibilityToolActive = value; } public int lastVisibilityToolIndex { get => m_VisibilityToolIndex; set => m_VisibilityToolIndex = value; } public IndexedSelection lastVertexSelection => m_VertexSelection; public float lastBrushSize { get => m_LastBrushSize; set => m_LastBrushSize = value; } public float lastBrushHardness { get => m_LastBrushHardness; set => m_LastBrushHardness = value; } public float lastBrushStep { get => m_LastBrushStep; set => m_LastBrushStep = value; } } }