using System; using UnityEngine; namespace UnityEditor.U2D.Sprites { /// /// Structure to hold the edit capability of a sprite in Sprite Editor Window. /// [Serializable] public struct EditCapability : IEquatable { /// /// Default editing capability where all capability is allowed. /// public static EditCapability defaultCapability = new EditCapability() { m_Capability = EEditCapability.None }; [SerializeField] EEditCapability m_Capability; /// /// Constructor to create EditCapability with specific capabilities. /// /// Capabilities allowed. public EditCapability(params EEditCapability[] capabilities) { m_Capability = EEditCapability.None; if (capabilities != null) { for (int i = 0; i < capabilities.Length; ++i) { SetCapability(capabilities[i], true); } } } /// /// Check if the capability is enabled. /// /// Capability to check. /// True if capability is enabled. False otherwise. public bool HasCapability(EEditCapability hasCapability) { return m_Capability.HasFlag(hasCapability); } /// /// Enable or disable a capability. /// /// Capability to modify. /// True to enable. False otherwise. public void SetCapability(EEditCapability capability, bool on) { if(on) m_Capability |= capability; else m_Capability &= ~capability; } /// /// Equality operator. /// /// Value to compare /// True if equal, false otherwise. public bool Equals(EditCapability other) { return m_Capability == other.m_Capability; } /// /// Equality operator. /// /// Value to compare /// True if equal, false otherwise. public override bool Equals(object obj) { return obj is EditCapability other && Equals(other); } /// /// Get the hash code of the capability. /// /// Hash value for the data. public override int GetHashCode() { return (int)m_Capability; } } /// /// Edit capability flags. /// [Flags] public enum EEditCapability { /// No capability. None = 0, /// Edit sprite's name capability. EditSpriteName = 1 << 0, /// Edit sprite's rect capability. EditSpriteRect = 1 << 1, /// Edit sprite's border capability. EditBorder = 1 << 2, /// Edit sprite's pivot capability. EditPivot = 1 << 3, /// Allow creation and deletion of sprite. CreateAndDeleteSprite = 1 << 4, /// Allow slicing of Sprites on import of asset. SliceOnImport = 1 << 5, /// All capabilities are enabled. All = EditSpriteRect | EditBorder | EditPivot | EditSpriteName | CreateAndDeleteSprite | SliceOnImport } }