using System; using UnityEngine; using System.Collections.Generic; namespace UnityEditor { /// Abstract class that is used by systems to encapsulate Sprite data representation. Currently this is used by Sprite Editor Window. [Serializable] public class SpriteRect { [SerializeField] string m_Name; [SerializeField] string m_OriginalName; [SerializeField] Vector2 m_Pivot; [SerializeField] SpriteAlignment m_Alignment; [SerializeField] Vector4 m_Border; [SerializeField] Rect m_Rect; [SerializeField] string m_SpriteID; GUID m_GUID; // The name of the Sprite data. public string name { get { return m_Name; } set { m_Name = value; } } // Vector2value representing the pivot for the Sprite data. public Vector2 pivot { get { return m_Pivot; } set { m_Pivot = value; } } /// SpriteAlignment that represents the pivot value for the Sprite data. public SpriteAlignment alignment { get { return m_Alignment; } set { m_Alignment = value; } } /// Returns a Vector4 that represents the border of the Sprite data. public Vector4 border { get { return m_Border; } set { m_Border = value; } } // Rect value that represents the position and size of the Sprite data. public Rect rect { get { return m_Rect; } set { m_Rect = value; } } internal string originalName { get { if (m_OriginalName == null) { m_OriginalName = name; } return m_OriginalName; } set { m_OriginalName = value; } } // GUID to uniquely identify the SpriteRect data. This will be populated to Sprite.spriteID to identify the SpriteRect used to generate the Sprite. public GUID spriteID { get { ValidateGUID(); return m_GUID; } set { m_GUID = value; m_SpriteID = m_GUID.ToString(); ValidateGUID(); } } private void ValidateGUID() { if (m_GUID.Empty()) { // We can't use ISerializationCallbackReceiver because we will hit into Script serialization errors m_GUID = new GUID(m_SpriteID); if (m_GUID.Empty()) { m_GUID = GUID.Generate(); m_SpriteID = m_GUID.ToString(); } } } /// Helper method to get SpriteRect.spriteID from a SerializedProperty. /// The SerializedProperty to acquire from. /// GUID for the SpriteRect. public static GUID GetSpriteIDFromSerializedProperty(SerializedProperty sp) { return new GUID(sp.FindPropertyRelative("m_SpriteID").stringValue); } } internal class SpriteRectCache : ScriptableObject { [SerializeField] private List m_Rects; public int Count { get { return m_Rects != null ? m_Rects.Count : 0; } } public SpriteRect RectAt(int i) { return i >= Count || i < 0 ? null : m_Rects[i]; } public void AddRect(SpriteRect r) { if (m_Rects != null) m_Rects.Add(r); } public void RemoveRect(SpriteRect r) { if (m_Rects != null) m_Rects.RemoveAll(x => x.spriteID == r.spriteID); } public void ClearAll() { if (m_Rects != null) m_Rects.Clear(); } public int GetIndex(SpriteRect spriteRect) { if (m_Rects != null && spriteRect != null) return m_Rects.FindIndex(p => p.spriteID == spriteRect.spriteID); return -1; } public bool Contains(SpriteRect spriteRect) { if (m_Rects != null && spriteRect != null) return m_Rects.Find(x => x.spriteID == spriteRect.spriteID) != null; return false; } void OnEnable() { if (m_Rects == null) m_Rects = new List(); } } }