You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
4.7 KiB
177 lines
4.7 KiB
using System; |
|
using UnityEngine; |
|
using System.Collections.Generic; |
|
|
|
namespace UnityEditor |
|
{ |
|
/// <summary>Abstract class that is used by systems to encapsulate Sprite data representation. Currently this is used by Sprite Editor Window.</summary> |
|
[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; |
|
|
|
// <summary>The name of the Sprite data.</summary> |
|
public string name |
|
{ |
|
get { return m_Name; } |
|
set { m_Name = value; } |
|
} |
|
|
|
// <summary>Vector2value representing the pivot for the Sprite data.</summary> |
|
public Vector2 pivot |
|
{ |
|
get { return m_Pivot; } |
|
set { m_Pivot = value; } |
|
} |
|
|
|
/// <summary>SpriteAlignment that represents the pivot value for the Sprite data.</summary> |
|
public SpriteAlignment alignment |
|
{ |
|
get { return m_Alignment; } |
|
set { m_Alignment = value; } |
|
} |
|
|
|
/// <summary>Returns a Vector4 that represents the border of the Sprite data.</summary> |
|
public Vector4 border |
|
{ |
|
get { return m_Border; } |
|
set { m_Border = value; } |
|
} |
|
|
|
// <summary>Rect value that represents the position and size of the Sprite data.</summary> |
|
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; } |
|
} |
|
|
|
// <summary>GUID to uniquely identify the SpriteRect data. This will be populated to Sprite.spriteID to identify the SpriteRect used to generate the Sprite.</summary> |
|
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(); |
|
} |
|
} |
|
} |
|
|
|
/// <summary>Helper method to get SpriteRect.spriteID from a SerializedProperty.</summary> |
|
/// <param name="sp">The SerializedProperty to acquire from.</param> |
|
/// <returns>GUID for the SpriteRect.</returns> |
|
public static GUID GetSpriteIDFromSerializedProperty(SerializedProperty sp) |
|
{ |
|
return new GUID(sp.FindPropertyRelative("m_SpriteID").stringValue); |
|
} |
|
} |
|
|
|
internal class SpriteRectCache : ScriptableObject |
|
{ |
|
[SerializeField] |
|
private List<SpriteRect> 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<SpriteRect>(); |
|
} |
|
} |
|
}
|
|
|