// UIBasicSprite.cs
//-------------------------------------------------------------------------
// add
[HideInInspector][SerializeField] protected float mRound = 0;
// add
public float round {
get {
return mRound;
}
set {
mRound = value;
MarkAsChanged();
}
}
// modify
void SimpleFill (BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
{
// add
if (this.round > 0) {
SimpleFillRound (verts, uvs, cols);
return;
}
:
}
// add
void SimpleFillRound (BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
{
Vector4 v = drawingDimensions;
Vector4 u = drawingUVs;
Color32 c = drawingColor;
float width = v.z - v.x;
float height = v.w - v.y;
float uvWidth = u.z - u.x;
float uvHeight = u.w - u.y;
float uvRound = round * (uvWidth / width);
int slice = 1;
slice = Mathf.CeilToInt(round / 2);
slice = Mathf.Min(20, slice);
float[] xList
= new float[slice
+1]; float[] yList
= new float[slice
+1];
for (int i=0; i < slice; i++) {
float deg = -180f + (90f/slice) * i;
float x = Mathf.Cos(deg * Mathf.Deg2Rad);
float y = Mathf.Sqrt(1-(x*x));
xList[i] = 1+x;
yList[i] = y;
}
xList[slice] = 1;
yList[slice] = 1;
// left
for (int i=0; i < slice; i++) {
float x1 = xList[i] * round;
float x2 = xList[i+1] * round;
float uvX1 = xList[i] * uvRound;
float uvX2 = xList[i+1] * uvRound;
float y1 = round - round * (yList[i]);
float y2 = round - round * (yList[i+1]);
float uvY1 = uvRound - uvRound * (yList[i]);
float uvY2 = uvRound - uvRound * (yList[i+1]);
verts
.Add(new Vector3
(v
.x+x1, v
.y+y1
)); verts
.Add(new Vector3
(v
.x+x1, v
.w-y1
)); verts
.Add(new Vector3
(v
.x+x2, v
.w-y2
)); verts
.Add(new Vector3
(v
.x+x2, v
.y+y2
)); uvs
.Add(new Vector2
(u
.x+uvX1, u
.y+uvY1
)); uvs
.Add(new Vector2
(u
.x+uvX1, u
.w-uvY1
)); uvs
.Add(new Vector2
(u
.x+uvX2, u
.w-uvY2
)); uvs
.Add(new Vector2
(u
.x+uvX2, u
.y+uvY2
)); cols.Add(c);
cols.Add(c);
cols.Add(c);
cols.Add(c);
}
// center
verts
.Add(new Vector3
(v
.x+round, v
.y)); verts
.Add(new Vector3
(v
.x+round, v
.w)); verts
.Add(new Vector3
(v
.z-round, v
.w)); verts
.Add(new Vector3
(v
.z-round, v
.y)); uvs
.Add(new Vector2
(u
.x+uvRound, u
.y)); uvs
.Add(new Vector2
(u
.x+uvRound, u
.w)); uvs
.Add(new Vector2
(u
.z-uvRound, u
.w)); uvs
.Add(new Vector2
(u
.z-uvRound, u
.y)); cols.Add(c);
cols.Add(c);
cols.Add(c);
cols.Add(c);
// right
for (int i=0; i < slice; i++) {
float x1 = xList[i] * round;
float x2 = xList[i+1] * round;
float uvX1 = xList[i] * uvRound;
float uvX2 = xList[i+1] * uvRound;
float y1 = round - round * (yList[i]);
float y2 = round - round * (yList[i+1]);
float uvY1 = uvRound - uvRound * (yList[i]);
float uvY2 = uvRound - uvRound * (yList[i+1]);
verts
.Add(new Vector3
(v
.z-x1, v
.y+y1
)); verts
.Add(new Vector3
(v
.z-x1, v
.w-y1
)); verts
.Add(new Vector3
(v
.z-x2, v
.w-y2
)); verts
.Add(new Vector3
(v
.z-x2, v
.y+y2
)); uvs
.Add(new Vector2
(u
.z-uvX1, u
.y+uvY1
)); uvs
.Add(new Vector2
(u
.z-uvX1, u
.w-uvY1
)); uvs
.Add(new Vector2
(u
.z-uvX2, u
.w-uvY2
)); uvs
.Add(new Vector2
(u
.z-uvX2, u
.y+uvY2
)); cols.Add(c);
cols.Add(c);
cols.Add(c);
cols.Add(c);
}
}
// UIBasicSpriteEditor.cs
//-------------------------------------------------------------------------
// modify
protected override void DrawCustomProperties ()
{
// :
if (type == UISprite.Type.Simple)
{
NGUIEditorTools.DrawProperty("Flip", serializedObject, "mFlip");
// add
NGUIEditorTools.DrawProperty("Round", serializedObject, "mRound");
}
// :
}