using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Bitsplash.Vector { public class ParameterizedShape : MaskableGraphic { public Sprite sprite; public int EdgeCount=3; public float EdgeRoundingOffset; public int EdgeRoundingSegments; public float Rotation = 0; // Update is called once per frame void Update() { } public override Texture mainTexture { get { if (sprite == null) return base.mainTexture; return sprite.texture; } } protected override void OnPopulateMesh(VertexHelper vh) { if (EdgeCount < 3) return; var rect = GetPixelAdjustedRect(); float radius = Mathf.Min(rect.width, rect.height) * 0.5f; var list = CommonVectors.mTmpList; list.Clear(); CommonVectors.NPolygon(EdgeCount, radius, radius, list); if (EdgeRoundingOffset > 0f) { var smoothList = CommonVectors.mTmpSmoothList; smoothList.Clear(); CommonVectors.SmoothCorners(list, EdgeRoundingOffset, EdgeRoundingSegments, smoothList); list = smoothList; } Matrix4x4 m = Matrix4x4.Rotate(Quaternion.Euler(0f, 0f, Rotation)); for (int i = 0; i < list.Count; i++) list[i] = m*list[i]; Vector2 centroid = new Vector2(); float minX = float.PositiveInfinity; float minY = float.PositiveInfinity; float maxX = float.NegativeInfinity; float maxY = float.NegativeInfinity; for(int i=0; i