protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); if (sprite == null) { return; } var rect = rectTransform.rect; var rectSize = new Vector2(rect.width, rect.height); var size = new Vector4(0, 0, rectSize.x, rectSize.y); var uv = DataUtility.GetOuterUV(sprite); var pivotSize = Vector2.Dot(rectSize, direction) + spacing; var countInteger = Mathf.FloorToInt(count); var countFract = count - countInteger; var basePos = TransformUtility.CheckOffsetBiased(rectTransform, direction, spacing, count); for (int e = 0; e < countInteger; ++e) { var pos = basePos + e * pivotSize * direction; MeshUtility.AddSimple(vh, Color.white, pos, size, uv); } if (countFract > 0) { var posLast = basePos + countInteger * pivotSize * direction; #if SCALED_FRACTIONAL posLast.x += width * countFract * 0.5f; MeshUtility.AddSimple(vh, Color.white, posLast, size * countFract, uv); #else //clipped factional size.z *= countFract; uv.z = uv.x + (uv.z - uv.x) * countFract; MeshUtility.AddSimple(vh, Color.white, posLast, size, uv); #endif } }
protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); if (sprite == null) { return; } var rect = rectTransform.rect; var rectSize = new Vector2(rect.width, rect.height); var size = new Vector4(0, 0, rectSize.x, rectSize.y); var uv = DataUtility.GetOuterUV(sprite); var pivotSize = Vector2.Dot(rectSize, direction) + spacing; var basePos = TransformUtility.CheckOffsetBiased(rectTransform, direction, spacing, count); int e = 0; for (; e < Mathf.Min(value, count); ++e) { var pos = basePos + e * pivotSize * direction; MeshUtility.AddSimple(vh, Color.white, pos, size, uv); } if (option == null) { return; } uv = DataUtility.GetOuterUV(option); for (; e < count; ++e) { var pos = basePos + e * pivotSize * direction; MeshUtility.AddSimple(vh, Color.white, pos, size, uv); } }
protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); //TODO extend direction var offset = new Vector2(0, 0); var width = 0f; var height = rectTransform.rect.height * 0.5f; var center = TransformUtility.CheckCenter(rectTransform); var centerLocal = center; Vector4 uv, uvInner; Vector4 rect, border; if (middle != null) { width = middle.rect.width * 0.5f; offset = new Vector2(width, 0); uv = DataUtility.GetOuterUV(middle); uvInner = DataUtility.GetInnerUV(middle); rect = new Vector4(-width, -height, width, height); if (uv == uvInner) { MeshUtility.AddSimple(vh, color, centerLocal, rect, uv); } else { border = middle.border; MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, border); } } width = rectTransform.rect.width * 0.5f - width; //handle width < 0 if (mirrored == null || width <= 0) { return; } //Debug.Log($"{width}"); uv = DataUtility.GetOuterUV(mirrored); uvInner = DataUtility.GetInnerUV(mirrored); rect = new Vector4(-width, -height, 0, height); if (uv == uvInner) { centerLocal = center - offset; MeshUtility.AddSimple(vh, color, centerLocal, rect, uv); centerLocal = center + offset; rect.x = -rect.x; MeshUtility.AddSimple(vh, color, centerLocal, rect, uv); } else { border = mirrored.border; centerLocal = center - offset; MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, border); centerLocal = center + offset; rect.x = -rect.x; MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, border); } }
protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); //TODO extend direction var offset = new Vector2(0, 0); var width = 0f; var height = rectTransform.rect.height * 0.5f; var center = TransformUtility.CheckCenter(rectTransform); var centerLocal = center; Vector4 uv, uvInner; Vector4 rect; if (middle != null) { width = middle.rect.width * 0.5f; offset = new Vector2(width, 0); uv = DataUtility.GetOuterUV(middle); uvInner = DataUtility.GetInnerUV(middle); rect = new Vector4(-width, -height, width, height); if (uv == uvInner) { MeshUtility.AddSimple(vh, color, centerLocal, rect, uv); } else { MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, middle.border); } } width = rectTransform.rect.width * 0.5f - width; uv = DataUtility.GetOuterUV(left); uvInner = DataUtility.GetInnerUV(left); rect = new Vector4(-width, -height, 0, height); centerLocal = -offset; if (uv == uvInner) { MeshUtility.AddSimple(vh, color, centerLocal, rect, uv); } else { MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, left.border); } uv = DataUtility.GetOuterUV(right); uvInner = DataUtility.GetInnerUV(right); rect = new Vector4(0, -height, width, height); centerLocal = center + offset; if (uv == uvInner) { MeshUtility.AddSimple(vh, color, centerLocal, rect, uv); } else { MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, right.border); } }