Initial Commit
This commit is contained in:
commit
ee5c2f922d
2255 changed files with 547750 additions and 0 deletions
144
Assets/Scripts/UI/SpriteImage.cs
Normal file
144
Assets/Scripts/UI/SpriteImage.cs
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
using Trive.Assets.Scripts.Utils.Extensions;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.UI
|
||||
{
|
||||
public class SpriteImage : MaskableGraphic
|
||||
{
|
||||
protected static Material s_ETC1DefaultUI;
|
||||
|
||||
[SerializeField] private Sprite m_Sprite;
|
||||
|
||||
public static Material defaultETC1GraphicMaterial
|
||||
{
|
||||
get
|
||||
{
|
||||
if (s_ETC1DefaultUI == null)
|
||||
{
|
||||
s_ETC1DefaultUI = Canvas.GetETC1SupportedCanvasMaterial();
|
||||
}
|
||||
return s_ETC1DefaultUI;
|
||||
}
|
||||
}
|
||||
|
||||
public Sprite sprite
|
||||
{
|
||||
get => m_Sprite;
|
||||
set
|
||||
{
|
||||
if (m_Sprite != value)
|
||||
{
|
||||
m_Sprite = value;
|
||||
SetAllDirty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float pixelsPerUnit
|
||||
{
|
||||
get
|
||||
{
|
||||
float spritePixelsPerUnit = 100;
|
||||
if (sprite)
|
||||
{
|
||||
spritePixelsPerUnit = sprite.pixelsPerUnit;
|
||||
}
|
||||
|
||||
float referencePixelsPerUnit = 100;
|
||||
if (canvas)
|
||||
{
|
||||
referencePixelsPerUnit = canvas.referencePixelsPerUnit;
|
||||
}
|
||||
|
||||
return spritePixelsPerUnit / referencePixelsPerUnit;
|
||||
}
|
||||
}
|
||||
|
||||
public override Texture mainTexture
|
||||
{
|
||||
get
|
||||
{
|
||||
if (sprite == null)
|
||||
{
|
||||
if (material != null && material.mainTexture != null)
|
||||
{
|
||||
return material.mainTexture;
|
||||
}
|
||||
return s_WhiteTexture;
|
||||
}
|
||||
|
||||
return sprite.texture;
|
||||
}
|
||||
}
|
||||
|
||||
public override Material material
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_Material != null)
|
||||
{
|
||||
return m_Material;
|
||||
}
|
||||
#if UNITY_EDITOR
|
||||
if (Application.isPlaying && sprite && sprite.associatedAlphaSplitTexture != null)
|
||||
{
|
||||
return defaultETC1GraphicMaterial;
|
||||
}
|
||||
#else
|
||||
if (sprite && sprite.associatedAlphaSplitTexture != null)
|
||||
return defaultETC1GraphicMaterial;
|
||||
#endif
|
||||
|
||||
return defaultMaterial;
|
||||
}
|
||||
|
||||
set { base.material = value; }
|
||||
}
|
||||
|
||||
protected override void OnPopulateMesh(VertexHelper toFill)
|
||||
{
|
||||
if (sprite == null)
|
||||
{
|
||||
base.OnPopulateMesh(toFill);
|
||||
return;
|
||||
}
|
||||
|
||||
toFill.Clear();
|
||||
var rect = GetPixelAdjustedRect();
|
||||
var vertecies = sprite.vertices;
|
||||
|
||||
if (vertecies.Length <= 0)
|
||||
{
|
||||
base.OnPopulateMesh(toFill);
|
||||
return;
|
||||
}
|
||||
|
||||
var bounds = new Rect(vertecies[0], Vector2.zero);
|
||||
for (var i = 1; i < vertecies.Length; i++)
|
||||
{
|
||||
bounds = bounds.Encapculate(vertecies[i]);
|
||||
}
|
||||
|
||||
var maxDist = Mathf.Max(bounds.width, bounds.height) * 0.5f;
|
||||
var triangles = sprite.triangles;
|
||||
var uv = sprite.uv;
|
||||
|
||||
for (var i = 0; i < vertecies.Length; i++)
|
||||
{
|
||||
toFill.AddVert(
|
||||
new UIVertex
|
||||
{
|
||||
position = (vertecies[i] - bounds.center) / maxDist * Mathf.Min(rect.width, rect.height) * 0.5f,
|
||||
color = color,
|
||||
uv0 = uv[i]
|
||||
});
|
||||
}
|
||||
|
||||
for (var i = 0; i < triangles.Length; i += 3)
|
||||
{
|
||||
toFill.AddTriangle(triangles[i], triangles[i + 1], triangles[i + 2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue