Files

144 lines
3.9 KiB
C#
Raw Permalink Normal View History

2020-07-04 14:41:25 +08:00
/*
********************************************************************************
*Copyright(C),coolae.net
*Author: wangkaiyuan
*Version: 2.0
*Date: 2017-01-09
*Description: sprite是四个角保持不变
*
* .
*Others:
*History:
*********************************************************************************
*/
using UnityEngine;
namespace Coolape
{
public class UISlicedSprite : UISprite
{
[ContextMenu("Execute")]
public void refreshCenter() {
mChanged = true;
MarkAsChanged();
}
// Type --> Sliced
[SerializeField]
public UIWidget mCenter = null;
/// <summary>
/// Virtual function called by the UIPanel that fills the buffers.
/// </summary>
protected override void SlicedFill (BetterList<Vector3> verts, BetterList<Vector2> uvs, BetterList<Color32> cols)
{
Vector4 br = border * pixelSize;
if (br.x == 0f && br.y == 0f && br.z == 0f && br.w == 0f) {
SimpleFill (verts, uvs, cols);
return;
}
Color32 c = drawingColor;
Vector4 v = drawingDimensions;
if (mCenter != null) {
Vector4 h = mCenter.drawingDimensions;
/// X = left, Y = bottom, Z = right, W = top.
Vector3 offset = mCenter.transform.localPosition;
// print ("center pos = " + offset );
h.x += offset.x;
h.y += offset.y;
h.z += offset.x;
h.w += offset.y;
// print ("h = " + h );
// print ("v = " + v );
br.x = -(v.x - h.x);
br.y = -(v.y - h.y);
br.z = (v.z - h.z);
br.w = (v.w - h.w);
// print ("br = " + br );
// print ("br w= " + (br.z - br.x).ToString() );
// print ("br h= " + (br.w - br.y).ToString() );
if (br.x < 0f)
br.x = 0f;
if (br.y < 0f)
br.y = 0f;
if (br.z < 0f)
br.z = 0f;
if (br.w < 0f)
br.w = 0f;
}
mTempPos [0].x = v.x;
mTempPos [0].y = v.y;
mTempPos [3].x = v.z;
mTempPos [3].y = v.w;
if (mFlip == Flip.Horizontally || mFlip == Flip.Both) {
mTempPos [1].x = mTempPos [0].x + br.z;
mTempPos [2].x = mTempPos [3].x - br.x;
mTempUVs [3].x = mOuterUV.xMin;
mTempUVs [2].x = mInnerUV.xMin;
mTempUVs [1].x = mInnerUV.xMax;
mTempUVs [0].x = mOuterUV.xMax;
} else {
mTempPos [1].x = mTempPos [0].x + br.x;
mTempPos [2].x = mTempPos [3].x - br.z;
mTempUVs [0].x = mOuterUV.xMin;
mTempUVs [1].x = mInnerUV.xMin;
mTempUVs [2].x = mInnerUV.xMax;
mTempUVs [3].x = mOuterUV.xMax;
}
if (mFlip == Flip.Vertically || mFlip == Flip.Both) {
mTempPos [1].y = mTempPos [0].y + br.w;
mTempPos [2].y = mTempPos [3].y - br.y;
mTempUVs [3].y = mOuterUV.yMin;
mTempUVs [2].y = mInnerUV.yMin;
mTempUVs [1].y = mInnerUV.yMax;
mTempUVs [0].y = mOuterUV.yMax;
} else {
mTempPos [1].y = mTempPos [0].y + br.y;
mTempPos [2].y = mTempPos [3].y - br.w;
mTempUVs [0].y = mOuterUV.yMin;
mTempUVs [1].y = mInnerUV.yMin;
mTempUVs [2].y = mInnerUV.yMax;
mTempUVs [3].y = mOuterUV.yMax;
}
for (int x = 0; x < 3; ++x) {
int x2 = x + 1;
for (int y = 0; y < 3; ++y) {
if (centerType == AdvancedType.Invisible && x == 1 && y == 1)
continue;
int y2 = y + 1;
verts.Add (new Vector3 (mTempPos [x].x, mTempPos [y].y));
verts.Add (new Vector3 (mTempPos [x].x, mTempPos [y2].y));
verts.Add (new Vector3 (mTempPos [x2].x, mTempPos [y2].y));
verts.Add (new Vector3 (mTempPos [x2].x, mTempPos [y].y));
uvs.Add (new Vector2 (mTempUVs [x].x, mTempUVs [y].y));
uvs.Add (new Vector2 (mTempUVs [x].x, mTempUVs [y2].y));
uvs.Add (new Vector2 (mTempUVs [x2].x, mTempUVs [y2].y));
uvs.Add (new Vector2 (mTempUVs [x2].x, mTempUVs [y].y));
cols.Add (c);
cols.Add (c);
cols.Add (c);
cols.Add (c);
}
}
}
}
}