| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- using System;
- using System.Collections.Generic;
- namespace UnityEngine.U2D
- {
- public enum ShapeTangentMode
- {
- Linear = 0,
- Continuous = 1,
- Broken = 2,
- };
- public enum CornerType
- {
- OuterTopLeft,
- OuterTopRight,
- OuterBottomLeft,
- OuterBottomRight,
- InnerTopLeft,
- InnerTopRight,
- InnerBottomLeft,
- InnerBottomRight,
- };
- public enum QualityDetail
- {
- High = 16,
- Mid = 8,
- Low = 4
- }
- public enum Corner
- {
- Disable = 0,
- Automatic = 1,
- Stretched = 2,
- }
- [System.Serializable]
- public class SplineControlPoint
- {
- public Vector3 position;
- public Vector3 leftTangent;
- public Vector3 rightTangent;
- public ShapeTangentMode mode;
- public float height = 1f;
- public float bevelCutoff;
- public float bevelSize;
- public int spriteIndex;
- public bool corner;
- [SerializeField]
- Corner m_CornerMode;
- public Corner cornerMode
- {
- get => m_CornerMode;
- set => m_CornerMode = value;
- }
- public override int GetHashCode()
- {
- return ((int)position.x).GetHashCode() ^ ((int)position.y).GetHashCode() ^ position.GetHashCode() ^
- (leftTangent.GetHashCode() << 2) ^ (rightTangent.GetHashCode() >> 2) ^ ((int)mode).GetHashCode() ^
- height.GetHashCode() ^ spriteIndex.GetHashCode() ^ corner.GetHashCode() ^ (m_CornerMode.GetHashCode() << 2);
- }
- }
- [System.Serializable]
- public class AngleRange : ICloneable
- {
- public float start
- {
- get { return m_Start; }
- set { m_Start = value; }
- }
- public float end
- {
- get { return m_End; }
- set { m_End = value; }
- }
- public int order
- {
- get { return m_Order; }
- set { m_Order = value; }
- }
- public List<Sprite> sprites
- {
- get { return m_Sprites; }
- set { m_Sprites = value; }
- }
- [SerializeField]
- float m_Start;
- [SerializeField]
- float m_End;
- [SerializeField]
- int m_Order;
- [SerializeField]
- List<Sprite> m_Sprites = new List<Sprite>();
- public object Clone()
- {
- AngleRange clone = this.MemberwiseClone() as AngleRange;
- clone.sprites = new List<Sprite>(clone.sprites);
- return clone;
- }
- public override bool Equals(object obj)
- {
- var other = obj as AngleRange;
- if (other == null)
- return false;
- bool equals = start.Equals(other.start) && end.Equals(other.end) && order.Equals(other.order);
- if (!equals)
- return false;
- if (sprites.Count != other.sprites.Count)
- return false;
- for (int i = 0; i < sprites.Count; ++i)
- if (sprites[i] != other.sprites[i])
- return false;
- return true;
- }
- public override int GetHashCode()
- {
- int hashCode = start.GetHashCode() ^ end.GetHashCode() ^ order.GetHashCode();
- if (sprites != null)
- {
- for (int i = 0; i < sprites.Count; i++)
- {
- Sprite sprite = sprites[i];
- if (sprite)
- hashCode = hashCode * 16777619 ^ (sprite.GetHashCode() + i);
- }
- }
- return hashCode;
- }
- }
- [System.Serializable]
- public class CornerSprite : ICloneable
- {
- public CornerType cornerType
- {
- get { return m_CornerType; }
- set { m_CornerType = value; }
- }
- public List<Sprite> sprites
- {
- get { return m_Sprites; }
- set { m_Sprites = value; }
- }
- [SerializeField]
- CornerType m_CornerType; ///< Set Corner type. enum { OuterTopLeft = 0, OuterTopRight = 1, OuterBottomLeft = 2, OuterBottomRight = 3, InnerTopLeft = 4, InnerTopRight = 5, InnerBottomLeft = 6, InnerBottomRight = 7 }
- [SerializeField]
- List<Sprite> m_Sprites;
- public object Clone()
- {
- CornerSprite clone = this.MemberwiseClone() as CornerSprite;
- clone.sprites = new List<Sprite>(clone.sprites);
- return clone;
- }
- public override bool Equals(object obj)
- {
- var other = obj as CornerSprite;
- if (other == null)
- return false;
- if (!cornerType.Equals(other.cornerType))
- return false;
- if (sprites.Count != other.sprites.Count)
- return false;
- for (int i = 0; i < sprites.Count; ++i)
- if (sprites[i] != other.sprites[i])
- return false;
- return true;
- }
- public override int GetHashCode()
- {
- int hashCode = cornerType.GetHashCode();
- if (sprites != null)
- {
- for (int i = 0; i < sprites.Count; i++)
- {
- Sprite sprite = sprites[i];
- if (sprite)
- {
- hashCode ^= (i + 1);
- hashCode ^= sprite.GetHashCode();
- }
- }
- }
- return hashCode;
- }
- }
- [HelpURLAttribute("https://docs.unity3d.com/Packages/com.unity.2d.spriteshape@latest/index.html?subfolder=/manual/SSProfile.html")]
- public class SpriteShape : ScriptableObject
- {
- public List<AngleRange> angleRanges
- {
- get { return m_Angles; }
- set { m_Angles = value; }
- }
- public Texture2D fillTexture
- {
- get { return m_FillTexture; }
- set { m_FillTexture = value; }
- }
- public List<CornerSprite> cornerSprites
- {
- get { return m_CornerSprites; }
- set { m_CornerSprites = value; }
- }
- public float fillOffset
- {
- get { return m_FillOffset; }
- set { m_FillOffset = value; }
- }
- public bool useSpriteBorders
- {
- get { return m_UseSpriteBorders; }
- set { m_UseSpriteBorders = value; }
- }
- [SerializeField]
- List<AngleRange> m_Angles = new List<AngleRange>();
- [SerializeField]
- Texture2D m_FillTexture;
- [SerializeField]
- List<CornerSprite> m_CornerSprites = new List<CornerSprite>();
- [SerializeField]
- float m_FillOffset;
- [SerializeField]
- bool m_UseSpriteBorders = true;
- private CornerSprite GetCornerSprite(CornerType cornerType)
- {
- var cornerSprite = new CornerSprite();
- cornerSprite.cornerType = cornerType;
- cornerSprite.sprites = new List<Sprite>();
- cornerSprite.sprites.Insert(0, null);
- return cornerSprite;
- }
- void ResetCornerList()
- {
- m_CornerSprites.Clear();
- m_CornerSprites.Insert(0, GetCornerSprite(CornerType.OuterTopLeft));
- m_CornerSprites.Insert(1, GetCornerSprite(CornerType.OuterTopRight));
- m_CornerSprites.Insert(2, GetCornerSprite(CornerType.OuterBottomLeft));
- m_CornerSprites.Insert(3, GetCornerSprite(CornerType.OuterBottomRight));
- m_CornerSprites.Insert(4, GetCornerSprite(CornerType.InnerTopLeft));
- m_CornerSprites.Insert(5, GetCornerSprite(CornerType.InnerTopRight));
- m_CornerSprites.Insert(6, GetCornerSprite(CornerType.InnerBottomLeft));
- m_CornerSprites.Insert(7, GetCornerSprite(CornerType.InnerBottomRight));
- }
- void OnValidate()
- {
- if (m_CornerSprites.Count != 8)
- ResetCornerList();
- }
- void Reset()
- {
- m_Angles.Clear();
- ResetCornerList();
- }
- internal static int GetSpriteShapeHashCode(SpriteShape spriteShape)
- {
- // useSpriteBorders, fillOffset and fillTexture are hashChecked elsewhere.
- unchecked
- {
- int hashCode = (int)2166136261;
- hashCode = hashCode * 16777619 ^ spriteShape.angleRanges.Count;
- for (int i = 0; i < spriteShape.angleRanges.Count; ++i)
- {
- hashCode = hashCode * 16777619 ^ (spriteShape.angleRanges[i].GetHashCode() + i);
- }
- hashCode = hashCode * 16777619 ^ spriteShape.cornerSprites.Count;
- for (int i = 0; i < spriteShape.cornerSprites.Count; ++i)
- {
- hashCode = hashCode * 16777619 ^ (spriteShape.cornerSprites[i].GetHashCode() + i);
- }
- return hashCode;
- }
- }
- }
- }
|